提问人:Ishan Khatri 提问时间:9/28/2023 最后编辑:Ken WhiteIshan Khatri 更新时间:9/28/2023 访问量:71
如何在名为“Current”的 Excel 列中识别相同值对,并从“否”返回相应的值。喂料柱?
How can I identify pairs of identical values in an Excel column named ‘Current’ and return the corresponding values from the ‘No. Feeders’ column?
问:
不。馈线 | 风力发电机组数量 | 风力发电机组功率 (MW) | 当前 |
---|---|---|---|
F4 键 | 11 | 2.3兆瓦 | 470.43 安培 |
F5 键 | 6 | 2.3兆瓦 | 256.6 安培 |
F6 键 | 6 | 2.3兆瓦 | 256.6 安培 |
F7系列 | 11 | 2.3兆瓦 | 470.43 安培 |
F8 键 | 3 | 2.3兆瓦 | 128.3 安培 |
F9 键 | 7 | 2.3兆瓦 | 299.37 安培 |
F10系列 | 6 | 2.3兆瓦 | 256.6 安培 |
F11系列 | 11 | 2.3兆瓦 | 470.43 安培 |
F12系列 | 3 | 2.3兆瓦 | 128.3 安培 |
我想要的最终结果是连接此对并关联其当前值
- F4、F7、F11,电流值为 470.43 A
- F5、F6、F10,电流值为 256.6 A
- F8、F12,电流值为 128.3 A
- F9 电流值为 299.37 A
该公式应该是动态的,以便当 No.馈线和 WTG 变化的数量,我们得到具有相应当前值的新对。
VBA也很好。 谢谢!
答:
2赞
taller
9/28/2023
#1
选项 1:VBA
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, UBound(arrData, 2)) = arrRes
Set objDic = Nothing
End Sub
选项 2:Power Query
根据需要更新表名 (Table1)。
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"No. Feeders", type text}, {"No of WTG", type text}, {"WTG Power (MW)", type text}, {"Current", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"No of WTG", "WTG Power (MW)", "Current"}, {{"No. Feeders", each Text.Combine([No. Feeders], ","), type text}}),
#"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"No. Feeders", "No of WTG", "WTG Power (MW)", "Current"})
in
#"Reordered Columns"
评论
0赞
Ishan Khatri
9/28/2023
谢谢@taller-excelhome!我对Power Query的代码有多短感到惊讶!
1赞
taller
9/28/2023
PQ是Excel中一个非常强大的内置工具。
3赞
Tom Sharpe
9/28/2023
#2
如果您想在没有 textjoin 的早期版本的 Excel 中通过公式执行此操作,则需要在列 E 中有一个帮助程序列,例如根据需要下拉以获取串联:
=IF(A2="","",IFERROR(LOOKUP(2,1/(D$1:D1=D2),E$1:E1)&","&A2,A2))
然后,使用标准公式来获取 G 列中电流的唯一值:
=IFERROR(INDEX(D$2:D$100,MATCH(0,IF(D$2:D$100="",1,COUNTIF(G1:G$1,D$2:D$100)),0)),"")
最后在 H 列中查找以从 E 列中获取最后一个匹配值:
=IF(G2="","",LOOKUP(2,1/(G2=D$2:D$100),E$2:E$100))
从有限的意义上讲,它是动态的,范围可以根据需要扩大到包括任何未来数据。
评论
0赞
Ishan Khatri
9/28/2023
谢谢你的帮助,汤姆!这就像魔术一样!此外,有没有办法在 H2 单元中获取馈线对,例如 F1、F2、F3、F4、F7,我们将其动态重写为 F1 到 F4、F7。谢谢。
1赞
Tom Sharpe
9/29/2023
答案是“也许”。在 Excel 2007 中,这是一个相当大的问题,但在这种特殊情况下,馈线由“F”后跟一个总是在增加的数字来标识,我认为你可以。
评论