Excel:使用数字对单元格进行排序

时间:2018-12-04 09:56:46

标签: excel vba

当前代码:

        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列中。

  

原文:我目前正在使用excel学习VBA,但仍处于困境   任务。我有一列A1:A20,每个单元格都存储一个数字。我需要   复制相同范围内的B1:B20并排列其中的数字   升序。我的问题是我该怎么做?

4 个答案:

答案 0 :(得分:1)

[A1:A20].Copy [B1]
[B1:B20].Sort Key1:=[B1]

答案 1 :(得分:0)

单击“开发人员并记录宏”(如果看不到“开发人员”菜单follow this tutorial。选择单元格A1:A20。复制到B1:B20( Ctrl + C Ctrl + V 效果最佳)。依次单击“数据”,“排序”,不展开选择,不要单击“我的数据有标题”,然后单击“单击“确定”,然后返回到“开发人员”菜单,然后单击“停止记录”,按 Alt + F11 检查刚刚创建的代码。

答案 2 :(得分:0)

粘贴排序范围(范围,数组,排序,范围)

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

答案 3 :(得分:0)

假设您有一列数字范围在“(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