Поскольку вы не предоставили никаких подробностей о том, как выглядят данные, я предоставлю очень общий ответ с функциями VBA
, которые вам необходимы для написания кода самостоятельно .
Если у вас есть ссылка на ячейку через объект .Range()
, используйте следующие функции
В следующем предполагается, что должно быть определено следующее
Dim r as Range
x = r.Value
получить значение ячейки. x = r.Cels(i,j).Value
получить значение i
-ой строки и j
-ого столбца в таблице, начиная с r
.Чтобы получить значение 7 ниже, вы пишете x = r.Cells(7,1).Value
Set r = r.Offset(i,j)
, перемещаете i
строки вниз и j
поперек.Они могут быть положительными, нулевыми или отрицательными.Например, чтобы переместиться на одну строку вверх, r.Offset(-1,0)
Set r = r.Resize(n,m)
разверните диапазон в таблицу с n
строками и m
столбцами, начиная с r
в левом верхнем углу. x = r.Resize(n,m).Value
возвращает двумерный массив из таблицы значений.Работает в обратном порядке также r.Resize(n,m).Value = x
для назначения нескольких значений одним махом.
Теперь, в зависимости от количества строк, с которыми вы имеете дело, я предлагаю вам прочитать все значения в память, циклическиданные, чтобы найти то, что вы ищете, внести изменения и записать обратно.
Предположим, ваши данные начинаются с C3
.В окне кода VBA для листа (не модуля) напишите что-то вроде этого
Dim n As Long, i As Long, index As Long
Dim r As Range, target As String, j As Long
'Find how many rows are filled
Set r = Range("C3")
n = Range(r, r.End(xlDown)).Rows.Count
Set r = r.Resize(n, 1)
'Read all the values into memory
Dim vals() As Variant
vals = r.Value
'Loop from the end and find the target digit
target = "7"
' Start from bottom and search contents for the target digit
i = n
Do While i >= 1
index = InStr(1, vals(i, 1), target, vbTextCompare)
If index > 0 Then
' Found it. 'i' contains the row the target is found.
Exit Do
End If
i = i - 1
Loop
If i = 0 Then
'None found
Exit Sub
End If
' Start from i and go back every 7 to change the value into a '*'
For i = i To 1 Step -7
vals(i, 1) = "*"
' Start from the row above (i-1) and go back every 25
For j = i - 1 To 1 Step -25
vals(j, 1) = "*"
Next j
Next i
'Write the changes back to the sheet
r.Value = vals