2013-01-09 54 views
0

我有一个填充了四列(V1 V2,V3 V4)的Excel 2007电子表格,其中包含用逗号分隔的值(整数[0-20])。价值观不一定是连续的。
Excel Spreadsheet: example data and output
我想创建一个新列(例如newV),如果它的单元格包含在该行的前四列中的至少两列中,那么它的单元格只包含一个整数。这可以用Excel中的公式或宏来完成吗?如果是的话,什么是解决这个问题的好方法?谢谢。根据行中其他单元格的内容在Excel 2007中填充单元格

+0

相同的值可以在同一个单元格中出现多次吗? –

+0

它不应该。该值在单元格中不应出现多次。 – nofunsally

回答

2

如果每个值只能在每个单元中出现一次:

Function IfAtLeast(rng As Range, num As Integer) 
    Const SEP As String = "," 
    Dim c As Range, d As Object, arr, i As Long, tmp, k 
    Dim rv As String 
    rv = "" 
    Set d = CreateObject("scripting.dictionary") 
    For Each c In rng 
     arr = Split(c.Value, SEP) 
     For i = LBound(arr) To UBound(arr) 
      tmp = Trim(arr(i)) 
      If Not d.exists(tmp) Then d.Add tmp, 0 
      d(tmp) = d(tmp) + 1 
     Next i 
    Next c 
    For Each k In d.keys 
     If d(k) >= num Then rv = rv & IIf(Len(rv) > 0, ",", "") & k 
    Next k 
    IfAtLeast = rv 
End Function 

用法:

=IfAtLeast(A2:D2,2) 

编辑:如果您有任何问题故障排除的UDF那么它往往更容易使用子调试问题

Sub Tester() 
    debug.print IfAtLeast(Activesheet.Range("A2:D2"), 2) 
End Sub 
+0

谢谢。我将上面的代码复制到了我的电子表格中,当我使用'= IfAtLeast'和我的单元格范围(例如A2:D2)时,我得到一个'#Value!'错误。我不确定如何错误检查一个函数,而不是看起来像一个宏。还有什么建议?谢谢。 – nofunsally

+0

看我的编辑调试UDF –

相关问题