2015-06-02 2 views
0

Мне было интересно, можно ли подсчитать количество ячеек, имеющих определенную строку? Например, я хочу использовать Mid(C.Value, 6, 2) = "sh" и подсчитать, сколько данных в моей таблице имеет «sh».Подсчитайте количество ячеек, содержащих определенную строку

Что я до сих пор это, я использовал UsedRange, чтобы выбрать все данные в электронной таблице, все, что мне нужно сделать, если фильтр и подсчет конкретных данных с определенной строкой.

Sheets("Campaign").UsedRange 'Refresh UsedRange 
LastRow = Sheets("Campaign").UsedRange.Rows.Count 

Dim RangeString As String 
Worksheets("Campaign").Select 
Range("A1:A" & LastRow).Select 
RangeString = Selection.Address 

Range("A1").End(xlToRight).Select 
RangeString = RangeString & ":" & Selection.Address 
+0

возможно использовать среднюю функцию в заявлении СЧЕТЕСЛИ? – ayasocool

+0

Нет, я так не думаю, но вы можете использовать '' * text * "' или некоторые ограниченные другие подстановочные знаки, такие как '?', Чтобы соответствовать тексту в определенных местах. – TessellatingHeckler

ответ

3

Если вы хотите увидеть, если ш где-либо в значения ячеек тогда,

dim cnt as long 
with Sheets("Campaign").UsedRange 
    cnt = application.countif(.cells, "*sh*") 
    debug.Print cnt 
end with 

Если вы хотите посчитать клетки, которые имеют ш как шестой и седьмой буквы в значении любой ячейки затем,

dim cnt as long 
with Sheets("Campaign").UsedRange 
    cnt = application.countif(.cells, "?????sh*") 
    debug.Print cnt 
end with 

в качестве шаблона, звездочка (например *) означает любое количество символов. Знак вопроса (например, ?) означает один символ, но может быть сложена. Эти значения не чувствительны к регистру.

+0

Очень подробный ответ! Спасибо, это действительно помогло. – ayasocool

3

Это можно сделать. Прежде всего, почему вы используете так много выборок, я бы предпочел использовать For для циклов. В любом случае, вы можете использовать его как это:

Dim i As Integer 
Dim count as Integer 
count=0 

For i = 1 To 6 
    if(Instr(Cells(i,1).Text,"sh")) Then 
     count=count+1 
    End if 
Next i 

Я сожалею, что я не могу проверить код, так как я использую Ubuntu, но я надеюсь, что вы получите эту идею.

3

дополнительный вариант с моей стороны уже отправленный @Jeeped

Sub test() 
    Dim cl As Range, i&: i = 0 
    For Each cl In Sheets("Campaign").UsedRange 
     If LCase(cl.Value) Like "*sh*" Then i = i + 1 
    Next cl 
    MsgBox i 
End Sub