Я не могу заставить свой макрос перебирать столбцы для выполнения нужного мне действия

#excel #vba

Вопрос:

Я создал макрос, который проверяет строку 3 в столбце B на наличие двух разных критериев, и если один из них удовлетворен, он помещает букву «R» в пустые ячейки в диапазоне B5:B20. Если все пусты, он сбрасывает слово «Нет» в ячейку B34. Мне это нужно, чтобы выполнить ту же операцию в столбцах C-AF, но я не могу заставить ее зациклиться. Любая помощь будет признательна. Спасибо.

 Sub Column_B()  Dim ws As Worksheet  Dim b As Range  Set ws = Worksheets("January")  For Each b In Range("B5:B20")  If b.Value = 0 And ws.Range("b3") = ws.Range("a34") Or b.Value = 0 And ws.Range("b3") = ws.Range("a35") Then  b.Value = "R"  Else  ws.Range("b34") = "No"  End If  Next b End Sub  

Комментарии:

1. Вам нужно поместить ваш текущий цикл в новый цикл for..next, в котором вы будете повторять новые столбцы.

2. Могу я спросить: Является ли рабочий лист, на котором указан диапазон(«B5:B20»), Активным листом? и являются ли рабочие листы(«Январь») отдельным листом?

3. Если сравнение всегда между B3 и A34/A35, вы, вероятно, можете просто использовать For each b in Range("B5:AF20") . В противном случае вам, вероятно, понадобится цикл for для строк и цикл for для столбцов.

Ответ №1:

Выполните итерацию по столбцам от B до AF в строке 3 и используйте смещения для перебора строк с 5 по 20.

 Option Explicit  Sub Column_BtoAF()   Dim ws As Worksheet, r As Long  Dim cell As Range, c As Range, bEmpty As Boolean    Set ws = Worksheets("January")  For Each c In Range("B3:AF3").Cells  If c.Value2 = ws.Range("A34").Value2 _  Or c.Value2 = ws.Range("A35").Value2 Then    bEmpty = True  For r = 5 To 20  Set cell = c.Offset(r - 3)  If IsEmpty(cell) Then  cell.Value = "R"  Else  bEmpty = False  End If  Next  If bEmpty Then c.Offset(31) = "No" ' row 34    End If  Next  MsgBox "Done" End Sub