VBA – использовать заглавную букву диапазона ячеек перед последней точкой

Привет, я новичок в VBA и макросах, и мне хотелось знать, как лучше всего поступить со следующим:

У меня есть код, который в настоящее время использует диапазон ячеек с заглавной буквы. Однако я хочу изменить это, чтобы в каждой ячейке капитализировалось только содержимое перед последней точкой.

Итак, если, например, у меня есть:

Столбец А Столбец Б истинный text1.new.txt Ячейка 3 text2.new.txt

Что я могу добавить к следующему, чтобы при запуске заглавными буквами писался только текст перед последней точкой?

Sub UpdateNames()
    If Range("A1") = True Then
    Range("B1:B100") = [INDEX(UPPER(B1:B100),)]
    End If
End Sub

Спасибо!

Относится ли «только текст перед последней точкой» к «новому» или «text1.new» в вашем примере?

Jan_B 03.07.2024 13:56

text1.new - если бы это был, например, text1.new.revision.v2.txt, то это было бы text1.new.revision.v2, который должен быть написан с заглавной буквы, но все, что после последней точки, должно оставаться неизменным. Спасибо

JHoliness 03.07.2024 14:03

Пожалуйста. попробуйте эту формулу =UPPER(TEXTBEFORE(B1:B100,".",-1)) & "." & TEXTAFTER(B1:B100,".",-1)

Black cat 03.07.2024 14:38

Или: =REGEXREPLACE(B1:B1000,".+\.","\U$0")

JvdV 03.07.2024 15:47
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
4
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляните на функцию InStrRev. Его можно использовать для поиска позиции последней точки, чтобы разделить строку следующим образом:

Sub UpdateNames()
    If Range("A1") = True Then
        ' get left part by last period position
        lft = Left(cell.Value, InStrRev(cell.Value, "."))
        ' get right part by difference between whole string length and left length
        rght = Right(cell.Value, Len(cell.Value) - Len(lft))
        ' put both together
        cell.Value UCase(lft) & rght
    End If
End Sub

Альтернативно вы можете использовать функции Split и Join. Возможно, это не самое элегантное и, конечно, не самое быстрое решение, поскольку оно циклически обрабатывает каждую подстановку, но оно все равно помогает:

Sub UpdateNames()
    If Range("A1") = True Then
        ' get all elements of the string into an array
        arr = Split(cell.Value, ".")
        ' capitalize every substring except the last one
        For i = 0 To UBound(arr) - 1
            arr(i) = UCase(arr(i))
        Next i
        ' join the substrings back together 
        cell.Value Join(arr, ".")
    End If
End Sub

Другие вопросы по теме