Excel: сортировка ячеек по номерам - PullRequest
0 голосов
/ 04 декабря 2018

Текущий код:

        Public Sub A()
    j = 1
    For i = 1 To 10
        If Cells(i, 1) > 0 Then
         Cells(j, 2) = Cells(i, 1)
         j = j + 1
    [B1:B10].Sort key1:=[B1]
        End If

Next

End Sub

Работает так, что копирует из столбца A в B и сортирует положительные числа.Мой вопрос сейчас состоит в том, как сделать так, чтобы оно включало отрицательные числа под положительными и записывало их в порядке убывания?Все в столбце B.

Оригинал: в настоящее время я изучаю VBA с Excel и застрял на одной задаче.У меня есть столбец A1: A20, в каждой ячейке хранится номер.Мне нужно скопировать тот же диапазон в B1: B20 и расположить числа в порядке возрастания.У меня вопрос, как бы я это сделал?

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Предположим, у вас есть столбец с номером в диапазоне ("A1: A20")

Sub paste_and_filter()

'Variable declaration
Dim rng As Range, rng2 As Range

'Set up of objects
Set rng = Range("A1:A20")
Set rng2 = Range("B1:B20")

'Copy and paste the column
rng.Select
Selection.Copy Destination:=rng2

'Filter
With ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add rng2, xlSortOnValues, xlDescending, xlSortNormal
    .SetRange rng2
    .Header = False
    .MatchCase = False
    .Orientation = xlSortColumns
    .Apply
End With

End Sub
0 голосов
/ 04 декабря 2018

Вставить отсортированный диапазон (Range, Array, Sort, Range)

Option Explicit

Sub PasteSortedRange()

  Const cStrSource As String = "A1:A20"   ' Source Range
  Const cStrTarget As String = "B1:B20"   ' Target Range

  Dim vntSource As Variant                ' Array

  Dim lngR1 As Long                       ' Outer Array Counter
  Dim lngR2 As Long                       ' Inner Array Counter
  Dim dblTemp As Double                   ' Temporary Number Storage

  With ThisWorkbook.ActiveSheet

    ' Paste Source Range into Array.
    vntSource = .Range(cStrSource).Value2

    ' Sort Array.
    For lngR1 = 1 To UBound(vntSource) - 1
      For lngR2 = lngR1 + 1 To UBound(vntSource)
        If vntSource(lngR1, 1) > vntSource(lngR2, 1) Then
          dblTemp = vntSource(lngR1, 1)
          vntSource(lngR1, 1) = vntSource(lngR2, 1)
          vntSource(lngR2, 1) = dblTemp
        End If
      Next
    Next

    ' Paste Array into Target Range.
    .Range(cStrTarget) = vntSource

  End With

End Sub
0 голосов
/ 04 декабря 2018
[A1:A20].Copy [B1]
[B1:B20].Sort Key1:=[B1]
0 голосов
/ 04 декабря 2018

Нажмите кнопку «Разработчик и запишите макрос» (если вы не видите меню «Разработчик» , следуйте этому руководству . Выберите ячейки A1: A20. Скопируйте в B1: B20 ( Ctrl + *)1005 * C , Ctrl + V работает лучше всего). Нажмите «Данные», «Сортировка», не расширяйте выделение, не нажимайте «Мои данные имеют заголовки», нажмитеOK. Вернитесь в меню «Разработчик» и нажмите «Остановить запись». Нажмите Alt + F11 , чтобы просмотреть код, который вы только что создали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...