l oop через каждую строку в заданном диапазоне с оператором if с несколькими условиями в vba - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь сделать l oop через каждую строку в диапазоне J16: P19, и на каждой итерации необходимо проверять, если значение в ячейке = 3, и если текст в соответствующем столбце (диапазон J15: J19) присутствует в диапазоне (W1: W7).

например. Если ячейка (K17) в строке (J17: P17) = 3 и соответствующее имя столбца (K15) этой ячейки присутствует в диапазоне (W1: W7); значение в Q17 должно быть пересчитано на 1.

Это должно быть сделано для каждой строки в диапазоне. Мой код выглядит так:

private Sub CommandButton2_Click()

dim rng As Range
dim i As Range
dim row As Range
Set rng = Range("j16:p19")

For Each row In rng.Rows
    For Each i In row.Cells
       If i.Value = 3 & Cells(i,15) %in% Range("w1:w7") Then
           Cells(row,22).Value = Cells(row,17).Value -1
       Else
           Cells(row,22).Value = Cells(row,17).Value
       End if
    Next i
Next row 
End sub

Он работает, когда я выбираю диапазон только для одного столбца, и без второй части оператора if. У вас есть предложения по решению моей проблемы? заранее спасибо

1 Ответ

0 голосов
/ 05 февраля 2020

Попробуйте это.

Не знаете, почему вы ссылались на столбец 22? Также "% in%" не является допустимым синтаксисом VBA. Я использовал Match вместо этого (который избегает внешнего l oop), но вы можете использовать Find или Countif.

Private Sub CommandButton2_Click()

Dim rng As Range
Dim i As Range
Dim row1 As Range, v As Variant 'better in my view not to call a variable "row"
Set rng = Range("j16:p19")

For Each row1 In rng.Rows
    v = Application.Match(3, row1, 0)
    If IsNumeric(v) Then                'row contains a 3
        If IsNumeric(Application.Match(Cells(row1.row,"J"), Range("W1:W7"), 0)) Then 'corresponding J column value in W1:W7
           Cells(row1.row, "Q").Value = Cells(row1.row, "Q").Value - 1 'deduct 1 from Q
       End If
    End If
Next row1

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