Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2014, 16:42   #1
swordpig
Пользователь
 
Регистрация: 23.07.2014
Сообщений: 13
По умолчанию Выделение диапазона ячеек до значения определенного вида.

Добрый день. Никогда раньше VBA не пользовался применимо к Excell и вообще.
Задача простая, но пока путаюсь в классах, методах VBA. А набросать работоспособный макрос надо уже вчера.
Суть:
есть несколько столбцов данных. Допустим в первом столбце данные идут сначала вида буквачисло (например Z56), после идут чисто числовые значения, далее опять буквачисло. Надо выделить и скопировать данные с Z до числовых значений и данные с Z после числовых значений на другой лист. Размеры массивов каждый разз разные, разумеется.

Типа
Z56
Z73
Z43
67
86
78
Z33
Z22

Должны на соседнем листе стать

Z56 Z33
Z73 Z22
Z43

Всем откликнувшимся заранее спасибо. Или подскажите как этот цикл проверки и выделения не соединять в единый массив, а перенести отдельно. А то у меня получается только все значения до числовых полей и после переносить одним массивом.
swordpig вне форума Ответить с цитированием
Старый 23.07.2014, 19:01   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

отмечаете колонку (диапазон) с Вашими данными, выполняете этот
Код:
Sub ChUp()
  Dim rg As Range, i As Long
  Set rg = Selection:  Set rg = rg.SpecialCells(xlCellTypeConstants, xlTextValues)
  For i = 1 To rg.Areas.Count
    rg.Areas(i).Copy Worksheets(rg.Parent.Index + 1).Cells(1, i)
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.07.2014, 20:12   #3
swordpig
Пользователь
 
Регистрация: 23.07.2014
Сообщений: 13
По умолчанию

Отлично!
Работает!!!
Спасибо!
Я так понял, тут сводится все к проверке формата ячейки, текстовые туда, числа нафиг (что собственно я и спрашивал, конечно).
А как сюда вклинить именно срабатывание на Z? Дело в том, что там несколько столбцов в range будет, там могут и другие маркеры теоритически появляться - хотелось бы отслеживать только маркер Z в неком ключевом столбце и чтобы весь диапазон копировался на соседний лист по наличию Z допустим в первом.
И опять же, проверку сюда можно вклинить, чтобы ситуация
массив с Z
массив числовой
массив с Z
была правильной, а на другие ситуации скрипт ругался?
Т.е.
Массив с Z
массив числовой

или к примеру

массив с Z
массив числовой
массив с Z
массив числовой

уже считались исключением и автоматом такое разбрасывать не стоит?

В любом случае, большое спасибо за помощь, теперь видно в какую сторону копать можно и за счет чего. Хотя понимаю, что эту задачу можно решить еще кучей способов. Благодарность от меня в любом случае последует, как до яндекса доберусь.
Если это не представляет сложности, покажите как эту ситуацию можно развить, в плане Z и проверки. В любом случае мой скрипт-франкенштейн уже работает с Вашей вставкой.

Последний раз редактировалось swordpig; 23.07.2014 в 20:36.
swordpig вне форума Ответить с цитированием
Старый 24.07.2014, 00:08   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

для начала, практически все (кроме for ... next) сделано на объектах ексель, их свойствах и методах с целью приоткрыть Вам занавес, так сказать
вторая цель - выпендриться и показать, как Ваша задача решается 4-5 строками VBA
третья цель - неявно присутствует в подписи

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

насколько понял из ранее сказанного - сами пишите немного и понимаете что точно сформулированная задача - это уже половина решения, а частично описанная задача - это повод для поиска и разработки все новых и новых решений по мере выявления очередных особенностей в исходных данных.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.07.2014, 10:53   #5
swordpig
Пользователь
 
Регистрация: 23.07.2014
Сообщений: 13
По умолчанию

Да, я понимаю, что задача изначально была одна, которую Вы решили 5 строками кода. Но это как всегда - когда что-то есть, хочется большего.
В принципе, применив Ваш скрипт задача решена. Но хотелось бы гибкости. И да, согласен, когда знаешь проблему как она есть - не тратишь время на бесконечные переделки под новые условия.

Задача довольно проста - есть массив чисел (файл данных с датчиков) в 17 столбцов с A по Q (A - дата). в 10 столбце (K) - значения, по которым идет проверка, если там впереди литера Z, значит это время пробитие "нулей", потому эти значения с столбца i по столбец q должны быть скопированны на другой лист уже без литеры впереди, для последующей интерполяции. Далее в файле идут данные без литеры Z. Они остаются как есть на первом листе. И в конце файла опять массив данных с столбца i по столбец q с литерой Z в столбце К - это нули датчиков в конце измерения, соответственно они должны быть так же скопированны на соседний лист отдельным массивом рядом с массивом данных с начала файла. Это типовая ситуация, когда в файле идут данные с литерой Z, данные, данные с литерой Z. Остальные файлы - исключение и не должны рассматриваться.

И как бы всю задачу я решил, криво конечно, в основном с помощью записи макроса да различными вставками. Пока решал, конечно работал с одним файлом, явственно прописывая адреса ячеек. Но теперь надо отвязаться от явного указания адресов. Все остальное меня устраивает, проблему отвязки решил именно соседним листом.
Но вот перенос значений на соседний лист - это единственное, что пока ставит в тупик. С Вашим решением это возможно, но придется вокруг нагородить еще всякого.

Для большей понятности, если необходимо, выкладываю файл с макросом+файл данных. Сильно не смейтесь, работает и то хорошо =)

https://yadi.sk/d/99idRAtQXEHNL
swordpig вне форума Ответить с цитированием
Старый 24.07.2014, 11:19   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

странно, но IE не может доступиться к файлу по ссылке.

тут есть возможность прикрепить к сообщению заархивированный файл.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.07.2014, 11:29   #7
swordpig
Пользователь
 
Регистрация: 23.07.2014
Сообщений: 13
По умолчанию

Да, конечно.
Во вложении.
Вложения
Тип файла: rar macros.rar (82.3 Кб, 23 просмотров)
swordpig вне форума Ответить с цитированием
Старый 05.08.2014, 14:04   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см. вложение
Вложения
Тип файла: rar load6.rar (25.3 Кб, 10 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.08.2014, 15:25   #9
swordpig
Пользователь
 
Регистрация: 23.07.2014
Сообщений: 13
По умолчанию

Спасибо!!! Уже стольких своих франкенштейнов понапридумывал, но результата все небыло.

Запустил - ругается на линии 69 Sheets.Add after:=ActiveSheet.Index

Вроде этот метод посмотрел в тырнете - все верно написан. Разницы нету в реализациях на разных версиях Excel? Я на 2003 пробую.
swordpig вне форума Ответить с цитированием
Старый 05.08.2014, 15:39   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

извините, так надо:
Код:
Sheets.Add after:=ActiveSheet
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение диапазона ячеек с нефиксироваными границами Je11 Microsoft Office Excel 4 07.03.2013 18:36
Как сцепить данные с определенного диапазона ячеек через запятую Alex___ Microsoft Office Excel 5 21.01.2013 23:42
Создание формулы с вычислением среднего значения диапазона ячеек Buchhalter Microsoft Office Excel 16 02.04.2012 21:09
Выделение диапазона по условию тестовых значений ячеек as-is Microsoft Office Excel 1 08.03.2010 14:45
Складывание ячеек при достижение определенного значения Vladimir17M Microsoft Office Excel 6 08.02.2010 05:39