Разобрать строки и добавить число к значению - PullRequest
0 голосов
/ 07 марта 2012

У меня есть таблица Excel, в которой иногда вся ячейка имеет следующее содержимое:

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

Обратите внимание на все содержимое в одной ячейке, то есть значение 51;70;112... представляет собой сгруппированные строкивместе в одной ячейке, а не в их собственных.

Могу ли я написать макрос, который во всех ячейках, содержащих ключевую фразу "pos=", добавляет 2 к каждому значению, так что конечный результат:

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

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Вы знаете, что вы можете легко разделить данные без использования макросов, верно? Просто используйте функцию TextToColumns на вкладке Data

Но если вы действительно хотите макрос, вы можете сделать что-то вроде следующего:

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
3 голосов
/ 07 марта 2012

Вот код, который это сделает (проверено на примере в моем 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

Обратите внимание, что я не добавил часть проверки ошибок, если ваши значения не отформатированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...