Создайте таблицу с комбинированным входом из двух других таблиц [duplicate]

Привет, приятель, этот http://android-task-manager.googlecode.com/svn/trunk/ , а также этот http://www.anddev.org/advanced- tutorials-f21 / android-taskmanager-simple-t315.html вы получите представление о том, как создать диспетчер задач в android.

9
задан Brian Tompsett - 汤莱恩 9 November 2016 в 13:34
поделиться

5 ответов

Im, используя этот код / ​​формулу. хорошо работает для моих потребностей, только я хотел бы знать, как я могу улучшить формулу клетки, поэтому я могу использовать 3+ таблицы в качестве ссылки. в настоящее время im просто вставляет кучу операторов iferror в iferror

=IFERROR(INDEX(Table1, ROW([@Date])-ROW(Table3[#Headers]),COLUMN(A:A)),IFERROR( INDEX(Table2, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table1),COLUMN(A:A)), IFERROR(INDEX(Table4, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table2)-ROWS(Table1),COLUMN(A:A)),INDEX(Table5, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table2)-ROWS(Table1)-ROWS(Table4),COLUMN(A:A)))))

Im также использует

0
ответ дан DJRCB 17 August 2018 в 09:34
поделиться

Небольшая модификация кода Jeeped.

Если вы используете подобный подход, но с несколькими таблицами (например, более 10), то будет довольно громоздко пытаться вручную добавить каждое имя каждой таблицы. Это также проблема, если вы меняете имена таблиц, поскольку имена в VBA жестко связаны. Чтобы избежать дополнительной работы, рассмотрите следующее:

Итак, предположим следующее:

  • На каждом листе есть одна или несколько таблиц, но они имеют схожую структуру.
  • На листах есть только таблицы - никаких других элементов коллекции ListObjects не присутствуют.
  • Каждый раз, когда мы редактируем таблицу на листе, это вызывает обновление в главной таблице ( таблица 3).

Затем Subbook Workbook_SheetChange в приведенном выше примере может выглядеть следующим образом:

     Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     Dim tbl As ListObject
     For Each tbl In ActiveSheet.ListObjects
        If Not Intersect(Target, tbl.Range.Offset(1, 0)) Is Nothing Then
            On Error GoTo bm_Safe_Exit
            Application.EnableEvents = False
            Call update_Table
        End If
        Next tbl
        bm_Safe_Exit:
        Application.EnableEvents = True
     End Sub

Изменить. Вторая процедура будет выглядеть так:

   Private Sub update_Table()
    Dim iTBL3rws As Long, rng As Range, rngOLDBDY As Range
    Dim tbl As ListObject
    Dim sht As Worksheet
    iTBL3rws = 0

    ' consider all tables, excluding master table
    For Each sht In ThisWorkbook.Worksheets
        For Each tbl In sht.ListObjects
            If tbl.Name <> "Table3" Then
                iTBL3rws = iTBL3rws + tbl.DataBodyRange.Rows.Count
            End If
        Next tbl
    Next sht

    iTBL3rws = iTBL3rws + Sheet3.ListObjects("Table3").DataBodyRange.Cells(1, 1).Row - Sheet3.ListObjects("Table3").Range.Cells(1, 1).Row
        With Sheet3.ListObjects("Table3")

            Set rngOLDBDY = .DataBodyRange

            .Resize .Range.Cells(1, 1).Resize(iTBL3rws, .DataBodyRange.Columns.Count)

            If rngOLDBDY.Rows.Count > .DataBodyRange.Rows.Count Then
                For Each rng In rngOLDBDY
                    If Intersect(rng, .DataBodyRange) Is Nothing Then
                        rng.Clear
                    End If
                Next rng
            End If
        End With

End Sub

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

0
ответ дан Infinito 17 August 2018 в 09:34
поделиться

lori_m сделал действительно хороший вклад, который я построил с помощью таблиц Microsoft Excel и структурированных ссылок.

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

=IF( INDIRECT("Table3[RowId]")<=ROWS(Table1)
    ,INDEX(Table1[column1],INDIRECT("Table3[RowId]"))
    ,INDEX(Table2[Column1],INDIRECT("Table3[RowId]")-ROWS(Table1)))

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

1
ответ дан James Bayley 17 August 2018 в 09:34
поделиться
7
ответ дан Jeeped 17 August 2018 в 09:34
поделиться

Вы можете активировать Office Clipboard (стрелка внизу справа от раздела буфера обмена на вкладке «Главная лента»). Скопируйте оба диапазона, затем используйте команду «Вставить все», как показано ниже.

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

enter image description here [/g1]

Обновить

Чтобы получить те же результаты с формулами, попробуйте заполнить это для имени листа:

=IF(ROW()<=COUNTA(Sheet1!A:A),"Sheet1",IF(ROW()<COUNTA(Sheet1:Sheet2!A:A),"Sheet2",""))

, а затем заполните и перейдите по этой формуле для значения в таблицах:

=IF(ROW()<=COUNTA(Sheet1!A:A),Sheet1!A2,IF(ROW()<COUNTA(Sheet1:Sheet2!A:A),INDEX(Sheet2!A:A,ROW()-COUNTA(Sheet1!A:A)+1),""))
3
ответ дан lori_m 17 August 2018 в 09:34
поделиться
  • 1
    Благодаря!! Да, это вариант, но я хочу, чтобы финальная таблица автоматически обновлялась, когда я вносил изменения в любую из входных таблиц ... Я не знаю, могу ли я использовать любую функцию здесь. Я искал его какое-то время, но ничего не мог найти. Возможно, макрос - единственный вариант здесь :( – anuj 29 March 2012 в 16:07
  • 2
    Вы можете использовать специальную команду Paste Link для привязки комбинированной таблицы к исходной таблице. Это будет автоматически обновляться с изменениями в исходной таблице, если количество элементов в списках не изменяется – lori_m 29 March 2012 в 16:20
  • 3
    Я улучшил ответ @ lori_m, чтобы сделать его более терпимым к вставке строки на исходные листы: =IF(ROW()<(COUNTA(Sheet1!A:A)+1),INDEX(Sheet1!A:A,ROW()),IF(ROW()<COUNTA(Sheet1:Sheet2!A:A),INDEX(Sheet2!A:A,ROW()-COUNTA(Sheet1!A:A)+1),"") – Steven Stangle 11 January 2016 в 21:13
Другие вопросы по тегам:

Похожие вопросы: