Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.
Range.Replace – это метод, который находит по шаблону подстроку в содержимом ячеек указанного диапазона, заменяет ее на другую подстроку и возвращает значение типа Boolean.
Метод имеет некоторые особенности, которые заключаются в следующем:
- при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
- если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.
Синтаксис и параметры метода
Синтаксис
Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:
variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:
expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]
- variable – переменная (тип данных — Boolean);
- expression – выражение, возвращающее объект Range.
Параметры
Параметр | Описание |
---|---|
What | Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр. |
Replacement | Подстрока, заменяющая искомую подстроку. Обязательный параметр. |
LookAt | Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки: 1 (xlWhole) – поиск полного вхождения искомого текста; 2 (xlPart) – поиск частичного вхождения искомого текста. Необязательный параметр. |
SearchOrder | Задает построчный или постолбцовый поиск: 1 (xlByRows) – построчный поиск; 2 (xlByColumns) – постолбцовый поиск. Необязательный параметр. |
MatchCase | Поиск с учетом или без учета регистра: 0 (False) – поиск без учета регистра; 1 (True) – поиск с учетом регистра. Необязательный параметр. |
MatchByte | Способы сравнения двухбайтовых символов: 0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами; 1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами. Необязательный параметр. |
SearchFormat | Формат поиска. Необязательный параметр. |
ReplaceFormat | Формат замены. Необязательный параметр. |
* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.
Работа метода в VBA Excel
Исходная таблица для всех примеров:
Пример 1
Примеры записи строк кода с методом Range.Replace и поиском по частичному совпадению подстроки с содержимым ячейки:
Sub Primer1() ‘Запись 1: Range(«A1:C6»).Replace «Лиса», «Рысь», 2 ‘Запись 2: Range(«A1:C6»).Replace What:=«Лиса», Replacement:=«Рысь», LookAt:=2 ‘Запись 3: If Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) Then End If ‘Запись 4: Dim a a = Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) End Sub |
Результат выполнения любого из вариантов кода примера 1:
Пример 2
Поиск по шаблону с использованием знаков подстановки и по полному совпадению подстроки с содержимым ячейки:
Sub Primer2() Range(«A1:C6»).Replace «Ли??», «Рысь», 1 End Sub |
Обратите внимание, что слово «Лиса» заменено словом «Рысь» не во всех ячейках. Это произошло из-за того, что мы использовали параметр LookAt:=1 – поиск полного вхождения искомого текста в содержимое ячейки.
Содержание
- Поиск и замена текста или форматирования
- Поиск и выделение текста
- Поиск текста без изменения выделенного фрагмента
- Использование объекта Replacement
- Поддержка и обратная связь
- VBA Excel. Метод Range.Replace (замена текста в ячейках)
- Определение метода Range.Replace
- Синтаксис и параметры метода
- Синтаксис
- Параметры
- Массовая замена слов
Поиск и замена текста или форматирования
Поиск и замена предоставляется объектами Find и Replacement . Объект Find доступен из объектов Selection и Range . Действие поиска немного отличается в зависимости от того, из объекта Selection или Range вы обращаетесь к объекту Find.
Поиск и выделение текста
Если доступ к объекту Find осуществляется из объекта Selection , выделение изменяется при обнаружении условий поиска. В следующем примере выбирается следующее вхождение слова «Hello». Если конец документа достигается до того, как будет найдено слово «Hello», поиск останавливается.
Объект Find содержит свойства, связанные с параметрами в диалоговом окне Поиск и замена . Можно задать отдельные свойства объекта Find или использовать аргументы с методом Execute , как показано в следующем примере.
Поиск текста без изменения выделенного фрагмента
Если доступ к объекту Find осуществляется из объекта Range , выделение не изменяется, но диапазон переопределен при обнаружении условий поиска. В следующем примере показано, как найти первое вхождение слова «blue» в активном документе. Если операция поиска выполнена успешно, диапазон переопределен, а к слову «blue» применяется полужирное форматирование.
В следующем примере выполняется тот же результат, что и в предыдущем примере, используя аргументы метода Execute .
Использование объекта Replacement
Объект Replace представляет критерии замены для операции поиска и замены. Свойства и методы объекта Replace соответствуют параметрам в диалоговом окне Найти и заменить (меню Правка ).
Объект Replacement доступен в объекте Find . В следующем примере все вхождения слова «hi» заменяются на «hello». Выделение изменяется при обнаружении условий поиска, так как доступ к объекту Find осуществляется из объекта Selection .
В следующем примере в активном документе удаляется полужирное форматирование. Свойство Bold имеет значение True для объекта Find и False для объекта Replacement . Чтобы найти и заменить форматирование, задайте для текста для поиска и замены пустые строки («»), а для аргумента Format метода Execute задайте значение True. Выбор остается неизменным, так как доступ к объекту Find осуществляется из объекта Range (свойство Content возвращает объект Range ).
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Метод Range.Replace (замена текста в ячейках)
Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.
Определение метода Range.Replace
Метод имеет некоторые особенности, которые заключаются в следующем:
- при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
- если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.
Синтаксис и параметры метода
Синтаксис
Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:
variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:
expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]
- variable – переменная (тип данных — Boolean);
- expression – выражение, возвращающее объект Range.
Параметры
Параметр | Описание |
---|---|
What | Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр. |
Replacement | Подстрока, заменяющая искомую подстроку. Обязательный параметр. |
LookAt | Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки: 1 (xlWhole) – поиск полного вхождения искомого текста; 2 (xlPart) – поиск частичного вхождения искомого текста. Необязательный параметр. |
SearchOrder | Задает построчный или постолбцовый поиск: 1 (xlByRows) – построчный поиск; 2 (xlByColumns) – постолбцовый поиск. Необязательный параметр. |
MatchCase | Поиск с учетом или без учета регистра: 0 (False) – поиск без учета регистра; 1 (True) – поиск с учетом регистра. Необязательный параметр. |
MatchByte | Способы сравнения двухбайтовых символов: 0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами; 1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами. Необязательный параметр. |
SearchFormat | Формат поиска. Необязательный параметр. |
ReplaceFormat | Формат замены. Необязательный параметр. |
* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.
Источник
Массовая замена слов
Предположим, что нам необходимо заменить все «ул.» на листе на «улица «. Или русское слово «дом» на английское «house». Или еще интереснее: все английские буквы на русские. Например, английская «а» должна быть заменена на русскую «a», английская «c» на русскую «с», английская «H» на русскую «Н» и т.д. А такое тоже нередко бывает и доставляет проблемы. Ведь если в одной таблице будут русские буквы, а в другой английские — то применение большинства встроенных функций поиска(та же ВПР) просто не найдут соответствия.
Если подобную замену надо сделать для одного сочетания, то все просто: жмем Ctrl+H и указываем что заменить и на что. Но если таких замен надо сделать 20? Или 120? Это надо будет 120 раз нажать и ввести что заменять и на что. А если это надо сделать еще и не в одном документе — то. Думаю сами справитесь с умножением количества замен на количество файлов, в которых это надо сделать. И вроде бы простая операция превращается в ваш личный ад на работе.
Недавно на форуме участнику потребовалось автоматизировать именно такую штуку. Т.к. код несложный — решил написать и чуть дополнив выложить для всех кому код может потребоваться:
Option Explicit Sub Replace_Mass() Dim s As String Dim lCol As Long Dim avArr, lr As Long Dim lLastR As Long Dim lToFindCol As Long, lToReplaceCol As Long, lLookAt As Long ‘запрашиваем направление перевода — с русского на англ. или наоборот lCol = Val(InputBox(«Укажите направление перевода:» & vbNewLine & _ » 1 — ru-en» & vbNewLine & _ » 2 — en-ru», «Запрос», 1)) If lCol = 0 Then Exit Sub ‘запрашиваем по части ячейки искать или по всему тексту ‘по умолчанию — по части lLookAt = Val(InputBox(«Искать соответствие по части ячейки или по всему тексту:» & vbNewLine & _ » 1 — по всему тексту» & vbNewLine & _ » 2 — по части ячейки», «Запрос», 2)) If lLookAt = 0 Then Exit Sub Select Case lCol Case 1 lToFindCol = 1 lToReplaceCol = 2 Case 2 lToFindCol = 2 lToReplaceCol = 1 End Select Application.ScreenUpdating = 0 ‘Получаем с листа Соответствия значения, которые надо заменить в выделенном диапазоне With ThisWorkbook.Sheets(«Соответствия») lLastR = .Cells(.Rows.Count, 1).End(xlUp).Row avArr = .Cells(1, 1).Resize(lLastR, 2) End With ‘заменяем For lr = 1 To UBound(avArr, 1) s = avArr(lr, lToFindCol) If Len(s) Then ‘если значение для замены не пустое Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt End If Next lr Application.ScreenUpdating = 1 End Sub
Как это работает. В книге есть специальный лист с именем «Соответствия». На нем в столбце А записаны слова, которые необходимо заменить, а в столбце В — на что эти слова заменить. Если в столбце А пусто — то замена не будет произведена. Если в столбце В пусто — то значение из столбца А будет просто удалено.
Замены производятся исключительно в выделенных на листе ячейках. Ячейки могут быть несмежными.
Итак, необходимо сделать много замен. Скачиваете файл:
Массовая замена слов (54,5 KiB, 9 744 скачиваний)
Примечание: Я сделал файл как переводчик. Т.е. в первом столбце русские слова, во втором английские. Но в столбцах может быть что угодно — хоть слова, хоть символы, хоть числа.
На лист «Соответствия» записываете в столбец А — что заменять, в столбец В — на что заменять. Переходите на лист книги, в котором необходимо произвести замену. Выделяете ячейки, значения в которых надо найти и заменить. После чего жмете Alt+F8 и выбираете макрос «Tips_Macro_ReplaceMASS.xls!Replace_Mass»(или просто «Replace_Mass», если код в той же книге, что и ячейки для поиска и замены).
Первым появится окно с запросом направления перевода. По умолчанию 1(ru-en). Т.е. будет браться слово из столбца А и заменяться словом из столбца В. Но если указать 2 — то будет браться слово из столбца В и заменяться словом из столбца А. Т.е. аналог переводчика — с рус. на англ. и наоборот. Либо из А в В, либо из В в А.
Вторым появится запрос на метод просмотра данных:
- если указать «1 — по всему тексту» — данные из столбца А будут заменять только в том случае, если ячейка в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Соответствия». Например, в любой из выделенных ячеек записано «На столе книга», а на листе «Соответствия» в столбце А есть только слово «книга». Замена не будет произведена, т.к. необходимо, чтобы в столбце А было так же «На столе книга».
- если указать «2 — по части ячейки» — данные из столбца А будут заменять в случае, если ячейка в выделенном для замены диапазоне содержит любое слово из столбца А листа «Соответствия». На том же примере — «На столе книга». Если выбрать 2, то в тексте «На столе книга» слово книга будет заменено на слово из столбца В — «book».
И еще один практический пример чуть модифицированного кода. Предположим, имеется таблица выручки по реализации продукции:
Как видно, здесь присутствую только номера статей, но нет их расшифровки. Зато расшифровка есть в отдельном листе «Справочник»:
Как видно, в справочнике присутствуют нужные номера статей и можно было бы применить ту же ВПР(VLOOKUP) для замен. Если бы не одно но: в таблице по реализации помимо номеров статьей есть еще лишний текст «Статья затрат:». Конечно, можно сначала заменить этот текст, потом в отдельном столбце применить ВПР, заменить формулу значениями и вернуть в исходный столбец. Если при этом надо еще оставить текст «Статья затрат:», то надо будет сделать еще доп.манипуляции либо при составлении формулы, либо после. В любом случае — слишком много лишних телодвижений. А значит бОльшие времязатраты.
Приложенный ниже файл поможет сделать это в разы быстрее:
Скачать файл с примером и кодом:
Массовая замена слов — статьи.xls (91,5 KiB, 2 627 скачиваний)
и в итоге за пару секунд получим следующий результат:
Достаточно выделить столбец со статьями на листе с реализацией и запустить код(либо нажатием кнопки заменить значения, либо нажав Alt+F8 и выбрав из списка макросов макрос Replace_Mass ).
После нажатия на кнопку будут запрошены следующие параметры:
- указать номер столбца значений в листе «Справочник», в котором искать соответствия номерам статей(в нашем случае это столбец 1(А))
- указать номер столбца, значениями которого заменять найденные в таблице реализации значения(это может быть один из трех столбцов справочника: Группа затрат, Статья затрат, Подстатьи затрат). Логичнее всего указать столбец 4, т.к. он наиболее детализирован и конкретнее указывает расшифровку статьи
- далее будет предложено указать точность поиска:
- если указать » 1 — по всему тексту » — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Справочник». Т.е. если бы у нас в таблице реализации был бы записан только номер статьи(1.01), тогда можно было бы указать именно 1
- если указать » 2 — по части ячейки » — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне содержит любое значение из столбца А листа «Справочник». Это больше подходит к описанному случаю, т.к. нам необходимо заменить исключительно номер статьей на их расшифровку, оставив при этом текст «Статья затрат: «
Если все указано корректно, то на листе будут произведены все необходимые замены.
Возможные ошибки, которые предусмотрены кодом и о которых будет сообщено соответствующим сообщением(код прервется, замены не будут произведены):
- на листе Справочник нет значений
- в качестве столбца для поиска значений и для замены значений на листе Справочник указано одно и то же число
- в качестве столбца значений для замены указано число, превышающее общее количество столбцов на листе Справочник
Особое внимание хочу уделить случаю, когда выбирается замена по части ячейки. В этом случае лучше список на листе Справочник отсортировать по длине текста по тому столбцу, в котором будут значения для поиска. Зачем это надо: т.к. значение по части ячейки будет заменять не полное соответствие, то есть вероятность неверных замен. Например, есть текст «Статья затрат: 1.011» . В то же время на листе Справочник есть статьи «1.01» и «1.011» . Т.к. «1.01» идет раньше в большинстве случаев, то текст будет заменен некорректно: «Статья затрат: ТВ 1 » .
Чтобы получить длину строки текста можно использовать функцию ДЛСТР(LEN):
=ДЛСТР( A2 )
=LEN(A2)
В отличие от кода, приведенного в начале статьи, код во втором файле позволяет производить замену не только на основании двух столбцов, но и ориентируясь на таблицу данных, как видно из реализации. Можно выбрать любой столбец Справочника для поиска значений и так же любой для замены, что предоставляет большую гибкость по замене значений.
Статья помогла? Поделись ссылкой с друзьями!
Источник
jfd Пользователь Сообщений: 302 |
Добрый день! |
ber$erk Пользователь Сообщений: 2735 |
#2 11.03.2013 16:33:55
Так не подойдет? Учимся сами и помогаем другим… |
||
jfd Пользователь Сообщений: 302 |
#3 11.03.2013 16:38:27 ber$erk, я предполагал что-то типа вот такого
только вместо * что-либо указывающее на число, а не на любое значение. Изменено: jfd — 11.03.2013 16:41:51 |
||
Kuzmich Пользователь Сообщений: 7998 |
А если так попробовать Range(Cells(4, 5), Cells(LastRow, LastClm)).SpecialCells(xlCellTypeConstants, xlNumbers).Replace |
jfd Пользователь Сообщений: 302 |
Kuzmich, спасибо, работает |
Kuzmich Пользователь Сообщений: 7998 |
#6 11.03.2013 19:19:20
Не любую, а только с цифрами |
||
jfd Пользователь Сообщений: 302 |
Kuzmich, не сочтите за занудство, если можно поподробнее? |
RAN Пользователь Сообщений: 7091 |
Замените Replace на Select, и подглядите, что выделится. |
jfd Пользователь Сообщений: 302 |
RAN, ну да, как я и думал |
ZVI Пользователь Сообщений: 4328 |
Вопросы к jfd: Приведите несколько примеров того, что было и что должно получиться с заменой на символ подчеркивания. Изменено: ZVI — 12.03.2013 11:18:42 |
Kuzmich Пользователь Сообщений: 7998 |
#11 12.03.2013 11:45:24
Range(Cells(4, 5), Cells(LastRow, LastClm)).SpecialCells(xlCellTypeConstants, xlTextValues).Replace |
||
jfd Пользователь Сообщений: 302 |
#12 12.03.2013 18:17:32 ZVI,
Чтобы было проще. Есть файл выгруженный из 1С, в нем диапазон ячеек часть из которых содержит «х», а часть цифры. 1С выгружает цифры как текст. Мне надо заменить цифры на «х», можно тупо заменить все значения на «х», но не интересно.
Любое число в ячейке надо заменить на «х». Если заменять каждую цифру в ячейке надо использовать символ подстановки «?»
Поскольку перед заменой преобразовываю в числовой формат и меняю «,» на «.», с числами проблем нет. А как заменить цифры на «х» в случае ХАХА123.45 используя только Replace не нашел.
Первый приложенный файл то что было, второй что стало. Первого нет. Удален. Общий размер более 100 кБ [МОДЕРАТОР] Прикрепленные файлы
Изменено: jfd — 13.03.2013 22:30:58 |
||||||||
RAN Пользователь Сообщений: 7091 |
#13 12.03.2013 19:44:20 Для было/стало
|
||
ZVI Пользователь Сообщений: 4328 |
#14 13.03.2013 09:09:19 Вот такой макрос обработает лист выгрузки, заменив все текстовые фрагменты типа 12.34 или 56,78 или 9 на символ замены «X»:
Изменено: ZVI — 13.03.2013 09:11:22 |
||
jfd Пользователь Сообщений: 302 |
#15 13.03.2013 10:57:24 ZVI, Спасибо за пример.Я так и думал что без регулярных выражений не обойтись.
|
||
ZVI Пользователь Сообщений: 4328 |
#16 13.03.2013 16:10:41
Для Вашего файла выгрузки указанный фрагмент кода можно заменить на упрощенный:
Ну, а в том фрагменте такая же строка замены выглядит так: Кроме того, я на всякий случай там обработал и ситуацию, когда в выгрузке или в результате каких-то дополнительных манипуляций появятся ячейки с числовыми типами данных. Case 2 To 6 означает с 2 по 6 и равносильно Case vbInteger To vbCurrency , это охватывает все типы числовых данных (см. справку по VarType). При этом даты, которые, по сути, тоже числовые, пропускаются, так как vbDate = 7 , что не попадает в интервал с 2 по 6. Изменено: ZVI — 13.03.2013 16:12:36 |
||||
jfd Пользователь Сообщений: 302 |
#17 13.03.2013 22:27:52 ZVI, Спасибо за пояснения |
Обнаружил что программа при выгрузке данных в данных столбцах всегда добавляет в конец числа
5 пробелов. т.е. «222.0000000000000 «
пока заменил пробелы тоже на пустоту, но к сожалению результата нет.
Может кому что придет в голову как проблему решить. В ручную не хочеться преобразовывать тем более что данные операции с файлом(не считаю других операций) производятся каждый день, и обрабатывается не один файл.
Все решил проблему
Все дело в пробелах и опции формата вставки её вообще убрал и все заработало.
Тест прошел и заработал правильно на коде:
‘Selection.Replace What:=».0000000000000 «, Replacement:=»,», LookAt:=xlPart, _
‘ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True
‘Selection.Replace What:=».00000000000000 «, Replacement:=»,», LookAt:=xlPart, _
‘ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True
Итоговый код:
Selection.Replace What:=» «, Replacement:=»», LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True
Selection.Replace What:=».», Replacement:=»,», LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True
Вся трабла была в 5 пробелах, и вот этих опциях SearchFormat:=False, ReplaceFormat:=False
Если их убить то все работает на ура… возможно даже и с пробелами ) щас проверю….
Не дело именно в 2х вещах совместно
Все всем спасибо… )))) Все решил.. Если у кого есть еще вариант решения данной проблеммы с удовольствием посмотрю. Пишите ЛС.
Пополняемый список полезных отрывков кода VBA для выполнения часто востребованных действий в MS Excel.
'Отключение отображения выполняемых действий Application.ScreenUpdating = False 'Предотвращение появления предупреждающих сообщений Application.DisplayAlerts = False 'Предотвращение появления предупреждения об обновлении связей данных Application.AskToUpdateLinks = False 'Очистка буфера обмена Application.CutCopyMode = False
Чтобы проверить, какой пользователь открыл книгу Excel можно использовать один из следующих вариантов:
If Application.UserName = "Имя_автора_документа" Then ...
If Environ("username") = "user" Then ...
Set myWSheet = ThisWorkbook.Sheets("Имя_листа") With myWSheet 'Определение индекса последней строки таблицы lastRow = .Cells(Rows.Count, 1).End(xlUp).Row 'Определение значения в ячейки последней строке столбца A lastARow = .Range("A" & lastRow).Value End With
Selection.Value = Selection.Value
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "Имя_листа"
LastMonthDay = DateAdd("d", -1, DateSerial(Year(dtDate), Month(dtDate), 1))
dToEndOfMonth = DateDiff("d", dFrom, DateAdd("d", -1, _ DateSerial(Year(dFrom), Month(dFrom) + 1, 1)))
DayOfWeek = DatePart("w", dToday)
pathNewBook = "C:Temp" nameNewBook = "Имя_нового_файла.xls" Workbooks.Add ActiveWorkbook.SaveAs Filename:=pathNewBook & nameNewBook ActiveWorkbook.Close True
Чтобы при сохранении файла в формате CSV, вместо запятых в качестве разделителя использовалась точка с запятой, следует использовать подобный код:
ActiveWorkbook.SaveAs FileName:="Name.csv", FileFormat:=xlCSV, _ CreateBackup:=False, Local:=True ActiveWorkbook.Saved = True ActiveWorkbook.Close True
wbPath = "C:Temp" wbName = "Имя_файла_откуда_копируем.xls" Workbooks.Open (wbPath & wbName) Set WB = Workbooks(wbName) WB.Sheets("Лист 1").Range("A1:С10").Copy Sheet("Лист_в_текущем_файле").Range("A2").PasteSpecial xlPasteValues
Workbooks.Open (Filename:=wbPath & wbName, ReadOnly:=True)
Set DateRowObj = WB.Sheets("Имя_листа").Range("A:A")._ Find(What:=dtToAsDate, LookIn:=xlFormulas) If (DateRowObj Is Nothing) Then WB.Close False MsgBox "Данные не найдены." Else DateRow = DateRowObj.Row 'Номер строки с искомым значением End If
Как получить имя активной книги Excel без его расширения (без .xls либо без .xlsx):
wbName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
fPath = "C:Temp" fName = "Файл.txt" If Dir(fPath & fName) = "" Then MsgBox "Файл не найден:" & Chr(13) & fPath & fName Exit Sub End If
Private Sub tbVid_Click() Application.ScreenUpdating = False If tbVid Then tbVid.Caption = "Скрыть" ActiveSheet.Rows("2:29").Hidden = False Else tbVid.Caption = "Развернуть" ActiveSheet.Rows("2:29").Hidden = True End If End Sub
currPath = ThisWorkbook.Path currWBName = ThisWorkbook.Name ListName.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=currPath & "[" & _ currWBName & "]Лист1!R1C1:R10C5")
VK.Frame1.Controls("rBtn1")
Selection.Replace What:="#DIV/0!", Replacement:="", LookAt:=xlPart,_ SearchOrder:=xlByRows, MatchCase:=False,_ SearchFormat:=False, ReplaceFormat:=False
Sheet1.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows.Count
Selection.Value = Application.Trim(Selection.Value)
Sheet1.Unprotect ('password')
ThisWorkbook.Sheets(1).Range("A1:A10") = _ ThisWorkbook.Sheets(1).Evaluate("A1:A10" & "*80")
ThisWorkbook.Range("A1:A10").Value = _ Evaluate("=""" & addTxt & """ & " & ThisWorkbook.Range("A1:A10").Address)
Col = Selection.Column 'Номер выбранного столбца ColMax = ActiveSheet.PivotTables("СводнаяТаблица").PivotColumnAxis. _ PivotLines.Count If Col - 1 <= ColMax And Col 1 Then ActiveSheet.PivotTables("СводнаяТаблица").PivotFields("Label").AutoSort _ xlDescending, " ", ActiveSheet.PivotTables("СводнаяТаблица"). _ PivotColumnAxis.PivotLines(Col - 1), 1 End If
'Счётчик, ставится в начале процедуры StartUpdDate = Now 'Сообщение, выводится в конце процедуры MsgBox "Данные обновлены за " & Fix(1440 * (Now – StartUpdDate)) & " мин. " & 86400 * (Now – StartUpdDate) Mod 60 & " сек."
Function Translit(Txt As String) As String Txt = Txt Rus = Array("ий", "ый", "ъе", "ъя", "ъю", _ "ъё", "ье", "ья", "ью", "ьё", "а", "б", "в", "г", _ "д", "е", "ё", "ж", "з", "и", "й", "к", "л", _ "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", _ "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", _ "ИЙ", "ЫЙ", "ЪЕ", "ЪЯ", "ЪЮ", _ "ЪЁ", "ЬЕ", "ЬЯ", "ЬЮ", "ЬЁ", "А", "Б", "В", "Г", _ "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", _ "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", _ "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", _ " ", "_", "?", _ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", _ "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "«", "»") Eng = Array("y", "y", "ye", "ya", "yu", _ "yo", "ye", "ya", "yu", "yo", "a", "b", "v", "g", _ "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", _ "n", "o", "p", "r", "s", "t", "u", "f", "h", "ts", _ "ch", "sh", "sch", "", "y", "", "eh", "u", "ya", _ "Y", "Y", "Ye", "Ya", "Yu", _ "Yo", "Ye", "Ya", "Yu", "Yo", "A", "B", "V", "G", _ "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", _ "N", "O", "P", "R", "S", "T", "U", "F", "H", "Ts", _ "Ch", "Sh", "Sch", "", "Y", "", "Eh", "U", "Ya", _ " ", "_", "?", _ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", _ "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "", "") For i = 1 To Len(Txt) с = Mid(Txt, i, 1) flag = 0 For J = 0 To 116 If Rus(J) = с Then outchr = Eng(J) flag = 1 Exit For End If Next J If flag Then outstr = outstr & outchr Else outstr = outstr & с Next i Translit = outstr End Function
Dim strDirPath, strMaskSearch, strFileName as String strDirPath = "C:/test/" 'Папка поиска strMaskSearch = "*.xls*" 'Маска поиска 'Получаем первый файл соответствующий шаблону strFileName = Dir(strDirPath & strMaskSearch) Do While strFileName <> "" 'До тех пор пока файлы "не закончатся" MsgBox strFileName strFileName = Dir 'Следующий файл Loop