Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Найти и заменить много слов за один раз через VBA
 
Цитата
написал:
With Range("A:A")
   .Replace "@Дрова", "[lumber]", 2
End With
Да, выглядит поопрятнее, спасибо! Правда, теперь я столкнулся с другим недочетом: этот простой код, похоже, что не отрабатывает, если в одной ячейке надо заменить несколько разных слов. Меняет только первое вроде, поэтому надо прогнать макрос 2-3 раза иногда.
Найти и заменить много слов за один раз через VBA
 
Поковырялся еще в интернетах, вот такой вариант в итоге оказался рабочим (без циклов по файлам и перебора листов, просто замена):

Sub MassReplace()
Range("A:A").Replace "@Дрова", "[lumber]", 2
Range("A:A").Replace "@Редкий", "[rare]", 2
Range("A:A").Replace "@2Игрока", "[2players]", 2
Range("A:A").Replace "@1Игрок", "[1player]", 2
Range("A:A").Replace "@БоссТокен", "[elite_token]", 2
Range("A:A").Replace "@Золото", "[gold]", 2
End Sub

Как-то даже чересчур просто оказалось; непонятно, почему на подавляющем количестве других ссылок, по которым я переходил, везде предлагали способ с написанием вариантов прямо на рабочей странице Excel.
Найти и заменить много слов за один раз через VBA
 
Цитата
написал:
Конечно можно, и даже совсем не вдруг.
Попробую что-нибудь из этого соорудить, спасибо! Правда третий пункт (самый важный?) похоже без ссылки, посмотрите, пожалуйста?
Найти и заменить много слов за один раз через VBA
 
Приветствую! У меня есть некий рабочий файл, в котором я хотел бы произвести массовую замену определенных слов на другие. Попробовал поискать готовые решения в интернетах, но они либо подразумевают добавление самих значений в файл (грубо говоря, текст в колонке А, исходные слова под замену в колонке B, а то на что надо заменить слово в колонке C), либо подразумевают, что заменить надо содержание ячейки целиком, а не отдельные в них слова. Эти варианты мне не совсем подходят, так как у меня около 100 файлов и добавлять в каждый новые колонки, а потом их удалять займет, по ощущениеям, больше времени, чем если сделать замену вручную.

Поэтому хотел уточнить, реально ли массовую замену слов запихнуть полностью в VBA, включая все исходные слова, а также то на что их надо заменить. Таких слов может быть от 30 до 50, я их готов все вручную прописать, не проблема. Если реально, получится помочь с примером самого кода, пожалуйста?

Не уверен, что словами объяснил нормально, поэтому приложу файл пример. Мне нужно поменять следующее:

@Дрова ==> [lumber]
@Редкий ==> [rare]
@2Игрока ==> [2players]
@1Игрок ==> [1player]
@БоссТокен ==> [elite_token]
@Золото ==> [gold]

В реальном рабочем файле текст, где потребуется замена, может быть в колонках А и B. По сути мне нужно заменить одни технические теги (@Текст) на другие ([text]); эти теги потом будут преобразованы в графические иконки. Понимаю, что это можно сделать ручками через тот же CTRL+H, просто файлов будет около 100, а самих технических тегов от 30 до 50, вдруг через макрос можно это дело сделать оперативнее.

Спасибо!
Изменено: Yopt - 02.08.2024 13:58:34
Замена HTML тегов на реальное форматирование (жирный, курсив)
 
Цитата
написал:
Вот такой "кентаврик" получился.
Приветствую! И спасибо! Правда, что-то Excel ругается на синтаксис в строке с http адресом, не могу сообразить чего не хватает или что лишнее.

UPD: Не сообразил скачать ваш файл и взять код оттуда, прошу прощения. Попробовал на своем рабочем файле, вроде все в полном порядке, спасибо большое!
Изменено: Yopt - 31.07.2024 19:10:48
Замена HTML тегов на реальное форматирование (жирный, курсив)
 
Цитата
написал:
Длина текста в ячейке не должна быть больше 255 символов.
У меня таких ячеек в работе, к сожалению, немало; согласен, что это не редактор, но именно табличный формат используется для переводов на другие языки в профессиональной среде. Удалить вручную не составляет труда, поэтому главное формат, остальное подчищу. Еще раз спасибо!
Замена HTML тегов на реальное форматирование (жирный, курсив)
 
