“如何识别名为“Current”的 Excel 列中的成对相同值,并从“No.”返回相应的值。喂食者专栏?”

问题描述 投票:0回答:1
不。喂食器 风机数量 风机功率(兆瓦) 当前
F4 11 2.3兆瓦 470.43A
F5 6 2.3兆瓦 256.6A
F6 6 2.3兆瓦 256.6A
F7 11 2.3兆瓦 470.43A
F8 3 2.3兆瓦 128.3A
F9 7 2.3兆瓦 299.37A
F10 6 2.3兆瓦 256.6A
F11 11 2.3兆瓦 470.43A
F12 3 2.3兆瓦 128.3A

我想要的最终结果是连接这对并关联其当前值

  1. F4、F7、F11 当前值为 470.43 A
  2. F5、F6、F10 当前值为 256.6 A
  3. F8、F12当前值为128.3A
  4. F9 当前值为 299.37 A

该公式应该是动态的,以便当馈线数量和风力发电机数量发生变化时,我们会得到具有相应当前值的新对。

VBA 也不错。 谢谢!

excel vba excel-formula excel-2007
1个回答
0
投票

Dictionary
对象用于按数据进行分组。

Option Explicit
Sub Demo()
    Dim objDic As Object, rngData As Range
    Dim i As Long, j As Long
    Dim arrData, arrRes, sKey, arrKey
    Set objDic = CreateObject("scripting.dictionary")
    Set rngData = Range("A1").CurrentRegion
    arrData = rngData.Value
    For i = LBound(arrData) + 1 To UBound(arrData)
        sKey = arrData(i, 2) & "|" & arrData(i, 3) & "|" & arrData(i, 4)
        If objDic.exists(sKey) Then
            objDic(sKey) = objDic(sKey) & "," & arrData(i, 1)
        Else
            objDic(sKey) = arrData(i, 1)
        End If
    Next i
    ReDim arrRes(objDic.Count, 1 To UBound(arrData, 2))
    For i = 1 To UBound(arrData, 2)
        arrRes(0, i) = arrData(1, i)
    Next
    j = 1
    For Each sKey In objDic
        arrKey = Split(sKey, "|")
        For i = 0 To 2
            arrRes(j, i + 2) = arrKey(i)
        Next
        arrRes(j, 1) = objDic(sKey)
        j = j + 1
    Next sKey
    Sheets.Add
    Range("A1").Resize(j - 1, UBound(arrData, 2)) = arrRes
    Set objDic = Nothing
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.