Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Замена латинских букв на заглавные - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Замена латинских букв на заглавные (Макросы/Sub)
Замена латинских букв на заглавные
21Tuz Дата: Пятница, 16.10.2015, 01:52 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер! Интересует макрос в 2 столбика (и множеством строк - прайс):

Пример:

в первом столбике пишем:
Adidas Кроссовки модель Basic
Nike Футболка fit-225

во втором столбике (на выходе) должно быть:
ADIDAS Кроссовки модель BASIC
NIKE Футболка FIT-225

___________
т.е. русский язык оставляем как есть, а все латинские буквы (или слова... как угодно) меняем на заглавные.
Заранее спасибо!

p.s. давно находил данный макрос на просторах.. простейший по сути, тем более для Вас :)
 
Ответить
СообщениеДобрый вечер! Интересует макрос в 2 столбика (и множеством строк - прайс):

Пример:

в первом столбике пишем:
Adidas Кроссовки модель Basic
Nike Футболка fit-225

во втором столбике (на выходе) должно быть:
ADIDAS Кроссовки модель BASIC
NIKE Футболка FIT-225

___________
т.е. русский язык оставляем как есть, а все латинские буквы (или слова... как угодно) меняем на заглавные.
Заранее спасибо!

p.s. давно находил данный макрос на просторах.. простейший по сути, тем более для Вас :)

Автор - 21Tuz
Дата добавления - 16.10.2015 в 01:52
buchlotnik Дата: Пятница, 16.10.2015, 03:15 | Сообщение № 2
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
явно можно оптимальнее, а в лоб так: [vba]
Код
Function up_eng(a As Range) As String
    Application.Volatile
    Dim i%, j%, s$
    s = a
    For i = 1 To Len(s)
        j = Asc(Mid(s, i, 1))
        If j > 96 And j < 123 Then Mid(s, i, 1) = Chr(j - 32)
    Next i
    up_eng = s
End Function

[/vba]
К сообщению приложен файл: 123-1-.xlsm (14.8 Kb)


Сообщение отредактировал buchlotnik - Пятница, 16.10.2015, 03:34
 
Ответить
Сообщениеявно можно оптимальнее, а в лоб так: [vba]
Код
Function up_eng(a As Range) As String
    Application.Volatile
    Dim i%, j%, s$
    s = a
    For i = 1 To Len(s)
        j = Asc(Mid(s, i, 1))
        If j > 96 And j < 123 Then Mid(s, i, 1) = Chr(j - 32)
    Next i
    up_eng = s
End Function

[/vba]

Автор - buchlotnik
Дата добавления - 16.10.2015 в 03:15
sv2014 Дата: Пятница, 16.10.2015, 12:19 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
21Tuz, добрый день,еще вариант

[vba]
Код
Function zz$(t1$)
    Dim t2$, s$,i&
With CreateObject("VBScript.regExp")
  .Pattern = "\b[a-z]{3}\-[0-9]{3}\b"
   If .test(t1) Then
     t2 = .Execute(t1)(0)
    For i = 1 To Len(t2): s = s & UCase(Mid(t2, i, 1)):   Next
     s = Replace(s, Chr(32), "-")
   Else
    zz = t1
   End If
     zz = Left(t1, Len(t1) - Len(t2)) & s
End With
End Function
[/vba]
К сообщению приложен файл: example_17_10_2.xls (40.5 Kb)
 
Ответить
Сообщение21Tuz, добрый день,еще вариант

[vba]
Код
Function zz$(t1$)
    Dim t2$, s$,i&
With CreateObject("VBScript.regExp")
  .Pattern = "\b[a-z]{3}\-[0-9]{3}\b"
   If .test(t1) Then
     t2 = .Execute(t1)(0)
    For i = 1 To Len(t2): s = s & UCase(Mid(t2, i, 1)):   Next
     s = Replace(s, Chr(32), "-")
   Else
    zz = t1
   End If
     zz = Left(t1, Len(t1) - Len(t2)) & s
End With
End Function
[/vba]

Автор - sv2014
Дата добавления - 16.10.2015 в 12:19
МВТ Дата: Пятница, 16.10.2015, 12:50 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Как-то так[vba]
Код
Function TT(text As String) As String
Dim arr: arr = Split(text)
Dim i As Long
With CreateObject("VBScript.Regexp")
    .Ignorecase = True
    .Pattern = "[^A-Z\-\.,\d]"
    For i = 0 To UBound(arr)
        If Not .test(arr(i)) Then arr(i) = UCase(arr(i))
    Next
    TT = Join(arr)
End With
End Function
[/vba]
 
Ответить
СообщениеКак-то так[vba]
Код
Function TT(text As String) As String
Dim arr: arr = Split(text)
Dim i As Long
With CreateObject("VBScript.Regexp")
    .Ignorecase = True
    .Pattern = "[^A-Z\-\.,\d]"
    For i = 0 To UBound(arr)
        If Not .test(arr(i)) Then arr(i) = UCase(arr(i))
    Next
    TT = Join(arr)
End With
End Function
[/vba]

Автор - МВТ
Дата добавления - 16.10.2015 в 12:50
SLAVICK Дата: Пятница, 16.10.2015, 14:25 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Можно еще так: :D
[vba]
Код
Function up(s$) As String
    Dim i%
    Application.Volatile
    For i = 97 To 122: s = Replace(s, Chr(i), Chr(i - 32)): Next i
    up = s
