我有一段代码,它将一系列单元格合并为一个逗号分隔的单元格。例如 A1:1、A2:2、A3:3、A4:4,那么它们在 A5 中将像 (1,2,3,4)。此代码适用于整个工作表。我需要帮助才能在代码中调整其范围。我可以更改行值和列的起始位置,以便获得结果,如代码中所示。谢谢。
我在使用这个 VBA 时遇到的问题是,假设数据在 A:F 中,而输出单元格在 K:M 中,它会删除 M 列之后的单元格中存在的其他不相关数据。
Sub GetValues()
Dim R As Long, C As Long, V As Variant, Txt As String
For C = 11 To Cells(1, Columns.Count).End(xlToLeft).Column
For R = 5 To Cells(Rows.Count, "A").End(xlUp).Row
Txt = ""
For Each V In Split(Cells(1, C).Value, ",")
If Not Intersect(Rows(R), Columns("A:F")).Find(V, , , xlWhole, , , False, False) Is Nothing Then Txt = Txt & "," & V
Next
Cells(R, C).Value = Mid(Txt, 2)
Next
Next
End Sub
答案1
此表达式:Cells(1, Columns.Count).End(xlToLeft).Column
将列循环到第一行的最后一个条目,就像此表达式:Cells(Rows.Count, "A").End(xlUp).Row
将循环到第一列的最后一行。
看起来这个例程只是获取范围内每列第一行的列表,并检查每个元素是否存在于相应行的前 6 个条目中,然后复制那些存在的元素 - 这与您描述的并不完全一致。如果未找到匹配项,则单元格设置为空白。
Intersect(Rows(R), Columns("A:F"))
在我看来,将引导单元格调整为正确的列大小可以更清晰、更经济地表达:Cells(R,1).Resize(1,6)
答案2
我得到了另一个答案Vbaexpress.com, 这里是:
从 AD1 或调整此行以从 AD1 的左侧搜索,在此示例中更改为 S
For C = 11 To Cells(1, "S").End(xlToLeft).Column
顺便说一句,如果你有这样的问题,请尝试下面的方法来追踪问题
Cells(R, C).select
' or
Cells(R, C).interior.colorindex = 6
Cells(R, C).Value = Mid(Txt, 2)