Страницы: 1
RSS
Методы и свойства заданного диапазона
 
Всем доброго времени суток!

Предварительно макрос формирует сводную таблицу. В сводной таблице может быть несколько столбцов, все зависит от объема данных. Допустим была сформирована таблица из 3-х столбцов. Наименование столбцов: Столбец1, Столбец2, Столбец3. Далее макросом нужно определить соответствие наименования столбцов заданному условию и выполнить действие, т. е. если значения в строке 1 равны массиву (Столбец1, Столбец2, Столбец3), то делаем следующее действие.

Начинаю делать так, но не додумался что дописать в блоке With:
Код
Set rngData = ThisWorkbook.Worksheets("Лист1").[A1].CurrentRegion

With rngData
  With .Rows(1)
   If .(метод/свойство???) = Array("Столбец1", "Столбец2", "Столбец3") Then .Range("C:E").Insert
  End With
End With
Умом понимаю что задачка простая, но не могу определить какой метод/свойства Rows применить?
 
Сводная таблица - это иносказательно, или натуральная PivotTable?
F1 творит чудеса
 
Максим, создается самая натуральная PT. Далее таблицу нужно преобразовать, в частности добавить новые столбцы и наполнить их доп. данными. Но так как количество столбцов а также их порядок может быть разный, требуется предусмотреть ряд всевозможных условий. Для этого мне и нужна сверка массива с наименованием столбцов.
 
Так как вы хотите - не получится. Напрямую сравнить массивы разной размерности никак, да и не напрямую только циклом.

Но есть коллекция ColumnFields объекта PivotTable
Как вариант:
Код
Set pvtTable = Worksheets("Лист1").Range("A1").PivotTable
Dim flNotMatch as Boolean
For Each pvtField In pvtTable.ColumnFields
    Select Case pvtField.Name
    Case "Столбец1", "Столбец2", "Столбец3"
    Case Else
        flNotMatch = True
    End Select
Next pvtField
If Not flNotMatch Then
... ' здесь делаете то, что хотите.
End If
Изменено: Максим Зеленский - 06.08.2015 16:30:42
F1 творит чудеса
 
Максим Зеленский, кажется ошибочка в переменной: flMatch заменить на flNotMatch в Вашем коде.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Максим, Ваше решение не подходит, т. к. после формирования PT, я сразу же сохраняю ее значениями и продолжаю работать с полученными данными.

Если можно сделать сверку значения ячейки и условия в заданном диапазоне, то почему нельзя сделать сверку нескольких ячеек по условию?
Вот пример по значению одной ячейки (см. ниже). Разве этот пример неприменим к нескольким ячейкам?
Код
Set rngData = ThisWorkbook.Worksheets("Лист1").[A1].CurrentRegion
With rngData
  With .Cells(1, .Columns.Count - 1)
   If .Text = "31.12.2015" Then .EntireColumn.Delete
  End With
End With
Изменено: URSA - 06.08.2015 15:40:29
 
Ну так и перебирайте все ячейки строки в цикле: если значение совпало, выполняйте запланированные действия.
 
Цитата
JayBhagavan написал:
flMatch заменить на flNotMatch
:) для облегчения понимания? )))
Цитата

URSA написал:
Разве этот пример неприменим к нескольким ячейкам?
Нет. Только циклом, так или иначе.
Цитата
URSA написал:
после формирования PT, я сразу же сохраняю ее значениями
Я же не зря спросил, это PivotTable или нет. Не жалко вам чужого времени. Дальше сами давайте...
Изменено: Максим Зеленский - 06.08.2015 16:14:17 (ачипятка)
F1 творит чудеса
 
Если перебрать каждую ячейку, то код получится длинный. Нельзя сделать компактнее? К примеру, указать строку и указать массивом какие значения искать в этой строке по порядку и при совпадении выполнить действие.
Изменено: URSA - 06.08.2015 16:15:03
 
Максим, как Вы спросили, так я и ответил )) Извините, что потратил Ваше время.
 
Цитата
URSA написал:
Если перебрать каждую ячейку, то код получится длинный.
В ЦИКЛЕ перебирайте, а не каждую по отдельности. Тогда длинный не получится.
 
Цитата
Максим Зеленский написал: для облегчения понимания?
В смысле? Объявлена переменная одна, значение присваивается другой, а в условии используется первая, которая нигде не меняется.
URSA, покажите в файле-примере, согласно правил форума, что с чем сравнивать. (неохота в угадайку играть)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
Объявлена переменная одна, значение присваивается другой
ой, спасибо, поправил
F1 творит чудеса
 
Вопрос снимается. Всем спасибо.

Перебрал все возможные варианты циклом. Получилось конечно не очень компактно, но со своей задачей макрос справляется.
Страницы: 1
Наверх