Excel VBA-基于第一个单元格值对范围内的每一行进行操作
我有一个包含多行的工作表,每行都有相同的字段。第一列包含一个组ID。每行可能有一个不同的组,它们可能会混淆。可以有任意数量的不同组ID。我要遍历范围,并为每个组ID在行上执行一个操作Excel VBA-基于第一个单元格值对范围内的每一行进行操作,vba,excel,Vba,Excel,我有一个包含多行的工作表,每行都有相同的字段。第一列包含一个组ID。每行可能有一个不同的组,它们可能会混淆。可以有任意数量的不同组ID。我要遍历范围,并为每个组ID在行上执行一个操作 Group ID A d001 A d002 B d003 A d004 B d005 C d006 B d007 C d008 输出类似于: Group A: d001 d002 d004 Group B: d003 d005 d007 Group C: d006 d008
Group ID
A d001
A d002
B d003
A d004
B d005
C d006
B d007
C d008
输出类似于:
Group A:
d001
d002
d004
Group B:
d003
d005
d007
Group C:
d006
d008
这好像是一个SQL“WHERE”语句。请提前感谢。使用此语句
Sub test()
Dim oCell As Range, i&, LRow&, KeyGR As Variant, KeyIdGr
Dim Group As Object: Set Group = CreateObject("Scripting.Dictionary")
Dim IdGroup As Object: Set IdGroup = CreateObject("Scripting.Dictionary")
i = 1
LRow = Cells(Rows.Count, "A").End(xlUp).Row
For Each oCell In Range("A2:A" & LRow)
If Not Group.exists(oCell.Value) And oCell.Value <> "" Then
Group.Add oCell.Value, i: i = i + 1
End If
Next
For Each oCell In Range("B2:B" & LRow)
If Not Group.exists(oCell.Value) And oCell.Value <> "" Then
IdGroup.Add oCell.Value, oCell.Offset(, -1).Value
End If
Next
i = 1
For Each KeyGR In Group
Cells(i, "C").Value = "Group " & KeyGR & ":"
i = i + 1
For Each KeyIdGr In IdGroup
If IdGroup(KeyIdGr) = KeyGR Then
Cells(i, "C").Value = KeyIdGr
i = i + 1
End If
Next
Next
End Sub
子测试()
Dim oCell作为范围,i&,LRow&,KeyGR作为变型,KeyIdGr
作为对象的Dim组:Set Group=CreateObject(“Scripting.Dictionary”)
Dim IdGroup As Object:设置IdGroup=CreateObject(“Scripting.Dictionary”)
i=1
LRow=单元格(Rows.Count,“A”)。结束(xlUp)。行
对于范围内的每个oCell(“A2:A”和LRow)
如果不存在组(oCell.Value)和oCell.Value“”,则
Group.Add oCell.Value,i:i=i+1
如果结束
下一个
对于范围内的每个oCell(“B2:B”和LRow)
如果不存在组(oCell.Value)和oCell.Value“”,则
添加oCell.Value,oCell.Offset(,-1).Value
如果结束
下一个
i=1
对于组中的每个KeyGR
单元格(i,“C”).Value=“Group”和KeyGR&:“
i=i+1
对于IDGR组中的每个KeyIdGr
如果IdGroup(KeyIdGr)=KeyGR,则
单元格(i,“C”)。值=KeyIdGr
i=i+1
如果结束
下一个
下一个
端接头
最终结果
您基本上是让我们来完成所有的工作。首先,您应该考虑一种算法来实现这一目标(即迭代、在数组中保存组、再次迭代并尝试完成单个组或保存成员…等等)然后试着自己在VBA中实现它。这并不难,因此不是为了编写代码,而是为了帮助您解决问题。这很好,非常感谢@Vasily。我必须将它更改为在不同的工作表中工作,然后写入文件而不是工作表。但我想我至少应该做一些工作。