Цитата
написал:
ПроверяйтеП.С. Посимвольный перебор текста в ячейке - долгая операция. При большом количестве изменяемых ячеек и длинном тексте в них, будьте готовы подождать окончания работы макроса. Может быть долго подождать)
Большое, спасибо! Первый вариант, работает, правда, иногда не удаляются теги курсива. Кажется, это происходит в случае, если вся ячейка должна быть курсивом, то есть <i> стоит в самом начале ячейки, а </i> в самом конце. При этом форматирование применяется корректно - текст становится курсивом, только не удаляются теги. Думаю, смогу их руками если что почистить.

UPD: Возможно дело не в положении тегов, быть может в объеме слов? Пока не могу сообразить. Я чуть дополнил ваш файл с примером, одно из предложений на кириллице переделал - поставил <i> в самом начале, </i> в самом конце, вроде все работает. Но добавил фразу подлиннее в самый конец списка и вот там теги не удаляются, хотя форматирование применяется корректно. Сам файл приложу.

Цитата
написал:
И еще для коллекции. Выделяем прямоугольный диапазон ячеек и запускаем макрос.
Спасибо! Но этот вариант, кажется, не работает: все теги пропадают, но форматирования в жирный и курсив не происходит.
Изменено: Yopt - 28.07.2024 21:39:20
Замена HTML тегов на реальное форматирование (жирный, курсив)
 
Приветствую! У меня есть пример текста следующего формата:

Здесь будет <b>важная</b> информация, которую <i>было бы неплохо</i> вынести в <b>отдельный</b> документ.

Я бы хотел с помощью макроса осуществить следующие действия:

- отформатировать все что внутри тегов <b>...</b> жирным
- удалить сами теги <b> и </b>
- отформатировать все что внтури тегов <i>...</i> курсивом
- удалить сами теги <i> и </i>
- применить макрос ко всему столбцу

То есть чтобы получилось вот так:

Здесь будет важная информация, которую было бы неплохо вынести в отдельный документ.

Покопавшись в интернетах, я нашел следующий код:

Sub BoldTags()
Dim X As Long, BoldOn As Boolean
BoldOn = False 'Default from start of cell is not to bold
For X = 1 To Len(ActiveCell.Text)
   If UCase(Mid(ActiveCell.Text, X, 3)) = "<B>" Then
       BoldOn = True
       ActiveCell.Characters(X, 3).Delete
   End If
   If UCase(Mid(ActiveCell.Text, X, 4)) = "</B>" Then
       BoldOn = False
       ActiveCell.Characters(X, 4).Delete
   End If
   ActiveCell.Characters(X, 1).Font.Bold = BoldOn
Next
End Sub

И он работает, но только в одной ячейке (у меня целый столбец текстов). Мои познания в VBA минимальны насколько это возможно, поэтому хотел узнать, будет ли возможность помочь доработать этот макрос (или быть может предложить что-то совсем другое), чтобы он работал на всю колонку. И можно ли сразу сделать так, чтобы один макрос преобразовывал и жирный, и курсив? В теории, наверное, можно было бы сделать два отдельных макроса и, насколько я понимаю, заменить BoldOn и прочие выражения на ItalicOn, но вдруг это можно все одной кнопкой прогнать.

Спасибо!
Фильтрация значения из нескольких столбцов одновременно
 
Всем большое спасибо, принцип работы у формул практически одинаковый, попробую все, чтобы потренироваться  :)  
Фильтрация значения из нескольких столбцов одновременно
 
Цитата
Сергей написал:
=ЕСЛИ(ИЛИ(СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК(СИМВОЛ(СТРОКА($224:$255));B2)));СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК(СИМВОЛ(СТРОКА($224:$255));C2))));"ЁЁЁЁЁ";"")
Сергей, полагаю вы как раз реализовали ваше предложение по дополнительному столбцу; странно, конечно, что Excel не умеет сам "умно" фильтровать, вроде бы обычное дело. Но в любом случае это решает мою задачу, большое спасибо!
Фильтрация значения из нескольких столбцов одновременно
 
