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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    JekG

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aidomars
    И как этим пользоваться в моем случае? Побить на слова ячейку можно многими способами, а как взять из нее только последнее слово?
     

    Всего записей: 2695 | Зарегистр. 12-10-2005 | Отправлено: 00:25 08-12-2011
    AndVGri

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

    Код:
     
    Public Function GetValue(ByVal fromText As String) As Double
        Const findChar As String = " "
        GetValue = CDbl(Mid$(fromText, InStrRev(fromText, findChar) + 1))
    End Function
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 06:15 08-12-2011
    aidomars



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekG, после сплита сравнивай данные на текст/число. А если последнее слово надо, то  
    msgbox y(UBound(y)).

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 09:37 08-12-2011
    indapublic



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал скрипт, который в цикле удаляет строки. Проблема в том, что строки, в которых есть объединенные ячейки не удаляются. можно ли что-то сделать в этой ситуации?

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 12:27 08-12-2011
    DmAnatolich

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста, нужно осуществить такую вещь:
    - Есть таблица (Т1), 65k+ строк (список книг для продажи), у каждой стоит поле "Издательство"
    - Вторая таблица (Т2) - список издательств (первая колонна) и скидки, которые положены по ним (вторая колонна)
    - нужно каждой книге в Т1 расставить скидку в сооответствии с издательством, причем, как можно быстрее.
     
    Понимаю, что тупым перебором строк из Т1 и сравнением с Т2, скрипт будет выполняться пару недель на Атоме . С помощью запроса бы — к выборке по издательству применить значение… Что-то вроде:

    Код:
     
    UPDATE T1 SET T1.Sale = T2.CurrentPublisherSale WHERE T1.Publisher = T2.CurrentPublisher
     

    Но понятия не имею, как сделать SQL-запрос к таблице из самого Экселя.

    Всего записей: 2 | Зарегистр. 03-10-2011 | Отправлено: 16:38 09-12-2011
    Undaster

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmAnatolich, см. стандартную функцию Excel ВПР(), её не раз обсасывали в Excel FAQ. И не надо из-за такой ерунды VBA городить.
     
    Добавлено:
    indapublic
    Цитата:
    Написал скрипт, который в цикле удаляет строки. Проблема в том, что строки, в которых есть объединенные ячейки не удаляются. можно ли что-то сделать в этой ситуации?
     


    Код:
    Selection.UnMerge
    Selection.Delete Shift:=xlUp
     

    Не устраивает?

    Всего записей: 423 | Зарегистр. 01-03-2003 | Отправлено: 17:47 09-12-2011
    indapublic



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

    Цитата:
    Не устраивает?

    Устраивает, спасибо.

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 06:38 11-12-2011
    ferias



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

    Всего записей: 39 | Зарегистр. 28-06-2007 | Отправлено: 15:55 11-12-2011 | Исправлено: ferias, 15:59 11-12-2011
    JekG

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста такой момент. При записи формул для ячейки в формате R1C1 (ActiveCell.FormulaR1C1 =) можно ли в такой конструкции указать, что ее нужно применить, скажем, к последней заполненной ячейке первого столбца или адрес ячейки должен быть указан явно?

    Всего записей: 2695 | Зарегистр. 12-10-2005 | Отправлено: 02:08 12-12-2011 | Исправлено: JekG, 02:10 12-12-2011
    DmAnatolich

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В общем, лучше такой объем перенести в нормальную БД — сподручнее будет . Всем спасибо, и то (ВПР()), и другое (ADO) работает, хоть и не без галюнов.

    Всего записей: 2 | Зарегистр. 03-10-2011 | Отправлено: 08:40 12-12-2011
    msmih



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Буду очень признателен за подсказку.
    Как сделать такую конструкцию?
    1. Сделать выборку всех совпадающих ячеек A+B+С
    2. Сравнить и вычислить с помощью логики. Для конкретного примера (файл прикреплен) вижу такую логику
    Если A3+B3+C3=A7+B7+C7 и D7=”живет” и E7>E3 то СЧЕТ (или истина)
     
    То есть, по логике вычислить: (1)что человек вернулся, (2) сколько человек вернулось.
     
    Буду признателен за формулу или макрос (office 2007/2010). файл-пример прикладываю (файл-пример в 2-х форматах office 2003/2007).
     
    http://ifolder.ru/27577339

    Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 20:17 14-12-2011
    Alexandr86

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    запускаю из Excel скрипт VBS с параметром
    Arg = Cells(i, 3).Value
    Shell ("C:\Program Files\Radmin Viewer 3\VBS.vbs /" + Arg)
     
    Ошибка
    Excel VBS Run-time Error 5 Invalid procedure call or argument
     
    exe приложения вызываются с параметрами. Скрипт рабочий, проверял через командную строку с параметром.

    Всего записей: 1 | Зарегистр. 16-12-2011 | Отправлено: 08:09 16-12-2011
    denisAzef

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопрос. у меня есть диапазон ячеек с разными фразами . как мне написать формулу, что если у меня в этом диапазоне есть фраза (например хорошо) то чтобы мне выдало общее количество этих (хорошо). формула может типа счетесли? Спасибо!

    Всего записей: 240 | Зарегистр. 08-02-2007 | Отправлено: 09:26 16-12-2011
    aidomars



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

    Код:
    For each ячейка in range("диапазон")
    if instr(1, ячейка, "хорошо")<>0 then n=n+1
    Next
    msgbox n


    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 15:30 16-12-2011 | Исправлено: aidomars, 06:24 27-02-2012
    Hugo121

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmAnatolich
    Понимаю - поздно, но вдруг пригодится...
    Если нужно быстрее - то думаю нужно на словаре делать.
    1. диапазоны в массивы.
    2. издательства со скидками одним перебором в словарь
    3. создаём чистый массив под результат (или как вариант исходный массив делаем пошире)
    3. книги проверяем по словарю, копируем скидку к книге в массив
    4. выгружаем массив результатов
     
    Итого - два прохода по двум массивам и выгрузка (поиск в словаре моментальный).
    Думаю секунд 5-10 или быстрее получится, не проверял.

    Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 10:33 19-12-2011
    BASTETA

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В каждом столбце и каждой строке матрицы P(n, n) содержится строго по одному нулевому элементу. Перестановкой строк добиться расположения всех нулей по главной диагонали матрицы.

    Всего записей: 2 | Зарегистр. 21-12-2011 | Отправлено: 13:43 21-12-2011
    savvato



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, буду признателен за помощь, уже голву сломал.
     
    Суть задачи:
     
    Вобщем есть xls файл, в нем присутствует столбец с ячейками примерно такого содержания и формата
     

    Код:
    слово слово слово слово слово слово слово

     
    Стоит задача текст выделенный жирным перенести/скопировать в одну колонку, а без выделения в другую. Длина и количество слов, выделенных жирным , как и не выделенных не фиксирована, может быть любой.
     
    Как реализовать, может кто сталкивался?

    Всего записей: 52 | Зарегистр. 09-05-2009 | Отправлено: 20:29 21-12-2011
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    savvato
    Цикл по ячейкам - просто, даже останавливаться на этом не стоит.
    Есть объект CellFormat - можно прочитать / изменить формат ячейки. После проверки записать нужный текст в нужную ячейку.

    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 01:16 22-12-2011 | Исправлено: MrZeRo, 01:16 22-12-2011
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BASTETA
    Перестановкой какой?
    Циклически передвинуть все значения в строке, так чтобы 0 оказался на главной диагонали?
    Или переставить 0 с числом, стоящим на главной диагонали?
    savvato
    насколько понял. Пример для активной ячейки.  

    Код:
     
    Public Sub SplitBoldNormal()
        Dim sBold As String, sNormal As String
        Dim pChar As Characters, i As Long
        Dim pChars As Characters
        Set pChars = ActiveCell.Characters
        sBold = "": sNormal = ""
        For i = 1 To pChars.Count
            Set pChar = ActiveCell.Characters(i, 1)
            If pChar.Font.Bold Then
                sBold = sBold & pChar.Text
            Else
                sNormal = sNormal & pChar.Text
            End If
        Next i
        ActiveCell.Offset(0, 1).Value = sBold
        ActiveCell.Offset(0, 2).Value = sNormal
    End Sub
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:59 22-12-2011
    KF121



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите со следующем. в одном из модулей объявлены X публичных констант, формат следующий  
    TC001
    TC002
    ...
    TCXXX
     
    нужно в другом модуле нужно получить значения этих констант и сохранить в массив. как определить есть такая константа или нет, я знаю. а как вот получить ее значение в рантайме имея только формат имени нет. Помогите. и вообще можно ли так сделать.
    Либо как инициализировать массив вне какой либо процедуры,  
     

    Код:
    Sub dd()
      Dim i
      ReDim TestCases(TEST_CASES_COUNT, 4)
       
      For i = 1 To TEST_CASES_COUNT
        If (TypeName("TC" & Format(i, "000")) <> "Empty") Then
          TestCases(i, 1) = ' &#247;&#242;&#238; &#231;&#228;&#229;&#241;&#252; &#237;&#224;&#239;&#232;&#241;&#224;&#242;&#252; &#247;&#242;&#238;&#225;&#251; &#239;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#234;&#238;&#237;&#241;&#242;&#224;&#237;&#242;&#251;.
        End If
      Next
     
    End Sub
     

    Всего записей: 170 | Зарегистр. 24-05-2006 | Отправлено: 14:54 22-12-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru