Excel文本字符串顺序

时间:2014-06-22 15:46:15

标签: excel excel-vba vba

我在Excel中有很多产品代码。这就是他们的样子。

000-00021-001-nav

请记住,它们的长度各不相同。我想重新格式化它们看起来像这样

NAV-000-00021-001

有谁知道怎么做?非常感谢帮助。

3 个答案:

答案 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.