Прикрепляю файл-пример, в столбце B красным выделены строки 8 и 9, а в столбце C красным выделены 13, 14 и 15. Можно ли отфильтровать эти столбцы таким образом, чтобы в итоге остались все строки с красными выделениями - 8, 9, 13, 14 и 15. Если я отфильтрую столбец B по красному тексту, то он скроет строки 13, 14 и 15, если я отфильтрую столбец C по красному тексту, то он скроет строки 8 и 9, а мне нужно чтобы остались они все. Я думал есть какой-то "одновременный" фильтр по одному и тому же условию (красный текст) сразу по всем столбцам.
Фильтрация значения из нескольких столбцов одновременно
 
Здравствуйте,

Сложилось впечатление, что вопрос тривиальный, однако решения пока найти так и не получилось. У меня есть файл с 2 столбцами, который содержит процентов 90 чешского и процентов 10 русского. Мне нужно выделить русский язык, чтобы впоследствии перевести на чешский. Я воспользовался макросом, найденным на этом же форуме, чтобы окрасить весь русский в красный цвет, теперь мне осталось его просто отфильтровать.

Однако проблема в том, что в разных столбцах выделены разные строки, например в столбце А красным выделены строки 1,3 и 5, а в столбце B красным выделены строки 2,4 и 6. Если я фильтрую столбец А, то он не показывает строки в столбце B и, соответственно, наоборот, если фильтрую столбец B. Мне же нужно, чтобы после фильтрации остался красный во всех столбцах; фильтрация стоит на всех столбцах, я пробовал выделять столбцы через CTRL и нажимать на столбцы в разной последовательности, один раз мне показалось, что он отфильтровал корректно, так как показывал и строку 5, и строку 6, решил проверить на другом файле - уже не получилось. Сможете объяснить корректную последовательность действий, пожалуйста? Или так отфильтровать не получится в принципе?
Применение макроса ко всем листам в книге
 
Цитата
vikttur написал: Ничего не смущает?
Нет, по той простой причине, что очень мало понимаю в составлении макросов для Excel, поэтому обычно ищу варианты на форумах; как правило что-то похожее уже требовалось другим пользователям, поэтому можно подсмотреть.

Ваш код сработал просто как часы, это сэкономит очень много времени, спасибо огромное!
Применение макроса ко всем листам в книге
 
Здравствуйте, мне довольно часто приходится работать с Книгами, содержащими по 100+ листов. На каждом листе скрыты разные столбцы и/или строки и перед финальной отправкой мне нужно отобразить абсолютно все данные, все столбцы и строки. Начинал я вручную: выделить все, правая клавиша, Отобразить. Далее я нашел вот такой простенький макрос, который экономит немного времени:
Код
sub show_all()   
with activesheet.cells   
.entirerow.hidden=false   
.entirecolumn.hidden=false   
end with   
end sub

Однако он работает только на активный лист. Я попробовал поискать методы применения макроса сразу ко всем листам и нашел вот такую конструкцию:
Код
Sub Dosomething()    Dim xSh As Worksheet
   Application.ScreenUpdating = False
   For Each xSh In Worksheets
       xSh.Select
       Call RunCode
   Next
   Application.ScreenUpdating = True
End Sub
Sub RunCode()
   'your code here
End Sub

Преобразовал ее в следующее:
Код
Sub Dosomething()    Dim xSh As Worksheet
   Application.ScreenUpdating = False
   For Each xSh In Worksheets
       xSh.Select
       Call RunCode
   Next
   Application.ScreenUpdating = True
End Sub
Sub RunCode()
   sub show_all()   
with activesheet.cells   
.entirerow.hidden=false   
.entirecolumn.hidden=false   
end with   
End Sub

Но она так и не заработала, вызывает ошибку с строке Sub RunCode(). Сможете подсобить с поиском решения, пожалуйста? Может быть есть более простой вариант?
Сообщение о наличии нескольких листов в открываемом excel-файле
 
Здравствуйте!

Сегодня в очередной раз при работе не обратил внимание, что в присланном документе excel было несколько листов, из-за чего пришлось немного сдвинуть сроки работ и тд. Хотел бы спросить, знаете ли вы какой-нибудь макрос или надстройку, или любое другое решение, которое каким-либо образом обозначало общее кол-во листов в документе или било тревогу, если количество листов превышает один, в общем давало мне знать, что в файле есть несколько листов, с которыми надо работать.

Спасибо!
Изменено: Yopt - 29.05.2013 15:07:33
Страницы: 1
Наверх