2016-12-11 47 views
0

通过以下代码,我从一个morningstar.com CSV文件导入数据,数据由逗号分隔。一些数据包含逗号的问题。vba分割数据,但逗号跳过引号

例如,“XX,XXX”。 这种情况的结果是:

 
cell1(X1,Y1)="XX  
cell(X1,Y2)=XXX" 
instead of: 
cell1(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&region=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 

有没有办法做到这一点? attached example

+1

可以打开'.csv'直接'workbooks.Open(“http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ®ion=usa&culture=en- US&cur = USD&order = asc“)' – Slai

+0

你可以发布一些原始数据吗? – nightcrawler23

+0

好主意,它的效果很好 –

回答

0

你可以试试这个。我添加了一些变量并更正了您的声明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&region=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 
+1

非常感谢,代码完美地工作,因为我想要的.THANK –

0

你可以尝试用;替换的","所有出现(包括引号)。在第一次操作后,我还替换了代码中的所有引号。然后你可以分开;得到每个号码。

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 
+0

谢谢。由Rowen Chumacera提供的下面的代码完美地工作 –

相关问题