提问人:Tom D 提问时间:10/20/2023 最后编辑:BigBenTom D 更新时间:10/20/2023 访问量:54
Excel VBA - 如何在循环中查找包含每行数据的最后一列
Excel VBA - How to find the last column with data for each row in a loop
问:
我正在尝试创建一个动态串联脚本。下面是数据示例的图像:
目标是遍历 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,依此类推。关于为什么不更新的任何建议?
答:
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。谢谢!
评论
For Each iCell In Range("A2:A" & lRow)
顺便说一句,之前缺少一个。.
Range
.End(xlToLeft).Column