Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA

Модерирует : ShIvADeSt

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

RUSmafia



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk

    Цитата:
    что нужно сделать, если, скажем в А10 второго листа лежит значение А1 первого?

    Выделить зеленым цветом ячейки в первом и во втором листах.
     
    Как формулами решать - не знаю.
     

    Цитата:
    При использовании Ctrl+F ставил галочку "Ячейка целиком"?

    Да.

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 15:04 16-04-2007
    Dzak



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите пожалуста  
    существует ли возможность в VBA создать на одном лисите несколько автофильтров для ограниченных количеством строк диапазонов

    Всего записей: 121 | Зарегистр. 01-08-2002 | Отправлено: 15:23 16-04-2007
    Panteran3785

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите составить условие (код)? В ячейке А1, например содержится следующий текст - Мобильные персональные компьютеры (ноутбуки), а в ячейке В1 - Мобильный ПК Acer "TravelMate 2483WXMi" LX.TJ90Y.001 (C M 430-1.73ГГц, 512МБ, 80ГБ, GMA950). Нужно, чтобы в ячейке С1 отобразилось значение ячейки А1, если в ячейке В1 есть совпадение со словом Мобильн. Вообще-то таблица на самом деле большая, порядка 8000 строк, структура ее следующая: например, в ячейке А61 записана общая категория, а в ячейках с В63 по В200 наименования, относящиеся к этой категории. Далее в ячейке А201 новая категория, с В202 по В250 - наименования к этой категории и т.д. Нужно, чтобы в любом пустом столбце (например, столбец С) по каждому наименованию отобразилась соответствующая  категория.
    Помогите, пожайлуста.

    Всего записей: 9 | Зарегистр. 16-04-2007 | Отправлено: 16:22 16-04-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может, я загнался, но задача такова.
    Два листа одной книги. Нужно сравнить выделенные в обоих листах столбцы, одинаковые пометить зеленым цветом, расхождения - красным. Плюс еще кое-какая обработка.
     
    Не знаю, как получить номера первой и последней ячеек в выделенном столбце

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 16:45 16-04-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aar
    Цитата:
    Не знаю, как получить номера первой и последней ячеек в выделенном столбце  
    ну, формальный ответ - через Selection.Row, Selection.Rows.Count
    И, если это единственная трудность, тогда ловите код- пример отображения номера строк выделенных и реально заполненных в выделенном диапазоне
    по перебору/сравнению/выделению цветом вопросов нет?...
     
    p.s. "Золотое правило" VBA в Excel: "Если можешь обойтись без VBA - обойдись!"  (c) The okk
    Посмотрите на решение от ZORRO2005 в топике Excel FAQ через условное форматирование
    p.p.s. ну, и на закуску, модуль на VBA от AndVGri - В диапазоне А:К найти ячейки с одинаковыми данными и выделить их др.цветом
     
    удачи.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 03:37 17-04-2007 | Исправлено: SERGE_BLIZNUK, 03:45 17-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK

    Цитата:
    ну, формальный ответ - через Selection.Row, Selection.Rows.Count  

    не пройдёт, так как aar написал что выделен полный столбец. Получим 1 и 65536 (Excel 97-2003)
    Чего-то путного по этой теме в методах и свойствах Range не нашёл. Стоит сделать, наверное, так:

    Код:
     
    Dim vRows As Long, vFirstRow As Long, vLastRow As Long
     
    'Получим номер первой не пустой строки выделения
    If IsEmpty(Selection.Cells(1&, 1&).Value) Then
        vFirstRow = Selection.Cells(1&, 1&).End(xlDown).Row
    Else
        vFirstRow = Selection.Row
    End If
     
    'Получим номер последней не пустой строки выделения
    vRows = Selection.Rows.Count
    If IsEmpty(Selection.Cells(vRows, 1&).Value) Then
        vLastRow = Selection.Cells(vRows, 1&).End(xlUp).Row
    Else
        vLastRow = Selection.Row + vRows - 1&
    End If
     

     
    Добавлено:
    Dzak
    Не совсем понял
    Цитата:
    несколько автофильтров для ограниченных количеством строк диапазонов

    С Excel 2003 (если не ошибаюсь, может и в XP было) есть тип объектов на рабочем листе - список, для каждого списка на листе существует автофильтр, списков на листе может быть несколько. В VBA их эквиваленты ListObject и коллекция списков ListObjects. Может это подойдёт?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:18 17-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Все проще:

    Код:
    Dim vRows As Long, vFirstRow As Long, vLastRow As Long
    vFirstRow = Selection.Find("*").Row
    vLastRow = Selection.Find(What:="*", SearchDirection:=xlPrevious).Row

    Другое дело - а надо ли? Делать цикл For Next для объекта типа Range (а Selection в нашем случае именно Range) считаю нерациональным, ибо как правило намного удобнее пройтись For Each по SpecialCells в этом диапазоне.
    В данном случае задача вообще сводится к условному форматированию с применением ПОИСКПОЗ (или аналогов).

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:11 17-04-2007
    Dzak



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    спасибо пошел читать что это такое
    я в свою очередь понял, что совсем чет не тяну VBA, хотя и ...
    уточню вопрос в надежде чтобы ткнули где читать - весь лопатить VBA ей-ей времени нету
    на Лист 1 сгруппированы предприятия по отраслям  (то есть отрасль 1 - А5 и ее предприятия А6-А20, отрасль 2 - А21 и ее предприятия А22-40) теперь одновременно нужно поставить фильтры на А5 И А 21, при этом чтобы фильтр в А5 отразил выборку с диапазона А6-А20 и незатрагивал ниже А20. Обычный автофильтр фильрует весь список с А5 и до А65536
     

    Всего записей: 121 | Зарегистр. 01-08-2002 | Отправлено: 10:13 17-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dzak
    Не получится. Один столбец - один автофильтр.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:45 17-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dzak

    Цитата:
    о есть отрасль 1 - А5 и ее предприятия А6-А20, отрасль 2 - А21 и ее предприятия А22-40

    А вам не кажется, что у вас нарушены в этом случае правила группировки? Правильно ведь, чтобы было в столбце А названия отраслей, а в столбце В названия предприятий, чтобы строки были независимы друг от друга. В вашем же случае отнесение предприятия к отрасли зависит от положения его названия относительно ячеек A5 и A22 - или я чего-то не понимаю? И не понимаю, что вы, в таком случае, пытаетесь отфильтровать?
     
    Добавлено:
    The okk
    Спасибо

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 10:47 17-04-2007 | Исправлено: AndVGri, 10:51 17-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri

    Цитата:
    И не понимаю, что вы, в таком случае, пытаетесь отфильтровать?  

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

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:56 17-04-2007
    Dzak



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    прошу прощения за такой способ, отражения проблемы
       
     
    The okk
    жаль а счастье казалось так близко

    Всего записей: 121 | Зарегистр. 01-08-2002 | Отправлено: 11:14 17-04-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Цитата:
    не пройдёт, так как aar написал что выделен полный столбец. Получим 1 и 65536 (Excel 97-2003)  
    в принципе, тема уже закрыта ответом The okk, но просто для соблюдения справедливости.. вы зря не заглянули в тот код, который я привёл под ссылкой
     "код- пример отображения номера строк выделенных и реально заполненных в выделенном диапазоне" ;-))) мы с Вами мыслим в одном направлении:
    Код:
     
    r2 = r1 + Selection.Rows.Count - 1  
    If IsEmpty(Cells(r2, col0)) Then  
      rowRealLast = Cells(r2, col0).End(xlUp).Row  
    Else  
      rowRealLast = r2  
    End If
    The okk

    Цитата:
    В данном случае задача вообще сводится к условному форматированию с применением ПОИСКПОЗ (или аналогов).
    полностью согласен! Читай Золотое правило!
    Так я же привёл в своём посте ссылочку на решение ZORRO2005 именно через условное форматирование!
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 12:19 17-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK

    Цитата:
    полностью согласен! Читай Золотое правило!

    Я писал для AndVGri - чтобы он макрос не писал. Я видел твой пост.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:27 17-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    SERGE_BLIZNUK
    Да понял, я понял, простите наистрожайшие, больше не буду
    Dzak
    Хоть не по месту (Excel FAQ - это), вот так можно со списками. первый по id>1.3, второй id>2.1
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 12:46 17-04-2007
    Dzak



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    coool  
    ну вот это уже решение
    огрооомнейшее спасиб, дело в том, что сам то я посчелкать каждый раз выбирая смогу, но только файл будет высталяться на обоздрение и уж там ничего не объяснишь  
    как говорится ларчик просто открывался

    Всего записей: 121 | Зарегистр. 01-08-2002 | Отправлено: 14:09 17-04-2007
    crotoff

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, авторитеты! Подскажите как нам разделить многострочный текст, содержащийся в одной ячейке на несколько однострочных ячеек. Это при экспорте из 1С получается, в конце строки стоит невидимый символ, типа как нажимаешь при вводе "ALT+Enter" в конце каждой строки. А на выходе нужно получить однострочные ячейки с текстом, лучше даже в другом листе. Это видимо нужно как-то реализовать программно? Может быть на AutoIT кто-нть скрипт знает?

    Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 16:41 17-04-2007
    Panteran3785

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята! Помогите пожайлуста доработать код. Это к моему предыдущему вопросу. Есть функция, которая извлекает из текста определенное слово, в моем случае первое и есть код, котрый должен сразу во все строки определенного диапазона в 12 столбец добавить извлеченное слово из текста.  
     
    Function ExtractElement(Txt, n, Separator) As String
    'возвращает n-элемент текстовой строки
     
    Dim AllElements As Variant
       
      AllElements = Split(Txt, Separator)
      ExtractElement = AllElements(n - 1)
     
    End Function
     
    Sub ДобавлениеКатегории()
    Dim rst As Range
    Dim i As Integer
    Dim lRowsCount As Long, lColCount As Long
     
    'работаем с листом
        With Workbooks("FCB070413.xls").Worksheets("FCB070413")
    'определяем количество используемых строк
        lRowsCount = .UsedRange.Rows.Count
    'и столбцов
        lColCount = .UsedRange.Columns.Count
    'определение диапазона, начиная с 24 строки
        For i = 24 To Cells(lRowsCount, lColCount)
        Cells(i, 12) = ExtractElement(Cells(i, 3), 1, "" "")
        Next i
        End With
    End Sub
    Саму таблицу можно посмотреть по адресу:http://www.fcenter.ru/products.shtml?eshop и там выбрать - HTML (zip)

    Всего записей: 9 | Зарегистр. 16-04-2007 | Отправлено: 16:44 17-04-2007
    crotoff

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2Panteran3785
     
    тебе паходу придётся сделать в цикле перебор по всем общим категориям чтобы сравнить, содержится ли в B искомый текст. Я бы наверно использовал комбинации встроеных функций - условия "Если" и функции для текста, например "Найти" или "ПоискПозиции" в соседних столбцах - для каждой категории свой столбец, ну а затем их консолидировать через "&" в сводном столбце. А уже этот сводный столбец категорий переместить в С или ещё куда.  Это можно и в скрипте реализовать, даже быстрее будет чем обычный перебор.

    Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 17:03 17-04-2007
    keha



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно как-нибудь с помощью макросов создать пустой (новый) текстовый файл и записать в него с разделителями выборочные столбцы? (Например есть столбцы A, B, C, D, E, и нужно, чтобы в текстовый файл попали данные из столбцов A, D и E, разделенные точкой с запятой.)
     
    Или здесь поможет только удаление столбцов B и C, с последующим сохранением "сохранить как"?

    Всего записей: 82 | Зарегистр. 15-08-2001 | Отправлено: 17:05 17-04-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru