Для цикла для захвата значений в разных именованных диапазонах - PullRequest
0 голосов
/ 03 октября 2018

Я просматривал несколько сообщений о циклическом просмотре нескольких именованных диапазонов и возврате значений в другую ячейку.К сожалению, я зацикливался на том, как перебрать два именованных диапазона, чтобы вернуть значение из одного именованного диапазона, если ячейка в другом именованном диапазоне - "X".

Ниже приведены изображения именованных диапазонов со значениями иожидаемый результат в ячейке I46.Обратите внимание, что в I46 нет формулы.


Именованные диапазоны:
Диапазон1 Диапазон2

Named Ranges to loop through

Требуемый результат от цикла макропробой завершен:
Result

Код:

    For Each Cell In wspGen.Range("Ineligible")
    If Cell.Value = vbNullString Then
        LP.zPledge.Value = "Y"
        wspGen.Range("A46") = "-"
        wspGen.Range("AG55").Value = "X"
    Else
        If Cell.Value = "X" Then
            wspGen.Range("AG55").Value = vbNullString
            wspGen.Range("A45").Value = "N"
            LP.zPledge.Value = "N"
            'Copies the corresponding value from range ("IneligibilityCode")
            'if there is an "X" in any of the cells in range ("Ineligible")
            'to I46.  This could be multiple combinations of values in range ("IneligibilityCode")
        End If
    End If
Next Cell


Спасибо всем за помощь.

1 Ответ

0 голосов
/ 03 октября 2018

Это простой пример использования переменной счетчика, предполагающей, что оба диапазона - один столбец и выровнены.Он подсчитывает количество ячеек в первом именованном диапазоне (заданном в переменной a) до того, как будет найден x, и получает значение в той же позиции в именованном диапазоне b.Примечание. Я использую неявные ссылки на активные листы, и вы должны указать имя листа перед именованными диапазонами.

Option Explicit
Public Sub test()
    Dim a As Range, b As Range, rng As Range, counter As Long
    Set a = Range("range1"): Set b = Range("range2")
    For Each rng In a
        counter = counter + 1
        If rng = "x" Then
            Range("I46") = b.Cells(counter)
            Exit For
        End If
    Next
End Sub

Список всех совпадений через пробел:

Option Explicit
Public Sub test()
    Dim a As Range, b As Range, rng As Range, counter As Long, outputString As String
    Set a = Range("range1"): Set b = Range("range2")
    For Each rng In a
        counter = counter + 1
        If rng = "x" Then
            outputString = outputString & Chr$(32) & b.Cells(counter)
        End If
    Next
    wspGen.Range("I46")  = Trim$(outputString) ' wspGen.Range("I46")  is defined in your code. This is illustrative.
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...