Добрый день! 1. Из варианта А получаю вариант Б макросами делаю промежуточный итог. Нужно, чтобы в первый столбец таблицы Б втаскивался подсчёт уникальных значений. Внизу промежуточного итога.
Но я не знаю, как автоматизировать их вставку в ячейки в строке промежуточных итогов. И чтобы данная формула была живой: могла сама следить за изменениями внутри каждого куска между промежуточными итогами при изменении данного куска. Однако это уже пункт 2.
2. Причём если я убираю или перемещаю строчки, (переход из Б в В) подсчёт автоматически суммировал до вышестоящего куска (строки промежуточных итогов, сумм).
У кого какие решения могут быть. В принципе, буду благодарен и за решение хотя бы пункта 1.
Добрый день! 1. Из варианта А получаю вариант Б макросами делаю промежуточный итог. Нужно, чтобы в первый столбец таблицы Б втаскивался подсчёт уникальных значений. Внизу промежуточного итога.
Но я не знаю, как автоматизировать их вставку в ячейки в строке промежуточных итогов. И чтобы данная формула была живой: могла сама следить за изменениями внутри каждого куска между промежуточными итогами при изменении данного куска. Однако это уже пункт 2.
2. Причём если я убираю или перемещаю строчки, (переход из Б в В) подсчёт автоматически суммировал до вышестоящего куска (строки промежуточных итогов, сумм).
У кого какие решения могут быть. В принципе, буду благодарен и за решение хотя бы пункта 1.ant6729
Sub insertFormula() Dim rng As Range Dim c As Range Dim rngFrml As Range Dim strAddr As String Dim rowFrom As Integer
Set rng = Selection.Resize(Selection.Rows.Count + 1) For Each c In rng.Columns(1).Cells If IsEmpty(c) Then If rowFrom > 0 Then Set rngFrml = Range(Cells(rowFrom, c.Column), Cells(c.Row - 1, c.Column)) strAddr = rngFrml.Address(False, False) c.FormulaArray = "=SUM(1/COUNTIF(" & strAddr & "," & strAddr & "))"
rowFrom = 0 End If Else If rowFrom = 0 Then rowFrom = c.Row End If Next c End Sub
[/vba] Перед запуском надо выделить на рабочем листе диапазон (Selection), включающий первый столбец области обработки. В примере из сообщения 3 это диапазон E1:E16 или E1:E17 (макрос правильно обработает последнюю ячейку и в том, и в другом случае). Разумеется, ячейки E5:F5, E11:F11, E17:F17 в начале должны быть пустыми и в процессе работы будут заполнены автоматически созданными формулами.
У меня получился следующий макрос: [vba]
Код
Sub insertFormula() Dim rng As Range Dim c As Range Dim rngFrml As Range Dim strAddr As String Dim rowFrom As Integer
Set rng = Selection.Resize(Selection.Rows.Count + 1) For Each c In rng.Columns(1).Cells If IsEmpty(c) Then If rowFrom > 0 Then Set rngFrml = Range(Cells(rowFrom, c.Column), Cells(c.Row - 1, c.Column)) strAddr = rngFrml.Address(False, False) c.FormulaArray = "=SUM(1/COUNTIF(" & strAddr & "," & strAddr & "))"
rowFrom = 0 End If Else If rowFrom = 0 Then rowFrom = c.Row End If Next c End Sub
[/vba] Перед запуском надо выделить на рабочем листе диапазон (Selection), включающий первый столбец области обработки. В примере из сообщения 3 это диапазон E1:E16 или E1:E17 (макрос правильно обработает последнюю ячейку и в том, и в другом случае). Разумеется, ячейки E5:F5, E11:F11, E17:F17 в начале должны быть пустыми и в процессе работы будут заполнены автоматически созданными формулами.Gustav