解析字符串,并在值中添加一个数字

时间:2012-03-06 20:29:45

标签: string excel vba excel-vba delimiter

我有一个Excel表格,有时整个单元格的内容如下:

pos=51;70;112;111;132;153

请注意单个单元格中的整个内容,也就是说值51;70;112...是在单个单元格中聚集在一起的字符串,而不是在它们自己的单元格中。

我是否可以在包含关键短语"pos="的所有单元格中编写一个宏,为每个值添加2,以便最终结果为:

pos=53;72;114;113;134;155

2 个答案:

答案 0 :(得分:3)

这是一个代码(在我的Excel 2003上的示例上测试):

Sub t()
Dim rCells As Range, c As Range
Dim arr As Variant, i As Integer

'Define the range to apply the code
Set rCells = Range("A1")
For Each c In rCells
    'check if the cell desserves to be changed (could be adapted though to another check)
    If Left(c.Value, 4) = "pos=" Then
        'split all the values after the "pos=" into an array
        arr = Split(Mid(c.Value, 5, Len(c.Value)), ";")
        'add +2 to every value of the array (we convert the value to be sure, probably unneeded)
        For i = 0 To UBound(arr)
            arr(i) = CLng(arr(i)) + 2
        Next i
        'set back the value to the worksheet
        c.Value = "pos=" & Join(arr, ";")
    End If
Next c
End Sub

请注意,如果您的值格式不正确,我没有添加错误检查部分。

答案 1 :(得分:3)

您知道可以在不使用宏的情况下轻松拆分数据,对吧?只需使用数据选项卡上的TextToColumns函数

即可

但如果您真的想要一个宏,您可以执行以下操作:

Sub AddNumber()
    Dim numberToAdd As Integer
    numberToAdd = 2

    Set myRange = Range("A1:A5")
    For Each myCell In myRange
    If Left(myCell.Value, 4) = "pos=" Then
        arEquality = Split(myCell, "=")
        arElements = Split(arEquality(1), ";")
        For i = 0 To UBound(arElements)
            arElements(i) = arElements(i) + numberToAdd
        Next
        myCell.Offset(0, 1).Value = arEquality(0) + "=" + Join(arElements, ";")
    End If
    Next
End Sub