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

#excel #vba

Вопрос:

Я думаю, что я слишком глуп, чтобы объяснить это, поэтому вот пример:

A B C D E F G H Я J K L
1 121 221 335 335 558 669 126
2 54 89 56 78 23
3 85 59 16 15
4
5 16 95 48 16 79 16

Итак, вот как выглядит лист. Чего бы я хотел, так это чтобы:

Для всех столбцов, имеющих одинаковое значение в строке 1, т. е. 121 221, 335

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

Например, в первом столбце этой таблицы будет сумма B2, в строке A2 H3 будет сумма I3 J3 E5 будет сумма F5 G5

Наконец, пустые столбцы будут принимать значение строки 1 столбцов, извлеченных из-A1 будет = B1-C1 будет = D1

Затем все первоначально заполненные столбцы будут удалены:

A B C D E F
1 121 221 335 558 669 126
2 54 89 56 78 0 23
3 85 0 59 0 16 15
4 0 0 0 0 0 0
5 16 95 64 0 79 16

В значениях в строке 1 нет шаблона

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

Комментарии:

1. Вы говорите, что я добился некоторого прогресса в этом проекте, но это ставит меня в тупик , так что покажите нам, что у вас есть и что мешает вам прогрессировать. Как написано, это звучит как просьба «сделай мою работу за меня», на которую вряд ли ответят

2. Я имел в виду, что я дошел до этого этапа, до этого были другие шаги, которые я выполнил и в которых не нужна помощь. Мне просто нужен способ завершить то, что описано. Извините, если я плохо соблюдаю этикет. Это мой первый раз, когда я использую VBA

Ответ №1:

Вот алгоритмический подход, который вы можете использовать

  1. Получите ссылку на ваш диапазон исходных данных
  2. Скопируйте этот диапазон в массив вариантов
  3. Создайте еще один пустой массив того же размера, что и данные
  4. Создайте переменную указателя столбца для вывода
  5. Инициализируйте первый столбец выходного массива равным 0
  6. Зациклите первую строку данных
  7. Когда значение найдено, проверьте, совпадает ли оно со значением в столбце текущий вывод
  8. Если это не так, обновите указатель вывода, инициализируйте новый столбец до 0
  9. Зациклите столбец данных и добавьте значения в выходной столбец
  10. Как только цикл будет завершен, поместите выходной массив на лист, перезаписав исходные данные

На этот вопрос есть множество ответов, которые могут помочь с каждым из этих шагов

Комментарии:

1. Спасибо! Я действительно ценю это. Я попробую и доложу об этом.