Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22

Копирование массива данных со страницы на страницу

02.10.2015, 15:13. Показов 4829. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.

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

Есть книга Excel, в ней 2 листа с таблицами:

Таблица 1 (Лист 1)


Таблица 2 (Лист 2)


Из первой таблицы во вторую необходимо перенести, например, все данные из столбцов "ФИО" и "Подразделение". При этом количество строк будет варьироваться. То есть нужно, чтобы копировались данные не строго с А2 по А10, а, как бы, с А2 по Абесконечность. Это вообще возможно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2015, 15:13
Ответы с готовыми решениями:

Передача данных со страницы на страницу
господа, есть два файла: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;...

Передача данных со страницы на другую страницу
Приветствую всех) Поставил себе задачу сделать форму полями в виде анкеты, после нажатия на кнопку отправить, все данные из полей...

Копирование данных с отображаемой web-страницы
Здравствуйте уважаемые мастера экселя! Подскажите пожалуйста новичку экселя Создал таблицу. В листе spisok, столбец B, D, F и т.д. ...

38
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.10.2015, 13:42
Студворк — интернет-сервис помощи студентам
Что именно не понятно? Какая строка? Всё комментировать некогда.
Алгоритм вкратце уже описал.
d2 - это словарь с фио и должностями, они выгружаются первыми на итоговый лист, затем выгруженные фио и то, что там ранее уже занесено вручную в шапки листа используется для составления ключа.
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
21.10.2015, 15:53  [ТС]
Как я понимаю, распределение значений параметров идет путем сравнения наименований параметров на первой странице с заголовками таблицы на второй странице. А если заголовки будут иметь совсем другие имена? То есть нужно будет указать, что класть значение в зависимости от наименования параметра нужно будет в конкретную ячейку (например в (С;х), причем х начиная с 3).
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.10.2015, 16:24
Цитата Сообщение от Spid3r Посмотреть сообщение
если заголовки будут иметь совсем другие имена
то есть возможность в коде использовать if-then-endif
Или лучше
Select Case
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
21.10.2015, 17:01  [ТС]
А можно попросить сварганить пример макроса хотя бы на основе одного параметра? Например, во вложенном файле отправить значение параметра "Тестирования 0.55". Соответственно, должно быть что-то вроде "если наименование параметра начинается на "cmi.objectives.0", то обращаемся к "Колонка0" во второй таблице, а если заканчивается на ".id", то кладем значение в "Ячейка0" упомянутой ранее колонки".

Пример2.xlsx
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.10.2015, 17:21
Если будет время вечером в промежутке между интернами и лондонградом - посмотрю
Ну или может завтра днём, сейчас уже работа заканчивается, нужно срочно подбивать хвосты...
Я глянул мельком - нужно туда ещё один словарь добавлять, с соответствием Колонка0/cmi.objectives.0 и т.д. все пары. Так код будет прозрачнее.
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
21.10.2015, 17:32  [ТС]
Подожду, конечно, гнать не имею права
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.10.2015, 20:38
Вроде нет сегодня интернов...
Всё остальное как говорил - добавил ещё один словарь, всё прозрачно.
Вложения
Тип файла: rar Пример3.rar (21.8 Кб, 16 просмотров)
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
22.10.2015, 12:25  [ТС]
Словарь вижу, но он, как я понимаю, не задействован? Нигде же не идет сравнение заголовков со значениями словаря.

Я с VBA в жизни не работал, почти все функции и операторы приходится гуглить, чтобы разобраться, поэтому прошу строго не судить, но очень понадобилось по работе.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.10.2015, 12:39
Если бы не использовал - так бы и написал в комментарии
В этот новый словарь заносятся пары вариантов этих заголовков, далее по одному из названий из словаря извлекается второе, никакого сравнения там не нужно, т.к. если вдруг пары не будет - будет извлечено пустое значение, что просто в итоге даст ключ, которого нет в другом словаре, и в ячейку ничего не будет записано.
В перспективе для удобства работы эти пары можно брать откуда-то из другого источника - с листа или например из текстового файла, тогда при изменениях не нужно будет лезть в код, достаточно поменять заготовленный список.
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
22.10.2015, 12:53  [ТС]
Глянь вложенную таблицу с моими комментариями в макросе

