如何解析单元格中的文本值并将值放入其他单元格

时间:2014-12-12 12:01:25

标签: vba parsing excel-vba excel

我在N2栏中有一个带有以下文字的单元格。

71sdfsdf 2230400DATE of join 1997-06-03PROGRAMME : ACCES PLUSNew Value 534.55Right value 534.55Clear Value 308.50

我需要在New Value之后的数字534.55(在这种情况下)保存在O2列中,Right Value旁边的值在列P2中再次为534.55,如果Clear Value是然后显示它旁边的值308.50将保存在Q2中。

Clear value永远不会被包括在内。

我们可以为此写一个宏吗?我已经使用InStr来获取单元格中存在的值,但我不知道宏中的光标位置如何工作。

2 个答案:

答案 0 :(得分:0)

如果您已经在使用InStr功能,那么您所要做的就是将您提取的值放入所需的单元格中:

Public Sub YourMethod()

    Dim s As String
    s = "71sdfsdf 2230400DATE of join 1997-06-03PROGRAMME : ACCES PLUSNew Value 534.55Right value 534.56Clear Value 308.50"

    Const NEW_VALUE = "New Value"
    Const RIGHT_VALUE = "Right value"
    Const CLEAR_VALUE = "Clear Value"

    Dim posNewValue As Integer
    posNewValue = InStr(1, s, NEW_VALUE, VbCompareMethod.vbTextCompare)

    Dim posRightValue As Integer
    posRightValue = InStr(posNewValue, s, RIGHT_VALUE, VbCompareMethod.vbTextCompare)

    Dim posClearValue As Integer
    posClearValue = InStr(posRightValue, s, CLEAR_VALUE, VbCompareMethod.vbTextCompare)

    Dim newValue As String
    posNewValue = posNewValue + Len(NEW_VALUE)
    newValue = Mid$(s, posNewValue, posRightValue - posNewValue)

    Dim rightValue As String
    Dim clearValue As String
    posRightValue = posRightValue + Len(RIGHT_VALUE)
    If posClearValue > 0 Then
        rightValue = Mid$(s, posRightValue, posClearValue - posRightValue)
        posClearValue = posClearValue + Len(CLEAR_VALUE)
        clearValue = Mid$(s, posClearValue)
    Else
        rightValue = Mid$(s, posRightValue)
    End If

    Sheets("Sheet1").Range("O2").Value = newValue
    Sheets("Sheet1").Range("P2").Value = rightValue
    Sheets("Sheet1").Range("Q2").Value = clearValue


End Sub

答案 1 :(得分:0)

如果数字长度不变,您可以使用以下内容:

For i = MyStart To MyLimit 'rows of the range of interest
    If InStr(1, "New Value ", Range("N" & i).Value) <> 0 Then _
        Range("O" & i).Value = Mid(Range("N" & i).Value, InStr(1, "New Value ", Range("N" & i).Value), 6)
    If InStr(1, "Right Value ", Range("N" & i).Value) <> 0 Then _
        Range("P" & i).Value = Mid(Range("N" & i).Value, InStr(1, "Right Value ", Range("N" & i).Value), 6)
    If InStr(1, "Clear Value ", Range("N" & i).Value) <> 0 Then _
        Range("Q" & i).Value = Mid(Range("N" & i).Value, InStr(1, "Clear Value ", Range("N" & i).Value), 6)
Next i

注意空间的存在与否(我认为它们存在)