Одна из основных проблем заключается в том, что вы пытаетесь использовать Excel в качестве языка программирования, который обрабатывает данные от A до B ; это возможно, но это не естественное поведение электронной таблицы. Предполагается, что электронная таблица содержит некоторые входные данные и на их основе рассчитывает статические данные.
Существует два основных подхода к вашему виду обработки:
- Вы игнорируете тот факт, что Excel на самом деле не создан для процессов, и пишете код VB, который затем запускаете один раз для выполнения вашего процесса.
- Вы переосмысливаете свой процесс как статический макет; тогда вы можете использовать формулы.
Я не буду вдаваться в кодирование макросов VB; об этом написано достаточно, и если у вас нет опыта, вам понадобится несколько часов (если вы сообразительны), чтобы освоить достаточно, чтобы делать то, что вы хотите (или навсегда, если вы не мыслите достаточно логически - программирование для многих но не для всех).
При использовании формул подход будет заключаться в том, чтобы определить целевую область где-нибудь (другой лист, лист в сводной электронной таблице для всех 50 или далее вниз на том же листе, где вы хотите) и заполнить эту область соответствующими формулами, использующими существующие данные для создания макета вы хотите.
Предполагая, что вы положили результат дальше, начиная с строки 51.
Давайте начнем с транспонирования - вы можете создать это, введя формулу, например =INDEX($C$4:$AC$47,COLUMN()-3,ROW()-50)
. Обратите внимание, что я переключил аргументы столбца и строки - я поместил ROW()
в аргументе столбца и COLUMN()
в аргументе строки; который производит транспонирование. Смещения отобразят текущую строку и столбец ячеек в столбец и строку исходных ячеек, возможно, вам придется добавить или вычесть немного больше, просто попробуйте. Скопируйте эту формулу во всей целевой области (такого же размера, как исходная область) и отрегулируйте смещения, чтобы получить ее правильно.
Следующий шаг - вращение. Чтобы повернуть вправо, вам нужно сместить параметр ячейки еще на 1, 2, 3 для каждой строки, которую вы понижаете, поэтому корректировка даст что-то вроде =INDEX($C$4:$AC$47,COLUMN()-3+(ROW()-51),ROW()-50)
- я добавил ROW()-51
к аргументу строки (который содержит COLUMN () из-за транспонирования); ROW()-51
будет 0 для первой целевой строки, 1 для второй строки, 2 для третьей и т.д. Если вы скопируете эту формулу для целевого массива, она выполнит «вращение». Играйте с + и -, чтобы вращать влево или вправо, и так далее. Вам также нужно будет добавить `MOD (..., 26) вокруг него, чтобы сделать его" wrap ".
Как только вы поймете эти понятия, вы сможете быстро создать массив формул, который генерирует ваш целевой макет, и использовать целевой макет для ввода ваших программ (или - как только вы убедитесь, что все готово, скопируйте значения цели в исходной области и удалите цель). Обратите внимание, что я не дал вам точное решение, но вход, чтобы научиться обращаться с ним самостоятельно. Вам нужно приложить еще больше усилий.
Из моего опыта это самый простой способ учиться и соответствовать постоянно меняющимся требованиям. Опять же, не стесняйтесь использовать вместо этого подход VB Macro; это больше обучения, но тогда у вас есть гораздо более мощный инструмент.