Excel: импорт данных ячейки на другой лист с использованием заголовка столбца

Excel: импорт данных ячейки на другой лист с использованием заголовка столбца

Я пытаюсь перенести информацию с одного листа на другой в одной и той же рабочей книге.

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

Например:

           |  Example1 | Example2 | Example3
-----------+-----------+----------+----------
List One   |     x     |          |   x
List Two   |     x     |    x     |
List Three |     x     |          |

Поэтому я хотел бы

  • на Листе2 -Список первый

    • Пример1
    • Пример3

  • На Листе3 -Список два

    • Пример1
    • Пример2

  • На листе 4 -Список третий

    • Пример1

Надеюсь, это имеет хоть какой-то смысл для кого-то! Извините за ужасный код, ржавый ржавый ржавый!

решение1

Я предполагаю, что ваши заголовки находятся в строке 1, а данные начинаются со строки 2.

В 1-м столбце(здесь строка не имеет значения)из других ваших листов введите эту формулу =OFFSET(Sheet1!$A$1,0,SMALL(IF(2:2="X",COLUMN(2:2)),COLUMN())-1)как формулу массива с Ctrl+ Shift+Enter

Копируйте это по всей строке, и это выведет список названий столбцов. Конец достигается, когда формула начинает выдавать #NUM!ошибки.

Для листа 3 измените 2:2 на 3:3 и так далее для последующих листов.

решение2

Это позволяет вам иметь большее количество строк и столбцов и предполагает что угодно, а не просто "x". Вы можете быть уверены, что это всегда "x" и изменить это довольно легко. Также я сделал эти листы имен в соответствии с их именем списка. Если добавление листов не произойдет, вы можете удалить эту часть.

Sub columnsToListSheets()
LastCol = Sheets("Sheet1").UsedRange.Columns.Count
For rowNumber = 2 To 4
i = 1
    ListName = Sheets("Sheet1").Cells(rowNumber, 1)
    Sheets.Add
     NewSheet = ActiveSheet.Name
      Worksheets(NewSheet).Cells(1, 1) = ListName
      'You may want to name the worksheet after the list
      Worksheets(NewSheet).Name = ListName

For colNumber = 2 To LastCol
                                                        '"x" may be good enough to test for
    If Worksheets("Sheet1").Cells(rowNumber, colNumber) <> "" Then
        i = i + 1
        'Worksheets(NewSheet).Cells(i, 1) = Worksheets("Sheet1").Cells(1, colNumber)
        Worksheets(ListName).Cells(i, 1) = Worksheets("Sheet1").Cells(1, colNumber)
    End If

Next colNumber
Next rowNumber
End Sub

Связанный контент