2017-01-11 2 views
0

У меня есть код ниже, который ищет столбец на листе, используя диапазон столбцов в качестве значения. Вместо этого мне нужно использовать имя col (в этом листе) в качестве критерия поиска и выполнить ту же функцию. Как это реализовать?Использование имен столбцов в диапазоне от VBA

Sub WBR() 
Dim Count1Criteria As Variant 
Dim Count3Criteria As Variant 
Dim test As Variant 
Dim wf As WorksheetFunction 
Set wf = Application.WorksheetFunction 

Filter1InSummary = Array(Array("AE4", "Latency", "O:O", "Pass"), _ 
        Array("AE51", "TT", "G:G", "Yes"), _ 
        Array("AE52", "TT", "G:G", "No"), _ 
        Array("AE61", "Reactive", "R:R", "Item")) 

Filter3InSummary = Array(Array("AE43", "TT", "I:I", "<>Duplicate TT", _ 
             "G:G", "<>Not Tested", _ 
             "U:U", "Item")) 
For Each test In Filter3InSummary 
With Worksheets(test(1)) 
    Range(test(0)) = wf.CountIfs(.Range(test(2)), test(3), _ 
           .Range(test(4)), test(5), _ 
           .Range(test(6)), test(7)) 
End With 
Next 

ответ

0

Предполагая, что имена столбцов будет в первой строке рабочего листа, замените 2, 4, 6 элементов в массиве с именами столбцов.

Filter3InSummary = Array(Array("AE43", "TT", "CName1", "<>Duplicate TT", _ 
             "CName2", "<>Not Tested", _ 
             "CName3", "Item")) 

Затем замените .Range(test(2)) в формуле с этим:

.rows(1).Find(test(2),lookat:xlWhole).EntireColumn 

и сделать то же самое для 4 и 6.

Осторожно, что имена столбцов обязательно появляются в указанном ряду или он потерпит неудачу.

+0

Я пробовал это, но получил синтаксическую ошибку: 'Range (test (0)) = wf.CountIfs (.rows (1) .Find (test (2), lookat: xlWhole) .EntireColumn), test (3), _ .rows (1) .Find (test (2), lookat: xlWhole) .EntireColumn), test (5), _ .rows (1) .Find (test (2), lookat: xlWhole) .EntireColumn) , test (7)) ' –