2

В Excel, как можно объединить, свернуть, сжать или удалить пустые ячейки из массива с дублирующимися заголовками в строках и столбцах?

+-----------+---------+------+---------+-------+---------+
|           |  1998   | 2001 |  2004   | 2004  |  2010   |
+-----------+---------+------+---------+-------+---------+
| Porcupine | 123,000 |      |         |       |         |
| Porcupine |         |      | 125,000 |       |         |
| Porcupine |         |      |         |       | 197,000 |
| Quark     | 3,750   |      |         |       |         |
| Quark     |         |      | 3,750   |       |         |
| Sloth     |         |      |         | 1,400 |         |
| Sloth     |         |      |         |       | 1,500   |
+-----------+---------+------+---------+-------+---------+

Желаемый результат:

+-----------+---------+---------+---------+
|           |  1998   |  2004   |  2010   |
+-----------+---------+---------+---------+
| Porcupine | 123,000 | 125,000 | 197,000 |
| Quark     | 3,750   | 3,750   |         |
| Sloth     |         | 1,400   | 1,500   |
+-----------+---------+---------+---------+

2 ответа2

1

@ Ответ Джона - хорошее решение VBA. Тем не мение....

Взгляните на статью Джона Уокенбаха о том, что я называю «разворотом»: http://spreadsheetpage.com/index.php/tip/creating_a_database_table_from_a_summary_table/

Вы бы использовали технику Walkenbach, чтобы сначала «разворачивать» ваши данные в нормализованный макет таблицы. Затем, как указывает @Jon выше, вы восстанавливаете, чтобы получить желаемый макет.

Вот еще один пост на этом форуме, очень похожий на ваш: у меня есть лист с двумя столбиками; в одном это имя, в другом есть один или несколько писем, разделенных запятой

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

0

Я могу думать только о VBA - не думайте, что промежуточные итоги будут работать очень хорошо.

Предполагая, что ваши данные находятся на листе 1, и что у них есть заголовки в строке 1 и столбце A, и нет общих строк или чего-то подобного. Также предположим, что sheet2 пуст (так как именно здесь я буду публиковать данные)

Sub get_sparse_data()
xrow = 2
For irow = 2 to Sheet1.UsedRange.Rows.count

  For icol = 2 to Sheet1.UsedRange.columns.count
    If Len(Sheet1.cells(irow, icol).value)=0 Then
    Else
      Sheet2.cells(xrow, 1).formula = Sheet1.cells(irow, 1).value 'this is the row title
      Sheet2.cells(xrow, 2).formula = Sheet1.cells(1, icol).value 'this is the column title
      Sheet2.cells(xrow, 3).formula = Sheet1.cells(irow, icol).value 'this is the value from the table
      xrow = xrow + 1
    End if
  Next icol
Next irow
end Sub

Затем вы можете повернуть результирующие данные, которые находятся на Листе 2 (сначала убедитесь, что у вас есть имена столбцов в строке 1, иначе они не будут работать).

Обратите внимание, что вы можете изменить Sheet1.UsedRange.rows.count и Sheet1.UsedRange.Столбцы.Посчитайте количество строк / столбцов, которое вы хотите просмотреть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .