2016-06-01 2 views
0

В листе A - список имен. Я пытаюсь подсчитать разные имена в Листе А в таблице на Листе В, Столбец B. Имена не являются точными, и я буду ссылаться на ячейку и не писать в имени. Sub ниже почти работает, но я думаю, что я не использую wildcqard правильно. Пожалуйста, помоги, если можешь. заранее спасибо.Использование шаблона с ссылкой на ячейку. Что мне не хватает?

Sub Countif_Crr_Cnt_Until_LastRow() 

    Dim LastRow As Long 
    Dim wb1 As Workbook 


    Set wb1 = Workbooks("macro all client v.01.xlsm") 

    LastRow = wb1.Sheets("A").Range("A:A").Find("Overall - Total", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    For i = 21 To LastRow 

Cells(i, 10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & Cells(i, 3) & "*") 

Next 

End Sub 
+0

На каком листе вы ожидаете, что 'Ячейки (i, 10)' будут включены? То же самое с 'Cells (i, 3)'? Я считаю, что это проблема, которая не работает. Вы правильно используете подстановочный знак, но поскольку у вас есть несколько листов, на которые вы ссылаетесь, вы должны добавить конкретный листок в свой «Ячейки()». – BruceWayne

+1

попробуйте поставить 'wb1.Sheets (« A »).' Перед '' Ячейками (... ' –

+0

[Неявная ссылка на ActiveSheet] (https://github.com/rubberduck-vba/Rubberduck/issues/385) удаляет снова! –

ответ

4

Я считаю, что проблема заключается в неквалифицированных ссылках, когда вы используете только Cells(). VBA должен знать, на каком листе вы ожидаете, что он будет включен, при использовании нескольких листов. Я предполагаю, что Cells(i,10) и Cells(i,3) должны быть на листе «А». Если нет, то просто изменить название листа:

wb1.Sheets("A").Cells(i, 10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & wb1.Sheets("A").Cells(i, 3) & "*")

Как вы можете видеть, что это своего рода длинный и немного сложно читать. Альтернативный способ сделать это, является использование With:

With wb1.Sheets("A") 
    .Cells(i,10) = Application.CountIfs(wb1.Sheets("B").Range("B:B"), "*" & .Cells(i,3) & "*") 
End With 

Таким образом, там, где вы видите простой .Cells() без чего-либо до ., это будет использовать то, что следует With. Так что это эквивалент формулы выше ... это имеет смысл?

+0

Я это понимаю, но если я ищу имя «Basic Term Life» в ячейке C21 листа A в таблице на листе B и именах листа B не являются точными «Basic Life Insurance», мой макрос не учитывает имена, которые являются точными. Как я могу обновить ссылки на подстановочные знаки, чтобы подсчитать все похожие имена? –

+0

@ t.mo - Может быть, добавить некоторые операторы if, где, если он не найден с '* Basic Term *', тогда найдите что-то еще конкретный? Сколько способов могут предоставить ваши данные? – BruceWayne

Смежные вопросы