从Excel中的范围制作列表

时间:2018-05-18 13:54:19

标签: excel vba

在原始专栏中,我有多年的范围。喜欢

1865–1868

如何将其转换为逗号分隔列表?像:

1865, 1866, 1867, 1868

当前数据格式为TEXT。我计划将其更改为DATE。

注意:原始细胞通常由混合形式组成。喜欢" 1865-1868,1870"

1 个答案:

答案 0 :(得分:2)

怎么样:

Public Function CSVList(rng As Range) As String
    Dim r As Range, ary1, ary2
    For Each r In rng
        v = r.Text
        If InStr(1, v, "-") = 0 Then
            CSVList = CSVList & "," & v
        Else
            ary = Split(v, "-")
                For i = CLng(ary(0)) To CLng(ary(1))
                    CSVList = CSVList & "," & CStr(i)
                Next i
        End If
    Next r
    CSVList = Mid(CSVList, 2)
End Function

enter image description here

或:

enter image description here

修改#1:

此UDF将任何非数字视为分隔符:

Public Function CSVList2(rng As Range) As String
    Dim r As Range, ary1, ary2, L As Long, i As Long, C As String
    For Each r In rng
        v = r.Text
        L = Len(v)
        C = ""
        For i = 1 To L
            If Not Mid(v, i, 1) Like "[0-9]" Then C = Mid(v, i, 1)
        Next i

        If C = "" Then
            CSVList2 = CSVList2 & "," & v
        Else
            ary = Split(v, C)
                For i = CLng(ary(0)) To CLng(ary(1))
                    CSVList2 = CSVList2 & "," & CStr(i)
                Next i
        End If
    Next r
    CSVList2 = Mid(CSVList2, 2)
End Function