Как “сгладить” или “свернуть” 2D таблицу Excel в 1D?

Спасибо всем за ваши комментарии! Вы помогли мне понять проблему намного лучше.

Просто чтобы уточнить, почему я делаю это и чего я действительно хотел: я портирую Clang на какую-то конкретную платформу. Таким образом, моя цель здесь состояла в том, чтобы понять, содержит ли этот тест (из нашей системы тестирования автогенов) ошибку, или, скорее, это ошибка компиляции clang. По результатам этого обсуждения я отправил ошибку llvm ( https://bugs.llvm.org/show_bug.cgi?id=41178 ).

Еще раз спасибо!

39
задан pnuts 11 September 2015 в 08:40
поделиться

2 ответа

Можно использовать функцию сводной таблицы Excel для инвертирования сводной таблицы (который является по существу, что Вы имеете здесь):

Хорошие инструкции здесь:

http://spreadsheetpage.com/index.php/tip/creating_a_database_table_from_a_summary_table/

Который связывается со следующим кодом VBA (поместите его в модуль), если Вы не хотите следовать инструкциям вручную:

Sub ReversePivotTable()
'   Before running this, make sure you have a summary table with column headers.
'   The output table will have three columns.
    Dim SummaryTable As Range, OutputRange As Range
    Dim OutRow As Long
    Dim r As Long, c As Long

    On Error Resume Next
    Set SummaryTable = ActiveCell.CurrentRegion
    If SummaryTable.Count = 1 Or SummaryTable.Rows.Count < 3 Then
        MsgBox "Select a cell within the summary table.", vbCritical
        Exit Sub
    End If
    SummaryTable.Select
    Set OutputRange = Application.InputBox(prompt:="Select a cell for the 3-column output", Type:=8)
'   Convert the range
    OutRow = 2
    Application.ScreenUpdating = False
    OutputRange.Range("A1:C3") = Array("Column1", "Column2", "Column3")
    For r = 2 To SummaryTable.Rows.Count
        For c = 2 To SummaryTable.Columns.Count
            OutputRange.Cells(OutRow, 1) = SummaryTable.Cells(r, 1)
            OutputRange.Cells(OutRow, 2) = SummaryTable.Cells(1, c)
            OutputRange.Cells(OutRow, 3) = SummaryTable.Cells(r, c)
            OutputRange.Cells(OutRow, 3).NumberFormat = SummaryTable.Cells(r, c).NumberFormat
            OutRow = OutRow + 1
        Next c
    Next r
End Sub

- Adam

36
ответ дан Adam Davis 27 November 2019 в 02:34
поделиться

Ответ @Adam Davis идеален, но на всякий случай, если вы так же невежественны, как и я, в отношении Excel VBA, вот что я сделал, чтобы код работал в Excel 2007:

  1. Открыть книгу с Матрицей, которую необходимо выровнять в таблицу, и перейти к этому листу
  2. Нажмите Alt-F11, чтобы открыть редактор кода VBA.
  3. На левой панели в поле Проект вы увидите значок древовидная структура, представляющая объекты Excel и любой уже существующий код (называемый модулями). Щелкните правой кнопкой мыши в любом месте поля и выберите «Вставить-> Модуль», чтобы создать пустой файл модуля.
  4. Скопируйте и вставьте приведенный выше код @Adman Davis, как он есть, на пустую страницу, которая откроется, и сохраните его.
  5. Закройте файл. Окно редактора VBA и вернитесь к электронной таблице.
  6. Щелкните любую ячейку в матрице, чтобы указать матрицу, с которой вы будете работать.
  7. Теперь вам нужно запустить макрос. Расположение этого параметра зависит от вашей версии Excel. Поскольку я использую 2007, я могу сказать вам, что он сохраняет свои макросы на ленте «Просмотр» как крайний правый элемент управления. Щелкните по нему, и вы увидите подробный список макросов, просто дважды щелкните тот, который называется «ReversePivotTable», чтобы запустить его.
  8. Затем появится всплывающее окно с просьбой указать ему, где создать плоскую таблицу. Просто наведите его на любое пустое место в вашей таблице и нажмите «ОК»

Готово! Первый столбец будет строками, второй столбец будет столбцами, третий столбец будет данными.

лента как крайний правый элемент управления. Щелкните его, и вы увидите подробный список макросов, просто дважды щелкните тот, который называется «ReversePivotTable», чтобы запустить его.
  • Затем появится всплывающее окно с просьбой указать ему, где создать плоскую таблицу. Просто наведите его на любое пустое место в вашей таблице и нажмите «ОК»
  • Готово! Первый столбец будет строками, второй столбец будет столбцами, третий столбец будет данными.

    лента как крайний правый элемент управления. Щелкните его, и вы увидите подробный список макросов, просто дважды щелкните тот, который называется «ReversePivotTable», чтобы запустить его.
  • Затем появится всплывающее окно с просьбой указать ему, где создать плоскую таблицу. Просто наведите его на любое пустое место в таблице и нажмите «ОК»
  • Готово! Первый столбец будет строками, второй столбец будет столбцами, третий столбец будет данными.

    17
    ответ дан 27 November 2019 в 02:34
    поделиться
    Другие вопросы по тегам:

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