У меня проблемы с манипулированием моим набором данных в нужной мне форме. У меня есть 50 электронных таблиц, данные которых должны быть реорганизованы в определенном порядке, чтобы правильно интерпретировать их с помощью программного обеспечения. Для одной из таблиц у меня есть исходный набор данных, а также то, как он должен выглядеть после реорганизации. Я полагаю, что если я смогу воссоздать окончательный лист, начиная с исходного, то смогу использовать тот же метод в других электронных таблицах.

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

До

После

Данные в обеих таблицах одинаковы, изменился только способ их размещения.

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

Мы с коллегой пытались использовать встроенную функцию смещения, но добились небольшого прогресса, поэтому я надеюсь, что кто-то знает о более эффективном способе решения этой проблемы.

Любая помощь с благодарностью, спасибо.

2 ответа2

0

Одна из основных проблем заключается в том, что вы пытаетесь использовать Excel в качестве языка программирования, который обрабатывает данные от A до B ; это возможно, но это не естественное поведение электронной таблицы. Предполагается, что электронная таблица содержит некоторые входные данные и на их основе рассчитывает статические данные.

Существует два основных подхода к вашему виду обработки:

  1. Вы игнорируете тот факт, что Excel на самом деле не создан для процессов, и пишете код VB, который затем запускаете один раз для выполнения вашего процесса.
  2. Вы переосмысливаете свой процесс как статический макет; тогда вы можете использовать формулы.

Я не буду вдаваться в кодирование макросов 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; это больше обучения, но тогда у вас есть гораздо более мощный инструмент.

0
I'm not sure how long the $A column of numbers is.

It looks pretty easy to put into a macro, 
following your manual steps to convert it.
As I see it...

Select A$ 
Insert Column
Select $A$4
Fill down 0 to x ?
Select $C$4
[shift]+[ctrl]+[arrow right]
[shift]+[ctrl]+[arrow down]
[Ctrl]+[X] ( cut )
Paste special with Transpose option into $a$4

(приблизительные инструкции на английском языке, а не VBA) Затем выберите Инструменты Макросъемка и назначьте горячую клавишу и запись, затем остановите и сохраните.

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