Пример3ed.rar
0
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
22.10.2015, 13:13  [ТС]
Ах да, и зачем в объявлении переменных символы & и $
Visual Basic
1
Dim a(), i&, ii&, iii&, t$
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.10.2015, 13:26
Архивы рабочий касперский не дозволяет качать.
Символы & и $ - это короткое обозначение типа переменной - Long и String
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
22.10.2015, 14:23  [ТС]
Тогда так

Пример3.txt
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.10.2015, 15:45
Так это мой код как был... Только вот With d ... End With лишнее - точно я там так написал? Помню писал... Тогда внутри d можно удалить, иначе в with нет смысла
А в чём вопрос, где непонятно?
Словарь d используется тут:
Visual Basic
1
t = .Cells(i, 1).Value & "|" & d.Item(.Cells(1, ii).Value) & "." & d.Item(.Cells(2, ii + iii - 1).Value)
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
22.10.2015, 15:58  [ТС]
Цитата Сообщение от Hugo121 Посмотреть сообщение
Тогда внутри d можно удалить
Ммм... Что именно удалить? Весь "With d ... End With"? Тогда как без словаря?
_____

Строка .[a3].Resize еще более-менее понятна... Ну точнее, я понимаю ее так: начиная с а3 мы задаем размер таблицы/матрицы, в которую будут помещены ФИО/Подразделения, которые хранятся в d2, ну и "вываливаем их туда, только зачем мы ее траспонируем?

А вот далее, начиная с For i = 3 To 2 + d2.Count, непонятно ничего... Зачем эти бесконечные iiiiiii, что плюсуем, что минусуем...
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.10.2015, 16:41
1.Нет, всё не нужно удалять
Если пишем with что-то, то это что-то уже внутри этого with упоминать излишне. А тут упомянуто. Т.е. нужно удалить или 2 строки With d ... End With, или 7 d внутри.
2. Транспонируем затем, что массив из массивов Array(d2.keys, d2.items) является горизонтальным, а нам нужно их поставить в столбцы.
3, Далее вся эта бодяга для того, чтоб пройтись циклом по фамилиям и вашей хитрой шапке:
For i = 3 To 2 + d2.Count'по фамилиям
For ii = 3 To 12 Step 3'по первой строке шапки с шагом 3
For iii = 1 To 3'по второй строке
в итоге получаем ключ из фамилии и значений шапки.
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
27.10.2016, 17:19  [ТС]
Подскажите, пожалуйста, с чего вылезает "Run-time error 13" во вложенном файле?

Если удалить с первой страницы значения ниже Коршуновой, то макрос срабатывает. Как только возвращаю Какулу (может, это из-за ее фамилии? ), снова вылезает "13"...
Вложения
Тип файла: rar Macros.rar (183.1 Кб, 11 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
27.10.2016, 20:27
В ячейках от C601 до C642 длина содержимого более 255 знаков (как раз на этой Какуле, как Вы её вычислили? ), поэтому выгрузка через Application.Transpose() и глючит.
Но эту глючную строку в коде можете вообще убрать, т.к. ниже всё тоже самое выгружается уже циклом, где нет проблемы с такими строками, ибо тогда не используется Application.Transpose()
Эту строку в коде точно я оставил? Ну тогда извините
1
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 22
28.10.2016, 10:38  [ТС]
Спасибо, дело было действительно в этой строке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2016, 10:38

Копирование данных из DataTable, создание новой страницы в Excel
Ниже код делает копирование данных с таблицы dtt.Tables(0), создаем файл Excel и копируем в него. Даллее в Excel копируем страницу и...

Передача данных из одной страницы WebApp1 к другому страницу WebApp2
Здравствуйте Всем! не нашел где писать, и решил писать сюда если ошибся с разделом то прошу прошения! думаю довольно интересный, но...

Пытаюсь сделать вывод данных из БД на другую страницу при нажатии на одно из значений на предыдущей страницы
Пытаюсь сделать вывод данных из БД на другую страницу при нажатии на одно из значений на предыдущей страницы. Я пользуюсь FrontPage. В...

Вывод данных на страницу из массива
Добрый день. В Excel пытаюсь преобразовать результат SQL выборки запихнув её в массив (ну там можно будет поиграть, переставлять данные...

Копирование данных из массива в массив
memcpy(before, *(after + 4), 4); Стараюсь скопировать четыре байта из массива after в before, причём первые четыре пропустить. Но у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru