如何实现VBA宏对不同行适配不同列数并消除行尾多余分隔符
VBA按行差异化处理列数生成无多余分隔符文本方案
现有宏默认全表按统一最大列数拼接单元格内容,会导致行尾出现多余|分隔符,可通过逐行动态匹配列数的方式实现需求,匹配规则为:
- 首行固定处理12列
- 中间行固定处理9列
- 最后一行固定处理3列
修正后可直接运行的代码
Sub pipey() '生成|分隔的文本文件,按行规则匹配列数,无行尾多余分隔符 Dim intUsedrows As Long Dim i As Long, j As Long Dim currentColCount As Integer ' 绑定输出文件路径 Open "Y:\purchasing\Pipey.txt" For Output As #1 With Worksheets(1) intUsedrows = .UsedRange.Rows.Count For i = 1 To intUsedrows ' 按当前行位置匹配对应列数 Select Case i Case 1 currentColCount = 12 Case intUsedrows currentColCount = 3 Case Else currentColCount = 9 End Select ' 拼接当前行除最后一列外的内容,列后加分隔符 For j = 1 To currentColCount - 1 Print #1, .Cells(i, j); "|"; Next j ' 输出当前行最后一列,自动触发行换行 Print #1, .Cells(i, currentColCount) Next i End With Close #1 MsgBox "Done Successfully" End Sub
核心调整点
- 移除原代码固定读取全表最大列数的逻辑,逐行根据位置匹配业务要求的列数,从根源避免输出多余分隔符
- 将行计数变量类型从
Integer改为Long,避免数据行数超过32767时出现类型溢出报错 - 修正原代码中With块范围与实际读取范围不匹配的问题:原代码With块指定
a:f范围,但实际读取ActiveSheet的UsedRange,当激活表不是目标工作表时会出现数据读取错误,修正后直接绑定第一个工作表对象读取单元格,逻辑更严谨
内容的提问来源于stack exchange,提问作者GarethH
相关产品推荐
相关产品推荐

