Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为行创建唯一序列_Excel_Vba_Excel Formula_Excel 2010_Worksheet Function - Fatal编程技术网

Excel 为行创建唯一序列

Excel 为行创建唯一序列,excel,vba,excel-formula,excel-2010,worksheet-function,Excel,Vba,Excel Formula,Excel 2010,Worksheet Function,我有几千行数据,需要为每行创建唯一的序列。以下是一个示例(每个值都在其自己的单元格中): 我需要创建一个独特的序列,让它看起来像这样 Text1| Text2| Text3| Text1| or Text1,Text2,Text3,Text1| 有什么想法吗?如果第一个Text1在A1中,那么: =A1&","&IF(A1<>B1,B1&",","")&IF(B1<>C1,C1&",","")&IF(C1<&g

我有几千行数据,需要为每行创建唯一的序列。以下是一个示例(每个值都在其自己的单元格中):

我需要创建一个独特的序列,让它看起来像这样

Text1| Text2| Text3| Text1|    or
Text1,Text2,Text3,Text1|

有什么想法吗?

如果第一个
Text1
在A1中,那么:

=A1&","&IF(A1<>B1,B1&",","")&IF(B1<>C1,C1&",","")&IF(C1<>D1,D1&",","")&IF(D1<>E1,E1&",","")&IF(E1<>F1,F1&",","")&IF(F1<>G1,G1,"")  
=A1&“,”&IF(A1B1,B1&“,”,”)&IF(B1C1,C1&“,”,”)&IF(C1D1,D1&“,”,”)&IF(D1E1,E1&“,”,”)&IF(E1F1,F1&“,”,“,”)&IF(F1G1,G1,”)

可能值得一试。

作为用户定义的函数

Public Function ClarkeyCat2(ByRef rng As Range, delimIT As String, Optional ByVal trimIT As Boolean = False) As Variant
Dim c As Range
Dim UniqueColl As Collection
Dim tmpValue As Variant
Set UniqueColl = New Collection


If Not trimIT Then

    On Error Resume Next
    For Each c In rng
        If (c.Value <> "") Then
            UniqueColl.Add c.Value, c.Value
        End If
    Next

    For k = 1 To UniqueColl.Count
        ClarkeyCat2 = ClarkeyCat2 & IIf(ClarkeyCat2 = "", "", delimIT) & UniqueColl.Item(k)
    Next
Else
    On Error Resume Next
    For Each c In rng
        If (c.Value <> "") Then
            tmpValue = Trim(c.Value)
            UniqueColl.Add tmpValue, tmpValue
        End If
    Next

    For k = 1 To UniqueColl.Count
        ClarkeyCat2 = ClarkeyCat2 & IIf(ClarkeyCat2 = "", "", delimIT) & UniqueColl.Item(k)
    Next
End If

End Function
公共函数ClarkeyCat2(ByRef rng作为范围,定界作为字符串,可选ByVal trimIT作为布尔值=False)作为变量
调光范围
Dim UniqueColl As系列
Dim TMP值作为变量
Set UniqueColl=新集合
如果没有,那么
出错时继续下一步
对于rng中的每个c
如果(c.值“”),则
UniqueColl.添加c.值,c.值
如果结束
下一个
对于k=1到UniqueColl.计数
ClarkeyCat2=ClarkeyCat2&IIf(ClarkeyCat2=“”,”,定界)和UniqueColl.项(k)
下一个
其他的
出错时继续下一步
对于rng中的每个c
如果(c.值“”),则
TMP值=微调(c值)
UniqueColl.添加tmpValue,tmpValue
如果结束
下一个
对于k=1到UniqueColl.计数
ClarkeyCat2=ClarkeyCat2&IIf(ClarkeyCat2=“”,”,定界)和UniqueColl.项(k)
下一个
如果结束
端函数
像这样使用

Text1| Text2| Text3| Text1|    or
Text1,Text2,Text3,Text1|


更新在决定条目是否唯一之前,可选择从单元格条目中删除无关的空白。默认行为是不删除空白。使用可选的布尔第三个参数进行设置。

在VBA中是否确定?或者只是公式?如果你只是想要一个公式,那就太过分了。但它在其他情况下也可以使用。我非常喜欢vba解决方案,这在将来可能会很有用。但有一个问题,它在以下情况下不起作用。Text1 | Text2 | Text2 | Text1 | Text1 | Text1 | Text1 |@MichaelCarn Bennett谢谢。我假设“|”表示细胞之间的分离。您是说“|”实际上是每个单元格中文本字符串的一部分吗?如果你能更具描述性(至于Text1 | Text2 |实际上意味着什么,我可以修正它。我猜你指的是额外的空白,如“Text1 |”不等于“Text1 |”。如果是这样,我使用可选的第三个true/false参数更新了该函数以在这种情况下工作。默认值为false。很难解释!但你们现在都明白了:)非常感谢你们两位。