文本数据导入Excel似乎是个老生常谈,方法也有很多,例如
- 使用文本编辑器打开文本文件,拷贝粘贴到Excel然后分类
- Power Query中的【从文本/CSV】如下图所示。
但是这个需求略有不同,文本数据为单列,每7行数据为一组,如下图所示。
现在需要将数据导入工作表中B3单元格开始的区域中,并在A列添加序号,如下图所示。
示例代码如下。
Sub ImportTransposedCSV()
Dim strLines as String, strTxtFile as String
Dim intIdx as Intger, intCol as Integer, intRow as Integer
strTxtFile = ThisWorkbook.Path & "\data.csv"
strLines = CreateObject("Scripting.FileSystemObject").OpenTextFile(strTxtFile).ReadAll
arrData = Split(strLines, vbCrLf)
Range("A3:H" & Rows.Count).ClearContents
intRow = 3
For intIdx = 3 To UBound(arrData) Step 7
For intCol = 0 To 6
Cells(intRow, intCol + 2) = "'" & arrData(intIdx + intCol - 3)
Next intCol
Cells(intRow, 1) = "'" & (intRow - 2)
intRow = intRow + 1
Next intIdx
End Sub
【代码解析】
第4行代码创建文本文件的全路径。
第5行代码调用FSO读取文本文件中的全部数据行。
第6行代码调用Split
函数将数据按照换行符拆分为数组。
第7行代码清空保存数据的工作表区域。
第9~15行代码循环处理每行数据。
第10~12行代码循环写入工作波每行的7个单元格。
第11行代码写入数据时,在数据之前添加```,确保数字可以正确显示,而不会被显示科学计数法。
第13行代码在A列填充序号。