Excel - Создание упрощенного «представления» более сложной таблицы (макрос?) - PullRequest
3 голосов
/ 01 сентября 2011

Введение: Лист 1 в моей книге Excel содержит "сложную" таблицу с примерно 130 столбцами и 2,5 тыс. Строк.

Первый выпуск: На основании этогоТаблица Я хочу создать упрощенную таблицу («Вид») в Sheet2, которая содержит только, например, столбцы A, C, F, G, I из таблицы в Sheet1.

Эта новая «упрощенная» таблица должна бытьобновляется при изменении таблицы в Sheet1, например, в форме изменяемой ячейки или вставки новой строки.Другим способом решения этой проблемы было бы автоматическое создание таблицы в Sheet2 каждый раз, когда пользователь сохраняет рабочую книгу, или что-то подобное.

Вторая проблема: Строки, содержащие определенное значение в столбце FДопустим, значение «XXX» не должно быть включено в таблицу Sheet2.

Я не очень разбираюсь в более «продвинутой» функциональности Excel, но после изучения вопроса я склоняюсь к этому, создаваямакрос.Это предположение верно?Или у Excel есть какие-то другие функции для выполнения этой задачи?

Если создание макроса является наилучшим подходом, то любая помощь будет принята с благодарностью.В настоящее время я играю arround с тестовой таблицей с 4 строками и копирую два из них в новый лист.Но у меня проблемы с тем, как сделать это автоматически, и исключая строки с определенным значением (выпуск № 2)

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

Попробуйте следующий код: (Помещено в модуль простых листов)

Private Sub Worksheet_Activate()

    Application.ScreenUpdating = False

    With ActiveSheet
        .UsedRange.ClearContents
        '// Copy from data sheet too presentation sheet
        Sheet1.UsedRange.Copy .[a1]
        '// Filter all rows with xxx
        .Range("F:F").AutoFilter Field:=1, Criteria1:="xxx", Operator:=xlAnd
        '// Delete all rows with xxx excluding the header
        .UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        '// Remove the autofilter
        If .AutoFilterMode Then .AutoFilterMode = False
        '// Delete unwanted columns
        .Range("B:B,D:E,H:H").Delete
     End With

    Application.ScreenUpdating = True

End Sub
3 голосов
/ 01 сентября 2011

Для этого я использую некоторый код в методе on_activate рабочего листа.

Таким образом, как только пользователь выбирает этот лист, данные обновляются.

Вот псевдокод:

option explicit 'but thats just me.

Private Sub Worksheet_Activate()  <<-- event of the simplified sheet.
    Worksheets("simplesheet").Cells.ClearContents
    Worksheets("alldata").Columns("A:A").Copy
    Worksheets("simplesheet").Columns("A:A").Select
    Worksheets("simplesheet").Paste
    'etc for all the relevant rows
End Sub

Вторая проблема: строки, содержащие определенное значение в столбце F, скажем, значение «XXX», не должны включаться в таблицу Sheet2.

Добавить следующее событие

    dim cel as range

    'for each goes in the wrong direction, we need to start down and go up.
    '1-select the REAL last cell in a range.
    Worksheets("simplesheet").Range("F65536").End(xlup).Select 'edit for Excel 2007
    Set cel = selection
    while cel.row > 0 
      if cel.value = "xxxx" then cel.entirerow.delete
      set cel = cel.offset(-1,0)
    wend
    Worksheets("simplesheet").Range("a1").select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...