我在Excel中有很多产品代码。这就是他们的样子。
000-00021-001-nav
请记住,它们的长度各不相同。我想重新格式化它们看起来像这样
NAV-000-00021-001
有谁知道怎么做?非常感谢帮助。
答案 0 :(得分:3)
假设单元格在A1中,您可以使用公式=CONCATENATE(UPPER(RIGHT(A1,3)),"-",LEFT(A1,LEN(A1)-4))
答案 1 :(得分:1)
您可以使用相当灵活的VBA例程。以下假设字符串由短划线分隔的段组成,并且您要反转第一个和最后一个段,并且所有内容都将大写。
它允许您使用不同的分隔符,但这是一个可选参数。
要输入此用户定义函数(UDF), alt-F11 将打开Visual Basic编辑器。 确保在Project Explorer窗口中突出显示您的项目。 然后,从顶部菜单中选择“插入/模块” 将下面的代码粘贴到打开的窗口中。
要使用此用户定义函数(UDF),请输入类似
的公式=LastToFirst(A1)
在某个单元格中。
Option Explicit
Function LastToFirst(S As String, Optional sDelimit As String = "-") As String
Dim V As Variant
Dim I As Long
Dim sTemp As String
V = Split(UCase(S), sDelimit)
sTemp = V(0)
V(0) = V(UBound(V))
V(UBound(V)) = sTemp
LastToFirst = Join(V, sDelimit)
End Function
如果您想使用可以反转第一个和最后一个细分的工作表公式,并且无差异到细分的长度或数字< / strong>段,你可以试试这个:
=UPPER(IFERROR(TRIM(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),99))&
MID(A1,FIND("-",A1),LEN(A1)-LEN(TRIM(RIGHT(SUBSTITUTE(A1,"-",
REPT(" ",99)),99)))-FIND("-",A1)+1)&LEFT(A1,FIND("-",A1)-1),A1))
答案 2 :(得分:0)
假设您要在VBA中执行此操作而不是使用Excel表达式:
这听起来非常有用,特别是如果VBA具有RIGHT()功能(我不记得它是否有效)。
如果您在多个语句中而不是在一个大的嵌套表达式中编写它,那么您的压力可能会最小。
你究竟如何接近它将取决于弦的特征,以及什么是常数和什么不是。例如,如果字符串的最后一部分总是三个字符,则可以确定字符串的长度并进行一些子字符串处理。如果唯一保证是常量的是3个破折号,你必须使用另一个函数(我忘记了名字,但是在字符串中找到一个子字符串并返回位置)以确定最后一个dash位于字符串中。
我接近这样的事情(这是伪代码):
' Determine length of string
' Determine starting position of last section
' Extract last section
' Use function - I think it's called UCase() - to convert the extracted last section to uppercase
' Reassemble the string
' Return the string.