【问题标题】:vba split data but comma skip quotesvba拆分数据但逗号跳过引号
【发布时间】:2016-12-11 23:40:08
【问题描述】:

通过以下代码,我从 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&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

有什么办法吗?

例子

【问题讨论】:

  • 你可以直接打开.csvworkbooks.Open("http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=XNYS:JNJ&region=usa&culture=en-US&cur=USD&order=asc")
  • 你能发布一些原始数据吗?
  • 好主意,效果很好

标签: vba comma double-quotes


【解决方案1】:

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

【讨论】:

  • 非常感谢,代码完全符合我的要求。谢谢
【解决方案2】:

您可以尝试将所有出现的","(包括引号)替换为;。在第一次操作后,我还替换了代码中的所有引号。然后你可以分割;获取每个数字。

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

【讨论】:

  • 谢谢。 Rowen Chumacera 提供的以下代码完美运行
猜你喜欢
  • 1970-01-01
  • 2010-12-17
  • 2015-03-07
  • 2011-06-26
  • 2011-12-25
相关资源
最近更新 更多