VBA解析字符串将值放到新列

时间:2015-04-29 15:50:12

标签: parsing excel-vba replace split vba

我有一张包含数据行的工作表。

NOM(LSL,USL)=207.3980(206.1990,208.5970)    NOM(LSL,USL)=207.3980(206.1990,208.5970)    NOM(LSL,USL)=18.8200(18.4400,19.2100)

我想抓住值并将它们放在像

这样的单元格中
207.3980    207.3980    18.8200
206.1990    206.1990    18.4400
208.5970    208.5970    19.2100

我继续收到“ByRef Argument Mismatch”错误。我相信我是如何定义参考单元的。

Sub Parse_Replace()
        Dim i As Double
        Dim ws As Worksheet
            Set ws = ThisWorkbook.ActiveSheet
        Dim Col As Range
        Dim rLastCell As Range
            Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
    For i = rLastCell.Column To 1 Step -1
        Col = ColLett(rLastCell.Column)
        Columns(i).Cells(4) = SplitString(Col3, ",", 4)
        Columns(i).Cells(5) = SplitString(Col3, ",", 5)
        Columns(i).Cells(6) = SplitString(Col3, ",", 6)
    Next i

    End Sub

Function ColLett(Col As Integer) As String

    If Col > 26 Then
        ColLett = ColLett((Col - (Col Mod 26)) / 26) + Chr(Col Mod 26 + 64)
    Else
        ColLett = Chr(Col + 64)
    End If

    End Function

Function SplitString(pValue As String, pChar As String, pIndex As Integer) As Variant
    Dim YString As Variant

        YString = Replace(Replace(Replace(Replace(pValue, " ", ""), "=", ""), "(", ","), ")", ",")
        SplitString = Split(YString, pChar)(pIndex - 1)

    End Function

过程

  • 建立数据列数
  • 遍历每一列

    • 使用ColLett

    • 将列索引转换为列
    • 使用SplitString

    • 设置单元格值
  • 循环

谢谢

编辑:用inteded替换SplitString值。

1 个答案:

答案 0 :(得分:1)

您在此处声明Col为范围:

Dim Col As Range

然后尝试将Col设置为字符串:

Col = ColLett(rLastCell.Column)

设置范围时,必须将其设置为范围。此外,您必须使用SET关键字执行此操作:

Set Col = <a range>

当您设置Col时,只需在rLastCell.Column的每个循环中重复设置For。如果您只需要最后一列的列字母,那么在输入for循环之前执行此操作。

无论如何,所有这一切都毫无意义。在任何时候,您都不会使用在函数中检索故障的列号。实际上,对于你正在做的事情,你不需要专栏信。专栏信件适用于人类;列号是VBA中最重要的。