excel - VBA - 将CSV中每行的第一个值存储到变量中并移动到特定工作表
问题描述
我对 VBA 比较陌生,如果可能的话,我一直想在 VBA 中执行以下操作
- 指向 CSV 文件
- 循环遍历每一行
- 使用每行的第一个值 - 将行的其余部分存储在特定工作表中
我已经设法做到了第 1 点和第 2 点,但是,我在第 3 点上苦苦挣扎
例如:我的 CSV 文件是这样的:
A00,5675,TGI,6897
R88,7647,35968,35864
R88,5968,34531,44566
Z11,2245,FGH,YIU
我想读取每一行的第一个值,在本例中为 A00、R88、R88 和 Z11。
然后根据该值将该特定行写入相应的工作表。
例如,A00 行将被写入名为 A00 的工作表,依此类推。
我已经得到了这么多的参考:
Sub ImportFile()
Dim ws As Worksheet, strFile As String
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") 'Select file
'If first value = A00 - write to ActiveWorkbook.Sheets("A00")
'If first value = Z99 - write to ActiveWorkbook.Sheets("Z99")
Set ws = ActiveWorkbook.Sheets("A00") 'Export to this worksheet
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh
End With
End Sub
任何帮助将非常感激。
解决方案
我已经整理了一些 VBA 代码,这些代码似乎可以按照您的意愿工作。它逐行读取数据文件,使用“,”作为分隔符将此数据拆分为数组,将工作表设置为数组的第一个元素,然后将其余元素放入第一个空白处的单元格中线。
Sub sGetData()
On Error GoTo E_Handle
Dim ws As Worksheet
Dim lngLastRow As Long
Dim strFile As String
Dim intFile As Integer
Dim strInput As String
Dim aData() As String
Dim lngLoop1 As Long
intFile = FreeFile
strFile = "J:\downloads\test3.txt"
Open strFile For Input As intFile
Do
Line Input #intFile, strInput
aData() = Split(strInput, ",")
Set ws = Worksheets(aData(LBound(aData)))
lngLastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For lngLoop1 = LBound(aData) + 1 To UBound(aData)
ws.Cells(lngLastRow + 1, lngLoop1) = aData(lngLoop1)
Next lngLoop1
Loop Until EOF(intFile)
sExit:
On Error Resume Next
Close #intFile
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sGetData", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
它可能与一些“防弹”有关,以处理诸如工作表不存在之类的事情,但它应该给你一个想法。
问候,
推荐阅读
- python - Python 中的 Arcgis:每次执行时颜色变化。如何设置填充颜色?
- vba - 循环移动/调整所有幻灯片上的图像大小
- algorithm - 将一项活动分配给每个人以最大化亲和力得分总和的算法
- javascript - 将 Electron 与 React 结合使用时出现“未捕获的 TypeError:fs.writeFile 不是函数”
- go - 在 go-zookeeper 中创建后节点数据为空
- flutter - 从 Firestore 集合构建的 Flutter Stream Builder 中的多个 Where 案例
- batch-file - 根据日历自动将 autosys 作业置于 ON_ICE
- r - 通过按文件权重对目录和子目录进行排序,在 R 中生成文件树
- sql - 我需要将我的 SQL 语句转换为 linq 我尝试使用 Linqer 但这没有任何魔力
- google-apps-script - 谷歌应用脚本:LockService 不起作用