限制 VBA 范围

限制 VBA 范围

我有一段代码,它将一系列单元格合并为一个逗号分隔的单元格。例如 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) 

相关内容