End Function
[/vba]
К сообщению приложен файл: 123-1-2-.xlsm (13.9 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеМожно еще так: :D
[vba]
Код
Function up(s$) As String
    Dim i%
    Application.Volatile
    For i = 97 To 122: s = Replace(s, Chr(i), Chr(i - 32)): Next i
    up = s
End Function
[/vba]

Автор - SLAVICK
Дата добавления - 16.10.2015 в 14:25
sv2014 Дата: Пятница, 16.10.2015, 14:38 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
21Tuz, добрый день еще вариант функции,
уважаемый MBT, Ваш вариант переводит все слово Basic в верхний регистр,что не сответствует файл примеру создателя темы,
(смотрите файл пример )

[vba]
Код
Function bb$(t1)
  Dim i&, t2$, s$, m&
  For i = Len(t1) To 1 Step -1
    If Mid(t1, i, 1) Like "[a-z]" Then
      m = m + 1
    If Mid(t1, i, 1) Like "[a-z]" And m = 3 Then t2 = Mid(t1, i, 3): Exit For
    Else
      bb = t1
    End If
  Next
   For i = 1 To Len(t2): s = s & UCase(Mid(t2, i, 1)):  Next
    bb = Replace(t1, t2, s)
End Function
[/vba]
К сообщению приложен файл: 2332925.xls (42.5 Kb)
 
Ответить
Сообщение21Tuz, добрый день еще вариант функции,
уважаемый MBT, Ваш вариант переводит все слово Basic в верхний регистр,что не сответствует файл примеру создателя темы,
(смотрите файл пример )

[vba]
Код
Function bb$(t1)
  Dim i&, t2$, s$, m&
  For i = Len(t1) To 1 Step -1
    If Mid(t1, i, 1) Like "[a-z]" Then
      m = m + 1
    If Mid(t1, i, 1) Like "[a-z]" And m = 3 Then t2 = Mid(t1, i, 3): Exit For
    Else
      bb = t1
    End If
  Next
   For i = 1 To Len(t2): s = s & UCase(Mid(t2, i, 1)):  Next
    bb = Replace(t1, t2, s)
End Function
[/vba]

Автор - sv2014
Дата добавления - 16.10.2015 в 14:38
sv2014 Дата: Пятница, 16.10.2015, 14:50 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
21Tuz, добавлю,что вариант функции up переводит слово Basic целиком в верхний регистр,(приложенный файл,)что не соответствует файл примеру создателя темы.
С уважением ко всем участникам обсуждения.
К сообщению приложен файл: 9845094.xls (40.5 Kb)
 
Ответить
Сообщение21Tuz, добавлю,что вариант функции up переводит слово Basic целиком в верхний регистр,(приложенный файл,)что не соответствует файл примеру создателя темы.
С уважением ко всем участникам обсуждения.

Автор - sv2014
Дата добавления - 16.10.2015 в 14:50
SLAVICK Дата: Пятница, 16.10.2015, 14:55 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Ну вот еще вариант: :D
[vba]
Код
Function up(s$) As String
    Dim i%
    Application.Volatile
    For i = 1 To Len(s)
    If Mid(s, i, 1) Like "[a-z]" Then Mid(s, i, 1) = UCase(Mid(s, i, 1))
    Next i
    up = s
End Function
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеНу вот еще вариант: :D
[vba]
Код
Function up(s$) As String
    Dim i%
    Application.Volatile
    For i = 1 To Len(s)
    If Mid(s, i, 1) Like "[a-z]" Then Mid(s, i, 1) = UCase(Mid(s, i, 1))
    Next i
    up = s
End Function
[/vba]

Автор - SLAVICK
Дата добавления - 16.10.2015 в 14:55
SLAVICK Дата: Пятница, 16.10.2015, 14:58 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
sv2014, может я чего то не понял:
в первом столбике пишем:
Adidas Кроссовки модель Basic
...
во втором столбике (на выходе) должно быть:
ADIDAS Кроссовки модельBASIC

И где Вы увидели файл - пример создателя темы? :o :D
И еще:
т.е. русский язык оставляем как есть, а все латинские буквы (или слова... как угодно) меняем на заглавные.


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Пятница, 16.10.2015, 15:02
 
Ответить
Сообщениеsv2014, может я чего то не понял:
в первом столбике пишем:
Adidas Кроссовки модель Basic
...
во втором столбике (на выходе) должно быть:
ADIDAS Кроссовки модельBASIC

И где Вы увидели файл - пример создателя темы? :o :D
И еще:
т.е. русский язык оставляем как есть, а все латинские буквы (или слова... как угодно) меняем на заглавные.

Автор - SLAVICK
Дата добавления - 16.10.2015 в 14:58
sv2014 Дата: Пятница, 16.10.2015, 15:10 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
21Tuz, уточняю, согласен, файл-примера создателя темы нет,все примеры у Вас SLAVIC у MBT правильные.
 
Ответить
Сообщение21Tuz, уточняю, согласен, файл-примера создателя темы нет,все примеры у Вас SLAVIC у MBT правильные.

Автор - sv2014
Дата добавления - 16.10.2015 в 15:10
AlexM Дата: Суббота, 17.10.2015, 09:30 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Такого кода еще не было :) [vba]
Код
Function UU(text As String) As String
Dim i&, arr: arr = Split(text)
    For i = 0 To UBound(arr)
        If arr(i) < "А" Then arr(i) = UCase(arr(i))
    Next
    UU = Join(arr)
End Function
[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеТакого кода еще не было :) [vba]
Код
Function UU(text As String) As String
Dim i&, arr: arr = Split(text)
    For i = 0 To UBound(arr)
        If arr(i) < "А" Then arr(i) = UCase(arr(i))
    Next
    UU = Join(arr)
End Function
[/vba]

Автор - AlexM
Дата добавления - 17.10.2015 в 09:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Замена латинских букв на заглавные (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!