|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.04.2009, 14:00 | #1 |
Регистрация: 24.04.2009
Сообщений: 4
|
Вопрос по макросу
Доброго всем времени суток! Недавно начал изучать макросы, так сказать, под долгу службы. Ибо весьма заинтересован в сокращении затрат времени на обработку массивов данных.
Проблема следующего содержания. Имеется массив данных. Ключевыми элементами в нем являются название пробы и содержания по элементам, которые к нему (к названию) относятся. Задача макроса в том, чтобы перенести все пробы и привязанные к ним содержания на второй лист. Причем с транспонированием. Т.е. в исходнике всё шло в один столбец, а на новый лист данные последовательно переносятся в столбцы (в первой строке каждого столбца название пробы, а под ней - все относящиеся к ней содержания). В виду отсутствия опыта программирования эту задачу я решил довольно-таки топорно. Посмотрев как макро-рекордер переносит первые пробы, я просто взял и дописал код для нужного количества проб. Затратил много времени, но в итоге для этого (и меньшего) количества проб макрос работает. А теперь вопрос, уважаемые знатоки. Что делать, если переносить нужно другое количество содержаний по элементам. Мысль о том, чтобы каждый раз переписывать макрос, приводит меня в уныние... )) Более того, меня терзают смутные сомнения, что мой громоздкий макрос можно написать намного короче и веселее. Наконец, интересно было бы знать, возможно ли сделать так, чтобы перед выполнением задачи макрос однократно запрашивал количество проб (и количество элементов) и переносил данные исходя из этого? Большое спасибо! )) Для наглядности привожу архив с xml. Sample.rar |
24.04.2009, 15:20 | #2 | |||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Вот только надо как-то объяснить макросу, где искать диапазон ячеек с элементами. Вы не описали формат исходных данных, а это важно. Лист с пробами формируется (заполняется) программно, или вручную? Макрос надо встраивать в тот же файл, или сделать его в виде надстройки (чтобы он не был привязан к определённому файлу)? Правильно ли будет решить задачу с применением такого алгоритма? 1) Макрос подсчитывает количество проб на исходном листе (подсчитав количество ячеек во 2-м столбце, в которых присутствует подстрока Proba) 2) Макрос подсчитывает количество изотопов в первой пробе (подсчитав количество ячеек во 1-м столбце, начиная с ячейки ниже Calibration File, и заканчивая последней ячейкой перед Sample ID) Сразу вопросы: во всех пробах количество изотопов одинаковое? если количество одинаковое, то изотопы во всех пробах одни и те же? если одни и те же, то в том же порядке? (от этого во многом зависит способ решения задачи - либо обрабатывать исходные данные формулами, либо макросами) 3) На основании данных, полученных в пунктах 1 и 2, макрос создаёт новый лист в той же книге, выстраивая все найденные пробы по горизонтали, а изотопы - по вертикали. 4) Макрос заполняет таблицу соответствующими значениями. Вопрос: надо ли как-то форматировать значения в новой таблице? Цитата:
Цитата:
Макрос и сам сможет определить всё, что надо (если Вы укажете критерии) И для наглядности не помешает файл с несколькими листами, на каждом из которых будут различные варианты данных с пробами (чтобы было на чём тестировать макрос) |
|||
25.04.2009, 19:11 | #3 | ||||||
Регистрация: 24.04.2009
Сообщений: 4
|
Добрый день. Спасибо за ответ и внимание к моей проблеме.
За формат исходных данных прошу прощения. Система такая. Есть компьютер. К нему подключена установка (спектрометр), управляемая программно с компьютера. Данные с установки записываются программой, после чего она сохраняет эти данные в текстовый файл. Из последнего уже формируется лист xls. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
1.txt - код макроса обработки. Sn.txt - код макроса для обсчета содержаний олова, поскольку (в силу особенностей конструкции) спектрометр не позволяет их получить. I.txt - код макроса для обсчета содержаний йода. По той же причине. Формулы, по которым рассчитываются эти содержания, указаны на листе 1 и выделены зеленым цветом. Еще я бы хотел обратить Ваше внимание на то, что исходные данные в excel располагаются на листах с именем "dzh(дата)". В них строки с первой по 259-ую (включительно) не используются, поэтому, когда я писал макрос, просто переносил все данные на "лист1" без них. Поэтому в прикрепленном файле на листах 1 и 2 то же, что и на листах "dzh", за исключением этих строк. Arc.rar Последний раз редактировалось Tchert; 25.04.2009 в 19:18. |
||||||
25.04.2009, 23:08 | #4 |
Регистрация: 24.04.2009
Сообщений: 4
|
Насколько я понимаю, ситуация усложняется тем, что названия проб могут быть разными (и kribot, и sadpp, и bcr), а последовательность их переноса на второй лист весьма важна.
|
26.04.2009, 01:54 | #5 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
1) Запускаете файл из вложения.
В строке главного меню Excel 2003 справа от пункта Справка появится новый пункт - Обработать данные 2) Отрываете файл Data.xls (или любой другой с аналогичными данными) 3) Активируете лист с именем "dzh(дата)" (макрос обрабатывает только те листы, имя которых начинается с символов dzh) 4) Нажимаете кнопку Обработать данные Макрос создаёт новый лист с таблицей в нужном формате. Будут вопросы или пожелания по работе макроса - обращайтесь. PS: В исходном файле Sample.xls Вы пожелали, чтобы на итоговый лист попадали данные из столбца G (Вы его выделили цветом) Однако в файле Data.xls формулы, судя по Вашим макросам, заносятся в столбец F, следовательно, в итоговую таблицу должны попадать данные из этого столбца. Я выбрал для итоговой таблицы столбец F. Если что, исправить это недолго (поменять одну цифру в макросе) |
26.04.2009, 16:26 | #6 | |
Регистрация: 24.04.2009
Сообщений: 4
|
Игорь, большое спасибо! Вы очень помогли!
Так же благодарен Вам за комментарии в коде! Цитата:
Последний раз редактировалось Tchert; 26.04.2009 в 16:45. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как по макросу скопировать название имени фала в ячейку?? | kievlyanin | Microsoft Office Excel | 8 | 16.04.2009 21:16 |
Ошибка пр обращении к макросу | tae1980 | Microsoft Office Excel | 3 | 04.04.2009 14:38 |
Нужна помощь по макросу VBA | corematt | Microsoft Office Word | 14 | 27.02.2009 11:03 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |
Пользовательская форма к макросу | Flangini | Microsoft Office Excel | 6 | 23.04.2008 13:39 |