Страницы: 1
RSS
Вычислить номер страницы для использования в СЧЕТЕСЛИМН, Необходимо вычислить номер страницы для корректной работы функции СЧЕТЕСЛИМН
 
Уважаемые гуру. Подскажите, можно ли решить данную проблемку. Имеется лист с остатками товара и хотелось бы иметь на каждой страницы постраничный итог, а уж совсем хорошо, если бы этот постраничный итог печатался бы не в ячейке (как сейчас), а в колонтитуле (на форуме была похожая тема о печати каких-либо результатов в колонтитулах). Я предполагал использовать для расчетов функцию СЧЕТЕСЛИМН, но она требует, скажем так, "контрольных ячеек" и вот эти самые ячейки я бы и хотел вычислить. На просторах сети я нашел макрос:

Public Sub PageNumner()
   Dim VPB As Excel.VPageBreak
   Dim HPB As Excel.HPageBreak
Dim intVPBC As Integer
   Dim intHPPC As Integer
   Dim lngPage As Long
   
   lngPage = 1
   
   If ActiveSheet.PageSetup.Order = xlDownThenOver Then
       intHPPC = ActiveSheet.HPageBreaks.Count + 1
       intVPBC = 1
   Else
       intVPBC = ActiveSheet.VPageBreaks.Count + 1
       intHPPC = 1
   End If

   For Each VPB In ActiveSheet.VPageBreaks
       If VPB.Location.Column > ActiveCell.Column Then
           Exit For
       End If
       
       lngPage = lngPage + intHPPC
   Next VPB
   
   For Each HPB In ActiveSheet.HPageBreaks
       If HPB.Location.Row > ActiveCell.Row Then
           Exit For
       End If
           
       lngPage = lngPage + intVPBC
   Next HPB
   
   MsgBox "Номер страницы активной ячейки = " & lngPage
End Sub

который правильно и корректно вычисляет номер страницы активной ячейки. MsgBox с сообщением мне не нужен, а вот как если мне подсказали как присвоить диапазону I10:I39 (в примере) значения вычисленные вышеописаной функцией, все было бы замечательно. Сейчас значения "контрольных ячеек" забиты вручную и на 2-3 страницы это несложно, но если бы таких страниц было 100 или 500, неужели бы этот момент нельзя было бы решить по иному? Говоря покороче, как помощью макроса, который будет включаться по какому-либо событию или каким-либо "постоянным" образом через VBA или формулами (устроит любой способ) получать значения "контрольных ячеек", в данном примере диапазона I10:I39? Заранее большое спасибо всем откликнувшимся.
 
Если заполнение формулой с учетом страниц, то вот так можно

Код
Public Sub PageNumner()
Dim HPB As Excel.HPageBreak
Dim firstCellHb As Long
Dim lastCellHB As Long

firstCellHb = 10
lastCellHB = 0

For Each HPB In ActiveSheet.HPageBreaks
    lastCellHB = HPB.Location.Row - 1
    ActiveSheet.Range("J" & firstCellHb & ":J" & lastCellHB).FormulaR1C1 = "=SUMIF(R" & firstCellHb & "C7:R" & lastCellHB & "C7,"">0"")"
    firstCellHb = lastCellHB + 1
Next

If lastCellHB < ActiveSheet.UsedRange.Rows.Count Then
    lastCellHB = ActiveSheet.UsedRange.Rows.Count
    ActiveSheet.Range("J" & firstCellHb & ":J" & lastCellHB).FormulaR1C1 = "=SUMIF(R" & firstCellHb & "C7:R" & lastCellHB & "C7,"">0"")"
End If

End Sub
 
SkyShark, спасибо большое предложенный вами вариант работает, но позвольте небольшое уточнение. В реальном файле задумывалась немного более сложная формула для расчеты промежуточных остатков с использование функции СЦЕПИТЬ, а также задействуя вычисленный макросом результат (чтобы было примерно "итого по стр.1 8998,29 руб."). Я правильно понимаю, что для приведения результатов к такому виду достаточно изменить вид формулы из вашего макроса?
 
Цитата
Alex пишет:
чтобы было примерно "итого по стр.1 8998,29 руб."  ;)  .

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

Цитата
Alex пишет:
достаточно изменить вид формулы

Да, только необходимо учитывать переменные firstCellHb и lastCellHB, так как они отвечаю за первую и последню строку каждой странийцы.
Изменено: SkyShark - 08.02.2013 13:59:52
Страницы: 1
Наверх