У меня уже есть таблица, подготовленная на одном листе документа Excel, которая не может быть изменена, выглядит следующим образом
name | info | info2 | info3 | ammount
-----|------|-------|-------|--------
name | info | info2 | info3 | 0
name1| info | info2 | info3 | 0
и содержит полный список элементов с значениями по умолчанию, равными 0.
На втором листе у меня есть таблица, идентичная по столбцам, но внутри нее ничего не хранится, пользователь будет вводить имя во второй таблице, а макрос будет искать его в первой таблице и копировать строку ввторая таблица.
Пользователь изменит сумму на второй таблице, а затем сохранит ее на первой таблице, чтобы получить:
name | info | info2 | info3 | amount
-----|------|-------|-------|---------------------
name | info | info2 | info3 | different value now
name1| info | info2 | info3 | 0
Я попытался использовать макро-рекордер, чтобы найти вручнуюкакие шаги потребовались, и я попытался написать код, но обнаружил некоторые проблемы:
- Мне не хватало надежного способа копирования строки таблицы без необходимости копировать всю строку Excel, поэтому я использовалвместо диапазона
- У меня нет способа сохранить переменные диапазоны ячеек, чтобы составить диапазон с индикатором строки, который будет меняться в зависимости отфункция соответствия и буквы столбцов, которые всегда будут оставаться неизменными, поскольку необходима вся строка.
Я уверен, что есть более разумный способ сделать это, в настоящее время я использую функцию соответствия, чтобы найтииз номера строки, в которой имя, введенное в table2, находится в table1
Так что в коротком примере там будет возвращено 1.
В этот момент я хотел бы иметь возможность использовать это "1 ", чтобы составить диапазон: в этом случае" A2: E2 "и скопируйте диапазон во вторую таблицу, чтобы имя перекрывало имя, используемое для поиска.
Это даст мне копию толькостроки, содержащие имена, которые пользователь вводит в таблице 2.
Теперь пользователь изменит сумму в таблице 2, а затем вернет строку в таблицу 1, используя тот же процесс, который использовался для ее перевода в таблицу 2, но в обратном порядке: знание таблицы 2номер строки и диапазон столбца составляют диапазон для копирования и определяют, какую строку перезаписать с помощью функции сопоставления.
В данный момент я пытаюсь понять, как происходит процесс.s будет работать для 1 совпадения, но мне нужно, чтобы процесс поиска выполнял множественные совпадения, для которых, как я полагаю, потребуется рекурсия, чтобы отслеживать искомые строки и куда копировать результаты в таблице1.
Я уверен, что должен быть более простой и умный способ сделать это, но мой опыт работы с VBA очень поверхностен, любое предложение будет оценено.
Примечание: информационные столбцы содержат важную информацию, котораяне будет изменен конечным пользователем, поэтому не нужно будет копировать его обратно, я просто подумал, что будет проще скопировать всю строку вместо одной ячейки, по крайней мере, в качестве первого шага.
На заключительном замечании: меня попросили записать все внесенные пользователем изменения (поэтому возвращающие значения из таблицы2) с отметкой времени, если это возможно, во внешний файл для безопасности резервного копирования, я не знаю, возможно ли это, икак бы это было решено.
Мне удалось решить одну из проблем, с которыми я столкнулся, используя этот код:
=INDIRECT(CONCATENATE("'sheet1'!B";(CONFRONT(A2;Table1[Column1];0)+1));TRUE)
Используя этот код, я могу обновить все остальные столбцы, связанные ссодержимое первой таблицы путем поиска строки, имя которой совпадает с именем пользователя.