Excel VBA - 如何在循环中查找包含每行数据的最后一列

Excel VBA - How to find the last column with data for each row in a loop

提问人:Tom D 提问时间:10/20/2023 最后编辑:BigBenTom D 更新时间:10/20/2023 访问量:54

问:

我正在尝试创建一个动态串联脚本。下面是数据示例的图像:

Data

目标是遍历 A 列中的每一行,并连接标题为“Bundle Child x”(用“;”分隔)的值,并将 A 列中的串联列表放在相应的行中。例如,单元格 A2 中的级联列表应为:AVS5-OD101-GL;BT022204-GL型;BT022204-GL型;BT01201-GL型;BT01201-GL型;BT031141-GL系列

这是我到目前为止的代码:

Sub SpecialConcatenate()
Dim Sht As Worksheet
Dim lRow As Long
Dim lCol As Long
Dim iCell As Range

Set Sht = ActiveWorkbook.ActiveSheet
With Sht

    ' Get the last row of data in column B
        lRow = .Cells(.Rows.Count, 2).End(xlUp).Offset(Abs(.Cells(.Rows.Count, 1).End(xlUp).Value <> ""), 0).Row
    
    ' Loop through cells in Column A and run concatenation
        For Each iCell In Range("A2:A" & lRow)
        ' Find the last column in current row
             lCol = .Cells(iCell.Row, .Columns.Count).End(xlToLeft).Column ' Issue is occurring here
            
        Next iCell
    
End With

End Sub

我没有收到任何错误,但 lCol 没有被正确识别。我在代码运行时观察 lCol,它最初被设置为 7,但当循环遍历每一行时,它不会更新。当 iCell.Row = 2 和 3 时,7 是准确的,但当 iCell = 4 时,lCol 应更新为 4,依此类推。关于为什么不更新的任何建议?

Excel VBA7

评论

0赞 BigBen 10/20/2023
For Each iCell In Range("A2:A" & lRow)顺便说一句,之前缺少一个。.Range
0赞 BigBen 10/20/2023
您的数据是表(即使用 Ctrl+T 创建的)吗? 将仅访问表中最右侧的列,而不是最右侧填充的列。.End(xlToLeft).Column

答:

1赞 Rasool Soleimani 10/20/2023 #1

该功能可以满足您的一切需求。只需在单元格 A2 中使用 TEXTJOIN 函数,如下所示:TEXTJOIN(delimiter,ignore_empty,text1,...)

=TEXTJOIN("-",TRUE,B2:N2) 

评论

0赞 Tom D 10/20/2023
虚幻。我花了大约 2 个小时搜索和编写这个 VBA,这正是我一直需要的。我甚至与我公司的 IT 部门进行了交谈,试图弄清楚 VBA。谢谢!