Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 09:54:54

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Текст с начала строки до спец. символа (или по маске) выделить жирным
Страниц: 1 [2]  Все   Вниз
Печать
Автор Тема: Текст с начала строки до спец. символа (или по маске) выделить жирным  (Прочитано 5860 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Kuzmich
Постоялец
***

Репутация: +27/-0
Офлайн Офлайн

Сообщений: 168


Просмотр профиля
« Ответ #15 : 08.11.2020, 18:17:11 »

Цитировать
...что это значит?
Я предполагал, что у вас в каждой ячейке есть слеш /
Если есть пустые ячейки в диапазоне K2:K1000, то надо сделать проверку и пропускать
такие ячейки
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #16 : 08.11.2020, 18:21:18 »

Да, на пустой яяейке Split растеряется )
Добавьте проверку обхода пустых (или выхода из цикла, если пустые в конце диапазона)
Записан
firestarter
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 26


Просмотр профиля E-mail
« Ответ #17 : 08.11.2020, 20:41:49 »

Действительно, это моя "недоработка"; Ваш скрипт корректно работает в "диапазоне заполненных ячеек".
С одной стороны, в моем случае 1000 - это сильно через край; в среднем количество обрабатываемых ячеек за 1 цикл, варьируется от 150 до 550. Т.е. с 1 строки (K2) и до последней заполненной (K540, например) - слеш / присутствует; а дальше начинаются пустые ячейки.
С другой стороны, чтобы постоянно не править руками этот параметр, имеет смысл оставить ну, хотя бы, 600; в ряде случаев этого будет достаточно. Ну а 1000 - это уж точно "наверняка".
« Последнее редактирование: 08.11.2020, 20:59:43 от firestarter » Записан
Kuzmich
Постоялец
***

Репутация: +27/-0
Офлайн Офлайн

Сообщений: 168


Просмотр профиля
« Ответ #18 : 08.11.2020, 21:22:56 »

Цитировать
чтобы постоянно не править руками этот параметр,
Введите вычисление последней заполненной  строки iLastRow
Код: (vb)
Sub MakeBold_1()
Dim temp As Object
Dim iCell As Range, iPos&
Dim FirstPart As String
Dim FI As Integer
Dim L As Integer
Dim amp As Integer
Dim iLastRow As Long
 With CreateObject("VBScript.RegExp")
   .Global = False
    iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
      Range("A1:A" & iLastRow).Font.Bold = False
    For Each iCell In Range("A1:A" & iLastRow).SpecialCells(xlConstants, xlTextValues)
     If iCell <> "" Then
      .Pattern = "([A-ZА-ЯЁ][a-zа-яё]+)(-| )?([A-ZА-ЯЁ][a-zа-яё]+)?, ?[A-ZА-ЯЁ]\. ?([A-ZА-ЯЁ]\.)?"
        FirstPart = Split(iCell, "/")(0)
      If .test(FirstPart) Then
        Set temp = .Execute(FirstPart)
        FI = temp(0).FirstIndex
        L = temp(0).Length
        iCell.Characters(FI + 1, L - 1).Font.Bold = True
      Else
        .Pattern = "@[А-ЯЁ]"
            iPos = InStr(iCell.Value, "/")
          If .test(FirstPart) Then
            amp = .Execute(FirstPart)(0).FirstIndex
            iCell.Characters(amp + 2, iPos - 3 - amp).Font.Bold = True
          Else
            iCell.Characters(1, iPos - 2).Font.Bold = True
          End If
      End If
     End If
    Next
 End With
End Sub
Записан
firestarter
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 26


Просмотр профиля E-mail
« Ответ #19 : 08.11.2020, 23:59:33 »

Супер! Спасибооо!
Записан
Страниц: 1 [2]  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru