Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-基于第一个单元格值对范围内的每一行进行操作_Vba_Excel - Fatal编程技术网

Excel VBA-基于第一个单元格值对范围内的每一行进行操作

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

我有一个包含多行的工作表,每行都有相同的字段。第一列包含一个组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
这好像是一个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。我必须将它更改为在不同的工作表中工作,然后写入文件而不是工作表。但我想我至少应该做一些工作。