excel - 对具有特定条件的excel表进行排序(vba)

标签 excel vba loops sorting grouping

这是我的问题,我的 Sheet1 上有这些数据

       A      B        C
   1 Name   Account  Amount 
   2 John   HSBC     -20000
   3 Ashley JPM      140000
   4 Rose   BAML     70000
   5 John   DB       10000
   6 Rose   Barclays -25000
   7 Ashley JPM      -3000
我的目标是使用 vba 对行进行排序并按名称和数量对其进行分组。我在 Sheet2 中寻找的结果是:
       A      B        C
   1 Name   Account  Amount 
   2 John   HSBC     -20000
   3 John   DB       10000
   4
   5 Ashley JPM      -3000
   6 Ashley JPM      140000
   7
   8 Rose   Barclays -25000
   9 Rose   BAML     70000
我已经成功地先取了负值,但我仍然很难取其余的值并在组之间留空行。
这是我开始的代码:
Option Explicit

Sub sort_account()

Dim list_amount As Range, amount As Range
Dim b As Integer

Worksheets("Sheet1").Activate
Set list_amount = Worksheets("Sheet1").Range("C2", Range("C2").End(xlDown))

For Each amount In list_amount
    If amount.Value < 0 Then
        
        b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Sheet2").Cells(b + 1, 1).Value = amount.Offset(0, -2)
        Worksheets("Sheet2").Cells(b + 1, 2).Value = amount.Offset(0, -1)
        Worksheets("Sheet2").Cells(b + 1, 3).Value = amount
        
    End If
Next amount

Worksheets("Sheet2").Activate

End Sub
这给了我一个结果:
       A      B        C
   1 Name   Account  Amount 
   2 John   HSBC     -20000
   5 Ashley JPM      -3000
   8 Rose   Barclays -25000
其余的我真的有困难。你有什么想法 ?我提前感谢你。
注意:顺序无关紧要,我只希望每组的第一个值是负数。
谢谢!

最佳答案

如果这是我的项目,我会分三个不同的步骤来完成:将所有数据从工作表 1 复制到工作表 2;按首选顺序对数据进行排序;从底部开始插入空白行。
下面的代码应该做你所追求的。

Option Explicit
Sub sort_account()
Dim LastRow As Long, i As Long

Sheet2.Cells.ClearContents
Sheet1.UsedRange.Copy Sheet2.Range("A1")

Sheet2.Columns("A:C").Sort Key1:=Sheet2.Range("A2"), order1:=xlAscending, _
Key2:=Sheet2.Range("C2"), order2:=xlAscending, Header:=xlYes

LastRow = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row
For i = LastRow To 4 Step -1
    If Sheet2.Cells(i, "A") = Sheet2.Cells(i - 1, 1) Then
        Sheet2.Cells(i - 1, "A").EntireRow.Insert
    End If
Next i

End Sub

关于excel - 对具有特定条件的excel表进行排序(vba),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65862752/

相关文章:

vba - 追加而不是替换 Word 文档内容

excel - 使用表单复选框取消隐藏/隐藏excel中的行

regex - 限制perl中的for循环

c++ - for循环如何在不打印的情况下工作

Excel工作表公式中的字符串操作

excel - 无法在 Excel VBA 中使用 .End(xlDown) 分配范围?

sql - 从Access中的表中删除记录

php - 使用 PDO 更新 MySQL 记录,但数据包含破坏 SQL 语法的字符串

excel - 如何比较 Excel 中的两列(来自不同工作表)并在前两列匹配时从相应列复制值?

vba - 在工作表的右上角显示用户表单