3

У меня есть рабочая тетрадь с несколькими сотнями листов. Для всех случаев, когда Clear Votive Cup появляется в столбце B, мне нужно изменить значение столбца H в той же строке (с 2.49 до 1.49). Это должно применяться ко всем рабочим листам.

Столбцы последовательно B и H, но строки различаются. Я не могу использовать Find-Replace, потому что есть другие значения 2.49 которые должны остаться 2.49 . Могу ли я создать оператор If-Then который просматривает всю книгу?

1 ответ1

0

Эта простая программа сделает свое дело. Это содержит две петли:

Для каждого WS в ThisWorkbook.Worksheets

Это несколько очевидно. Это будет циклически проходить по каждому листу в вашей книге, которая содержит этот код.

Внутри вышеуказанного цикла содержится еще один "вспомогательный цикл":

Для r = 2 до lastRow(ws, "B")

Итак, мы уже знаем из предыдущего цикла, что ws является текущим рабочим листом в "родительском цикле". r = 2 - это начальная строка (вы можете изменить ее на r = 1, если у вас нет заголовков столбцов). lastRow - это функция, которую я включил в приведенный ниже код для автоматического определения последней строки в любом столбце (в вашем случае мы используем столбец 2 / столбец B).

Следующий код был протестирован и работает:

Option Explicit

Sub changeRows()

    Dim ws As Worksheet, r As Long

    For Each ws In ThisWorkbook.Worksheets
        ws.Activate
        For r = 2 To lastRow(ws, "B")
            If ws.Cells(r, 2) = "Clear Votive Cup" Then
                ws.Cells(r, "H") = 1.49
            End If
        Next r
    Next ws

End Sub

Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
    Debug.Print ws.Name
    With ws
        lastRow = .Cells(.Rows.Count, col).End(xlUp).row
    End With
End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .