按分隔符分割和连接字符串按照计数excel

时间:2017-10-10 21:36:54

标签: excel vba excel-vba

我有成千上万的excel细胞

15x30x30

12x5x16x25x52

每个号码是产品上每个个性化所允许的最大字符数。

所以第一个是15个,30个和30个的个性化,第二个是12个,5个,16个,25个和52个的5个个性化。

我想将上述内容改为

1-12, 2-30, 3-30

工作表中的每个产品都被转换为csv用于上传我想使用标签来识别需要多少个最大长度的表单字段但是我不能两次使用相同的标签。前缀数字根据计数递增

如果没有这个,将使用相同的标签两次12,30,30,这是上传网站无法完成的。

但我对VBA和功能知识知之甚少没有任何线索

例如

我可以计算出由分隔符分割的项目数量如下:

=LEN(A2)-LEN(SUBSTITUTE(A2,"x",""))+1结果将是3

我也可以使用替换函数用逗号替换x,但我怎么能这样:

  • 分割
  • 添加增量
  • 重新加入

实现这一目标的最佳方法是什么? 单元格中的函数???一个VBA功能???如果是这样,有人可以给我一个启动器或一些功能来看我是一个PHP程序员所以如果需要可以学习新的代码

我知道我会把字符串分割成数组。 。 。使用增量预先添加数组中的每个值,然后再次作为字符串连接,但我如何在excel中执行类似操作。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

如果您有Office 365 Excel,则可以使用TEXTJOIN作为数组公式:

=TEXTJOIN(", ",TRUE,ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"x",""))+1)) & "-" & TRIM(MID(SUBSTITUTE(A1,"x",REPT(" ",999)),(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"x",""))+1)) -1)*999+1,999)))

作为一个数组公式,需要在退出编辑模式时使用Ctrl-Shfit-Enter而不是Enter确认。

enter image description here

如果您没有Office 365 Excel,则可以将此代码放在工作簿附带的模块中,并使用上述公式。

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function

答案 1 :(得分:1)

如果您拥有Excel O365(或带有以下公式的一些小的Excel 2019),您也可以使用:

=TEXTJOIN(", ",,SEQUENCE(LEN(A1)-LEN(SUBSTITUTE(A1,"x",""))+1)&"-"&FILTERXML("<t><s>"&SUBSTITUTE(A1,"x","</s><s>")&"</s></t>","//s"))

enter image description here