-6

Как я могу преобразовать это в VBA? Используя эту формулу, она охватывает только 6 строк, а формула уже слишком длинная. Мой отчет имеет 600 строк.

=IF(AND('Risk & Issue Log'!$K$2=$D5,'Risk & Issue Log'!$L$2=F$8,OR('Risk & Issue Log'!$F$2="Open",'Risk & Issue Log'!$F$2="In-progress")),'Risk & Issue Log'!$D$2," ")&IF(AND('Risk & Issue Log'!$K$3=$D5,'Risk & Issue Log'!$L$3=F$8,OR('Risk & Issue Log'!$F$3="Open",'Risk & Issue Log'!$F$3="In-progress")),'Risk & Issue Log'!$D$3," ")&IF(AND('Risk & Issue Log'!$K$4=$D5,'Risk & Issue Log'!$L$4=F$8,OR('Risk & Issue Log'!$F$4="Open",'Risk & Issue Log'!$F$4="In-progress")),'Risk & Issue Log'!$D$4," ")&IF(AND('Risk & Issue Log'!$K$5=$D5,'Risk & Issue Log'!$L$5=F$8,OR('Risk & Issue Log'!$F$5="Open",'Risk & Issue Log'!$F$5="In-progress")),'Risk & Issue Log'!$D$5," ")&IF(AND('Risk & Issue Log'!$K$6=$D5,'Risk & Issue Log'!$L$6=F$8,'Risk & Issue Log'!$F$5="Open"),'Risk & Issue Log'!$D$6," ")


Из комментариев -

Я бы хотел -

  1. сравните каждое значение на листе Risk & Issue Log в столбце K с ячейкой D5
  2. сравните каждое значение на листе Risk & Issue Log в столбце L с ячейкой F8
  3. сравните каждое значение на листе Risk & Issue Log в столбце F со значением Open или In-progress
  4. Для каждой row которой я это делаю, я хочу получить результат соответствующей ячейки в столбце D если все равно True или blank если что-либо не соответствует.
  5. Я хочу, чтобы вывод был в одной ячейке, разделенной запятой и пробелом.

Как бы я поступил так с VBA?

1 ответ1

1

Прочитав все комментарии и наконец выяснив, что вы пытались сделать (я думаю) ... Я считаю, что следующий UDF будет работать. Вставьте это в новый модуль в VBA, а затем в любую ячейку, в которой вы хотите отобразить результат type = sumrizeLog () и нажмите Enter.

Function summarizeLog() As String

    'Define some variables
    Dim shtLog As Worksheet
    Dim shtSum As Worksheet
    Dim i As Integer

    'set the two worksheet variables
    Set shtLog = Sheets("Risk & Issue Log")
    Set shtSum = Sheets("Summary") '<---rename this to your needs


    'loop from 2 to 600 (these are the rows in your Risk & Issue Log to test, change to suit your needs)
    For i = 2 To 600

        'Now the test.
        'Does K2 through K600 equal D5, F2 through F600 equal either Open or In-Progress, and does L2 through L600 equal F8
        If shtLog.Range("K" & i).Value = shtSum.Range("D5") _
            And (shtLog.Range("F" & i).Value = "Open" Or shtLog.Range("F" & i).Value = "In-progress") _
            And shtLog.Range("L" & i).Value = shtSum.Range("F8") Then

            'If we passed, then grab the value in D for this row and append it the value that will be returned by this function
            '   (with a comma and space)
            summarizeLog = summarizeLog & ", " & shtLog.Range("D" & i).Value
        End If
    Next i
End Function

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