我有一个Excel表格,有时整个单元格的内容如下:
pos=51;70;112;111;132;153
请注意单个单元格中的整个内容,也就是说值51;70;112...
是在单个单元格中聚集在一起的字符串,而不是在它们自己的单元格中。
我是否可以在包含关键短语"pos="
的所有单元格中编写一个宏,为每个值添加2,以便最终结果为:
pos=53;72;114;113;134;155
答案 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