Привет, я новичок в VBA и макросах, и мне хотелось знать, как лучше всего поступить со следующим:
У меня есть код, который в настоящее время использует диапазон ячеек с заглавной буквы. Однако я хочу изменить это, чтобы в каждой ячейке капитализировалось только содержимое перед последней точкой.
Итак, если, например, у меня есть:
Что я могу добавить к следующему, чтобы при запуске заглавными буквами писался только текст перед последней точкой?
Sub UpdateNames()
If Range("A1") = True Then
Range("B1:B100") = [INDEX(UPPER(B1:B100),)]
End If
End Sub
Спасибо!
text1.new - если бы это был, например, text1.new.revision.v2.txt, то это было бы text1.new.revision.v2, который должен быть написан с заглавной буквы, но все, что после последней точки, должно оставаться неизменным. Спасибо
Пожалуйста. попробуйте эту формулу =UPPER(TEXTBEFORE(B1:B100,".",-1)) & "." & TEXTAFTER(B1:B100,".",-1)
Или: =REGEXREPLACE(B1:B1000,".+\.","\U$0")
Взгляните на функцию 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
Относится ли «только текст перед последней точкой» к «новому» или «text1.new» в вашем примере?