Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Match - Fatal编程技术网

Excel:检查值是否出现,将内容与范围和设置值进行比较

Excel:检查值是否出现,将内容与范围和设置值进行比较,excel,vba,match,Excel,Vba,Match,我尝试在Excel中组合几个函数,但对于这个特殊问题,我找不到解决方案 我想检查一行中是否多次包含值。如果是这样,我必须得到匹配的所有值我不想发布所有匹配的内容但我想将这些值与另一个范围的值进行比较,然后确定匹配是否都是相同的类型 示例: 我有一张像这样的桌子: Animal | Number ___________|___________ Dog | 2 | Cat | 1 | Rabbit |

我尝试在Excel中组合几个函数,但对于这个特殊问题,我找不到解决方案

我想检查一行中是否多次包含值。如果是这样,我必须得到匹配的所有值我不想发布所有匹配的内容但我想将这些值与另一个范围的值进行比较,然后确定匹配是否都是相同的类型

示例:

我有一张像这样的桌子:

Animal | Number ___________|___________ Dog | 2 | Cat | 1 | Rabbit | 2 | Cat | 1 | Dog | 3 | Dog | 2 然后我阅读了如何打印出某个范围内出现的所有值

但我既不能把这个解决方案转移到我的问题上,也不能想出任何替代方案

提前感谢您的帮助

编辑:


因此,我的主要问题是如何获取所有事件的内容,例如,对于数字“2”,我希望将结果{“Dog”,“Rabbit”}以一种形式与这些值进行处理(以便将它们与其他值进行比较)

关于如何获取所有事件,您在编辑中提到过。以下是一个例子:

Sub Test()

    Dim objResult As Object
    Dim arrAllNumbers()
    Dim arrAllAnimals()
    Dim lngNumber As Long
    Dim arrAnimals()
    Dim strAnimals As String

    ' processing the table
    Set objResult = ExtractOccurrences(Range("A2:B7"))
    ' example how to get array of the numbers
    arrAllNumbers = objResult.Keys
    ' example how to get array of the dictionaries containing corresponding animals
    arrAllAnimals = objResult.Items
    ' example how to get all animals for certain number
    lngNumber = 2
    arrAnimals = objResult(lngNumber).Keys
    ' convert to the string representation
    strAnimals = "{""" & Join(arrAnimals, """,""") & """}"

End Sub

Function ExtractOccurrences(rngTable As Range) As Object

    Dim arrTable() As Variant
    Dim objList As Object

    arrTable = rngTable
    Set objList = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arrTable, 1)
        If IsEmpty(objList(arrTable(i, 2))) Then Set objList(arrTable(i, 2)) = CreateObject("Scripting.Dictionary")
        objList(arrTable(i, 2))(arrTable(i, 1)) = ""
    Next
    Set ExtractOccurrences = objList

End Function
Sub Test()
scope的变量如下所示:


因此,对于数字
2
来说,结果是
{“狗”,“兔子”}

如果你缩小你的问题范围,帮助你会更容易。嘿:-)最初我不打算使用vba,但我意识到学习vba比结合一千个公式更容易;-)谢谢你的帮助!
    =IF(COUNTIF('table1'!B:B;A1)>1;"X";"")
Sub Test()

    Dim objResult As Object
    Dim arrAllNumbers()
    Dim arrAllAnimals()
    Dim lngNumber As Long
    Dim arrAnimals()
    Dim strAnimals As String

    ' processing the table
    Set objResult = ExtractOccurrences(Range("A2:B7"))
    ' example how to get array of the numbers
    arrAllNumbers = objResult.Keys
    ' example how to get array of the dictionaries containing corresponding animals
    arrAllAnimals = objResult.Items
    ' example how to get all animals for certain number
    lngNumber = 2
    arrAnimals = objResult(lngNumber).Keys
    ' convert to the string representation
    strAnimals = "{""" & Join(arrAnimals, """,""") & """}"

End Sub

Function ExtractOccurrences(rngTable As Range) As Object

    Dim arrTable() As Variant
    Dim objList As Object

    arrTable = rngTable
    Set objList = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arrTable, 1)
        If IsEmpty(objList(arrTable(i, 2))) Then Set objList(arrTable(i, 2)) = CreateObject("Scripting.Dictionary")
        objList(arrTable(i, 2))(arrTable(i, 1)) = ""
    Next
    Set ExtractOccurrences = objList

End Function