Excel VBA代码未遍历第一列,求原因解析
问题分析与解决方案
这问题其实一眼就能找到根源——你的代码主动跳过了第一列,咱们来拆解细节:
核心问题所在
看你代码里的Range选取逻辑:
.Range(.Cells(Line, 2), .Cells(Line, .Columns.Count).End(xlToLeft)).Value
这里的.Cells(Line, 2)指定了当前行的**第2列(B列)**作为数据读取的起始点,而你要的第一列是第1列(A列),自然不会被包含在这个Range里。后面的.Cells(Line, .Columns.Count).End(xlToLeft)只是找当前行最右侧的非空单元格,它只会影响结束列,不会改变起始列的选择。
另外你的循环范围For Line = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row是没问题的——它确实遍历了第一列有数据的所有行,但每一行读取数据时都从B列开始,所以第一列的内容根本没被读取和写入。
修复方案
只需要把起始列的序号从2改成1,让Range从当前行的第1列(A列)开始即可:
With ThisWorkbook.Worksheets(1) For Line = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row 'Write Read-In Data into target data Print #1, Join(Application.Transpose(Application.Transpose(.Range(.Cells(Line, 1), .Cells(Line, .Columns.Count).End(xlToLeft)).Value)), "|") Next End With
额外说明
如果你的第一列存在部分空行,但你依然希望这些行的第一列(即使为空)也被写入结果,这个修改完全适用;如果第一列可能全空,那你可能需要调整循环的终止条件(比如基于其他列的最后一行),但这是另一个场景的问题了。
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

