2016-04-01 5 views
0

Я хочу создать макрос, который заполнит пустые ячейки формулой. Формула будет ссылаться на ячейку выше, но только после того, как я применяю Subtotal моим данным, а также только в строках с Total (смотри ниже скриншоте Sample):число строк только для видимых ячеек

enter image description here

Пока будет применять мой макрос промежуточный итог, затем фильтровать по столбцу с итогами и фильтром для чего-либо с Total в ячейке. Впоследствии он подсчитывает все невидимые строки и вычитает 2 (я не хочу считать заголовок и общее количество). Он принимает значение count и выполняет цикл приложения формулы.

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

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

Я надеюсь, что я объяснил свою проблему ясно и образец и фрагмент кода достаточно:

'filling in empty cells on subtotal line 
Cells.Select 
    Selection.AutoFilter 
    LastRow = Range("G" & Rows.Count).End(xlUp).Row 
     x = LastRow 
    ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd 

Set rng = ActiveSheet.AutoFilter.Range 
'-2 is to NOT count the header or Grand Total for my loop count 
RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2 
    r = RowCount 

ответ

0

Спасибо Doktor, но я просмотрел еще несколько и нашел это решение, которое сработало для моей проблемы, оно всегда учитывает правильное число для цикла.

Dim LastRow as interger, x as integer 

    'add autofilter 
    Cells.Select 
    Selection.AutoFilter 
    'filter for Total 
    ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd 

    'find last row 
    LastRow = Range("G" & Rows.Count).End(xlUp).Row 
     x = LastRow 

    'count visible rows 
    RowCount = Range("G1:G" & x).Rows.SpecialCells(xlCellTypeVisible).Count - 2 
     r = RowCount 
0

Проблема в том, что ваш диапазон не продолжается (из отфильтрованных клеток). Это останавливает rows.count для правильной работы. попробовать это:

Number_of_Rows= rng.Resize(, 1).SpecialCells(xlCellTypeVisible).Count 
+0

Я заменил свою строку вашим предложением, но все же имею ту же проблему. 'RowCount = rng.Columns (2) .SpecialCells (xlCellTypeVisible).Count - 2 RowCount = rng.Resize (, 1) .SpecialCells (xlCellTypeVisible) .Count - 2 r = RowCount – ssnch

+0

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

0

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

ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd 

я бы представьте себе, если в какой-то момент это произойдет, вероятно, произойдет уродство. его получил 2 'Operator: = xlAnd', что странно, я бы ожидал ошибки.

Этот просчет может быть несколько вещей, его, скорее всего, его просто что-то простое, что было пропущено, если его не вызван этой плохой частью фильтра,

Что такое Rows.Count? может ли это поместить активную ячейку (курсор, если хотите) в позицию, когда вы используете .End (xlUp), она может пропустить пару пустых ячеек в таблице? если бы это было так, что может фильтровать, но игнорировать пару строк, дающих дополнительные строки оставшихся видно, что не должна быть ....... возможно

RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2 

это, безусловно, представляет интерес, потому что ваша проблема 2 строки иногда просчиталась и вы явно забираете 2 строки здесь (-2), но я сомневаюсь, что это причина, хотя, вероятно, причина в том, что она всегда 2, поэтому она должна быть в коде выше ........

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

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

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