2016-06-16 3 views
1

Я очень новичок в VB. Попытка написать макрос, чтобы помочь моим повседневным задачам. Был на этом сайте совсем немного, помог мне зайти так далеко. Все еще имея проблему, я подумал, что поставил бы свою проблему.Не удается найти диапазон

Мне нужно найти столбец A для определенного Word, затем найти столбец B для определенного числа, а затем подсчитать и отобразить значения ячеек в пределах диапазона.

Поэтому в основном, если столбец A = "Слово" и столбец B < 0 Тогда Cell.value = СЧЕТЕСЛИ (ColumnC, Range) Else MsgBox = "Ничего не найдено"

См. Ниже Он работает, но по какой-то причине я получаю все значения, записывающие диапазон ColumnC, он не читает колонку «Слово» или столбец B. Любые комментарии помогут. Advance Cheers !!

Sub Word() 

Dim i As Integer, HDIpctCompl As Single 
    For i = 1 To 10000 

    If Worksheets("1").Cells(i, 1) = "Word " And Worksheets("1").Cells(i, 2) < 0 Then 
     Worksheets("1").Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.5", Worksheets("1").Range("C:C"), "<=0.599") 

     Worksheets("1").Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.4", Worksheets("1").Range("C:C"), "<=0.499") 

     Worksheets("1").Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.3", Worksheets("1").Range("C:C"), "<=0.399") 

     Worksheets("1").Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.2", Worksheets("1").Range("C:C"), "<=0.299") 

     Worksheets("1").Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.1", Worksheets("1").Range("C:C"), "<=0.199") 

HDIpctCompl = i  'Progress bar, works, different Sub 
HDIprogress HDIpctCompl 

    End If 
Next i 

End Sub 

Я также возиться с чем-то ниже

Sub Word() 

Dim i As Long, wb As Workbook, sh1 As Worksheet, ClmA As Range, Find As  Range, FindB As Range, ClmB As Range 
Set wb = ThisWorkbook 
Set sh1 = wb.Sheets("1") 
Set ClmA = sh1.Range("A1:A10000") 
Set ClmB = sh1.Range("B1:B10000") 
Set Find = ClmA.Find("Word") 
Set FindB = ClmB.Find("< 0 ") 

For i = 1 To 10000 
If Find = 0 And FindB = 1 Then 

Else 
      sh1.Cells(2, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.4", sh1.Range("C:C"), "<=0.499") 
      sh1.Cells(3, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.3", sh1.Range("C:C"), "<=0.399") 
      sh1.Cells(4, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.2", sh1.Range("C:C"), "<=0.299") 
      sh1.Cells(5, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.1", sh1.Range("C:C"), "<=0.199") 
      sh1.Cells(6, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.0", sh1.Range("C:C"), "<=0.099") 

    If Find = 1 And FindB = 0 Then 

    Else 
MsgBox "No information detected", vbOKOnly  
    Exit Sub  
    VIApctCompl = i 
    Viaprogress VIApctCompl 
    End If 
    End If 
Next i 

End Sub 
+0

Ваш первый код смотрит на колонке А и столбца B в строках 1 к 10000, а затем записывая информацию в строки 2-6 в столбце L, если найдена правильная информация. Это то, что вы намеревались? После 'Then' нет переменной, поэтому она будет продолжать заменять значения в строках 2-6 ​​в столбце L каждый раз, когда будут выполнены критерии. – TheEngineer

+0

Да, найдите определенное слово в столбце a, затем, если истинный поиск чисел меньше 0, то если значение true count и запись в столбце L – User123

ответ

-1
Sub Word() 

With Worksheets("1") 
.Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.5", .Range("C:C"), "<=0.599") 
.Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(.Range ("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.4", .Range("C:C"), "<=0.499") 
.Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.3", .Range("C:C"), "<=0.399") 
.Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.2", .Range("C:C"), "<=0.299") 
.Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.1", .Range("C:C"), "<=0.199") 
End With 

End Sub 
0

Вам просто нужно добавить дополнительные условия для вашего COUNTIFS заявление:

Sub Word() 

With Worksheets("1") 
    .Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.5", .Range("C:C"), "<=0.599") 
    .Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.4", .Range("C:C"), "<=0.499") 
    .Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.3", .Range("C:C"), "<=0.399") 
    .Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.2", .Range("C:C"), "<=0.299") 
    .Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.1", .Range("C:C"), "<=0.199") 
End With 

End Sub 

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

Или, если вы хотите, чтобы упростить код и сделать его легче изменить в будущем, используйте следующее:

Sub Word() 

Dim i As Long, j As Long 
With Worksheets("1") 
    j = 2 
    For i = 5 To 1 Step -1 
     .Cells(j, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0." & i, .Range("C:C"), "<=0." & i & "99") 
     j = j + 1 
    Next i 
End With 

End Sub 
+0

CountIfs ищет диапазон от 01.1 до 0.199. Я думаю, что проблема заключается в том, что я выполняю мой .find в диапазонах A и Range B, он полностью игнорирует эту строку и перемещается прямо в countif. По сути, мне нужен случай, если или для оператора, который найдет слово в столбце A, и результаты поиска найдут тогда столбец B для всех чисел <0, тогда как только это утверждение будет истинным, это countif для столбца C .. Ive следили за кодом и искали решения, но работы накапливались. – User123

+0

@ User123 Ваш код перебирает 10000 строк данных, просматривая данные в столбце A и столбце B, а затем перезаписывает данные в столбце L в каждом цикле на основе CountIf в столбце C. Если вы просто хотите посчитать общее количество ячеек в столбце C, которые находятся между заданным значением, когда значения в столбце A и столбце B соответствуют определенным критериям, мой код будет работать. Не могли бы вы поделиться образцовой книгой с типичными данными? – TheEngineer

+0

Был занят, так извиниться за поздний ответ. Спасибо за помощь. Кажется, я, как обычно, слишком много думал об этом и усложнял его без ремонта. Ive проверил его и, похоже, работает. Убрано индикатор выполнения, чтобы очистить модуль. Я использовал первый код, потому что я быстро понял его, и для этого важно время. Я работаю над вторым кодом для моего дела, чтобы его очистить. Я позволю тебе знать, есть ли у меня проблемы. Опять спасибо! – User123

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