vba 拆分数据但逗号跳过引号
vba split data but comma skip quotes
通过以下代码我从morningstar.com CSV文件中导入数据,数据以逗号分隔。一些数据包含逗号的问题。
例如,"XX, XXX"。
这种情况的结果是:
单元格 1(X1,Y1)="XX
细胞(X1,Y2)= XXX“
代替:
单元格 1(X1,Y1)=XX,XXX
我的VBA
Sub GetKeyRatios()
Dim URL As String, csv As String, Lines, Values
Dim i As Long, j As Long, WinHttpReq As Object
Dim rngStart As Range
URL = "http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ®ion=usa&culture=en-US&cur=USD&order=asc"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", URL, False
WinHttpReq.send
csv = WinHttpReq.responseText
Lines = Split(csv, vbLf)
Set rngPaste = Sheets("KeyRatios").Range("A1")
For i = 0 To UBound(Lines)
Values = Split(Lines(i), ",")
For j = 0 To UBound(Values)
rngPaste.Offset(i, j).Value = Values(j)
Next j
Next i
End Sub
有什么办法吗?
example
您可以尝试用 ;
替换所有出现的 ","
(包括引号)。第一次操作后,我还替换了代码中的所有引号。然后你可以分裂;获取每个数字。
Sub m()
Dim str As String
'string to split
' Value in A10 is "53,234","45,568","99,999"
'just an example
str = Range("A10").Value ' in your case will be = Lines(i)
'replace all occurences of "," with ;
str = Replace(str, """" & "," & """", ";")
'replace any extra "
str = Replace(str, """", "")
MsgBox (str)
End Sub
你可以试试这个。我添加了一些变量并更正了您的声明 rngPaste
(您声明了 rngStart
)。
Sub GetKeyRatios()
Dim URL As String, csv As String, Lines() As String
Dim Values() As String
Dim i As Long, j As Long, WinHttpReq As Object
Dim k As Integer, l As Integer 'Added to separate row and column numbering
Dim rngPaste As Range
Dim revenue 'Added for concatenation of revenue values
URL = "http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ®ion=usa&culture=en-US&cur=USD&order=asc"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", URL, False
WinHttpReq.send
csv = WinHttpReq.responseText
Lines = Split(csv, vbLf)
Set rngPaste = Sheets("KeyRatios").Range("A1")
k = 0
For i = 0 To UBound(Lines)
Values = Split(Lines(i), ",")
l = 0
If UBound(Values) > 0 Then
For j = 0 To UBound(Values)
If Values(j) = "" Then
l = l + 1
ElseIf Mid(Values(j), 1, 1) = Chr(34) Then
revenue = Mid(Values(j), 2)
ElseIf Mid(Values(j), Len(Values(j)), 1) = Chr(34) Then
revenue = revenue & "," & Mid(Values(j), 1, Len(Values(j)) - 1)
rngPaste.Offset(k, l).Value = revenue
l = l + 1
Else
rngPaste.Offset(k, l).Value = Values(j)
l = l + 1
End If
Next j
ElseIf UBound(Values) = 0 Then
rngPaste.Offset(k, l).Value = Values(0)
End If
k = k + 1
Next i
End Sub
通过以下代码我从morningstar.com CSV文件中导入数据,数据以逗号分隔。一些数据包含逗号的问题。
例如,"XX, XXX"。 这种情况的结果是:
单元格 1(X1,Y1)="XX 细胞(X1,Y2)= XXX“ 代替: 单元格 1(X1,Y1)=XX,XXX
我的VBA
Sub GetKeyRatios()
Dim URL As String, csv As String, Lines, Values
Dim i As Long, j As Long, WinHttpReq As Object
Dim rngStart As Range
URL = "http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ®ion=usa&culture=en-US&cur=USD&order=asc"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", URL, False
WinHttpReq.send
csv = WinHttpReq.responseText
Lines = Split(csv, vbLf)
Set rngPaste = Sheets("KeyRatios").Range("A1")
For i = 0 To UBound(Lines)
Values = Split(Lines(i), ",")
For j = 0 To UBound(Values)
rngPaste.Offset(i, j).Value = Values(j)
Next j
Next i
End Sub
有什么办法吗?
example
您可以尝试用 ;
替换所有出现的 ","
(包括引号)。第一次操作后,我还替换了代码中的所有引号。然后你可以分裂;获取每个数字。
Sub m()
Dim str As String
'string to split
' Value in A10 is "53,234","45,568","99,999"
'just an example
str = Range("A10").Value ' in your case will be = Lines(i)
'replace all occurences of "," with ;
str = Replace(str, """" & "," & """", ";")
'replace any extra "
str = Replace(str, """", "")
MsgBox (str)
End Sub
你可以试试这个。我添加了一些变量并更正了您的声明 rngPaste
(您声明了 rngStart
)。
Sub GetKeyRatios()
Dim URL As String, csv As String, Lines() As String
Dim Values() As String
Dim i As Long, j As Long, WinHttpReq As Object
Dim k As Integer, l As Integer 'Added to separate row and column numbering
Dim rngPaste As Range
Dim revenue 'Added for concatenation of revenue values
URL = "http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ®ion=usa&culture=en-US&cur=USD&order=asc"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", URL, False
WinHttpReq.send
csv = WinHttpReq.responseText
Lines = Split(csv, vbLf)
Set rngPaste = Sheets("KeyRatios").Range("A1")
k = 0
For i = 0 To UBound(Lines)
Values = Split(Lines(i), ",")
l = 0
If UBound(Values) > 0 Then
For j = 0 To UBound(Values)
If Values(j) = "" Then
l = l + 1
ElseIf Mid(Values(j), 1, 1) = Chr(34) Then
revenue = Mid(Values(j), 2)
ElseIf Mid(Values(j), Len(Values(j)), 1) = Chr(34) Then
revenue = revenue & "," & Mid(Values(j), 1, Len(Values(j)) - 1)
rngPaste.Offset(k, l).Value = revenue
l = l + 1
Else
rngPaste.Offset(k, l).Value = Values(j)
l = l + 1
End If
Next j
ElseIf UBound(Values) = 0 Then
rngPaste.Offset(k, l).Value = Values(0)
End If
k = k + 1
Next i
End Sub