如何通过Excel VBA为csv文件中的每个string值添加引号?

我有一个csv文件,我需要一个VBA函数,为文件中的每个string值添加引号,以便像

vertical,device_name,value mobile,Apple iPad,0 mobile,HTC,3 

好像

 "vertical","device_name","value" "mobile","Apple iPad",0 "mobile","HTC",3 

我到现在为止发现的是一个macros观的,

 Sub QuotesAroundText() Dim c As Range For Each c In Selection If Not IsNumeric(c.Value) Then c.Value = """" & c.Value & """" End If Next c End Sub 

这几乎完全是我所需要的 – 它添加引号,但不是string,而是Excel单元格。 这意味着,这个macros可以在xlsx文件中正常工作,但不能在csv文件中正常工作。

所以我需要一个vba代码,不加引号到单元格,而是用逗号间的string。

通过模拟一个string生成器,我能够在3秒内处理一个包含59,507行x 9列的CSV文件。 这个过程比标准的连接要快得多。

这个函数被修改了我的答案, 将Excel范围转换成VBAstring

testing

 Sub TestProcessCSVFile() Dim s As String Dim Start: Start = Timer ProcessCSVFile "C:\Users\Owner\Downloads\SampleCSVFile_53000kb.csv", "C:\Users\Owner\Downloads\_temp.csv" Debug.Print "Execution Time: "; Timer - Start; "Second(s)" End Sub 

 Sub ProcessCSVFile(OldFile As String, NewFile As String) Dim Data As String, text As String Dim vCell Dim length As Long Open OldFile For Binary As #1 Data = Space$(LOF(1)) Get #1, , Data Close #1 text = Space(Len(Data) * 1.5) For Each vCell In Split(Replace(Data, vbCrLf, "," & vbCrLf & ","), ",") If Len(vCell) + length + 5 > Len(text) Then text = text & Space(Len(Data) * 0.1) If vCell = vbCrLf Then Mid(text, length, 1) = vbCrLf ElseIf IsNumeric(vCell) Then Mid(text, length + 1, Len(vCell) + 1) = vCell & "," length = length + Len(vCell) + 1 Else Mid(text, length + 1, Len(vCell) + 3) = Chr(34) & vCell & Chr(34) & "," length = length + Len(vCell) + 3 End If Next Open NewFile For Output As #1 Print #1, Left(text, length - 1) Close #1 End Sub 

结果

在这里输入图像说明

使用行input读取文本文件,然后泰勒按照您的需求进行以下过程:

 Sub y() a = "a,b,c,d" 'Split into 1d Array b = Split(a, ",", , vbTextCompare) 'for each element in array add the quotes For c = 0 To UBound(b) b(c) = """" & b(c) & """" Next c 'join the product up d = Join(b, ",") 'Print her out Debug.Print d End Sub 

使用workbooks.opentext文件名:=“您的csv文件与path”,它将打开csv并将它们分离成单元格,然后应用您的macros并再次保存为csv