在Microsoft Excel中,我想创建一个如下图所示的表格。
我已经尝试使用vlookup和index但是我不能让它像我想的那样工作。 请帮帮我
答案 0 :(得分:0)
我写了一个解决方案,它对我很好。公式非常复杂,可能很难理解。虽然我会尽力解释,但更新公式可能仍然是一项艰巨的工作。所有这三个公式都是用Array Formula编写的,按ctrl + shift + enter来完成。
G6中的公式:
=IFERROR(OFFSET($A$5,0,SMALL(
IF($B$6:$D$9<>"",1,99999999)*(COLUMN($B$6:$D$9)-1),ROW(A1))),"")
外部IFERROR使您的工作表不受任何#Err的影响。 OFFSET用于调用正确的日期。 SMALL中的公式生成一个带有规则的数组:如果有事件,则该值将是偏移日期的编号,否则将为99999999,这会给OFFSET一个错误并被IFERROR阻止。根据您提供的数据,数组将是
{ 1,99999999, 3;
1, 2,99999999;
1,99999999,99999999;
99999999,99999999, 3 }
H6中的公式:
=IFERROR(OFFSET($A$5,
SMALL(IF($B$6:$D$9<>"",ROW($B$6:$D$9)-5)*
IF(COLUMN($B$6:$D$9)=MATCH(G6,$B$5:$D$5,0)+1,1,99999999),99999999),COUNTIF($G$6:G6,G6)),
MATCH(G6,$B$5:$D$5,0)),"")
IFERROR和OFFSET的工作原理与G6相同。 OFFSET.ROW中的公式生成与G6几乎相同的数组。这次该值是事件行,日期由列G确定。其他给出999999999或更多。
I6中的公式:
=IFERROR(OFFSET($A$5,MAX((ROW($B$6:$D$9)-5)*($B$6:$D$9=H6)*
(COLUMN($B$6:$D$9)=MATCH(G6,$B$5:$D$5,0)+1)),0),"")
IFERROR和OFFSET仍然相同。而这次只有匹配日期和事件名称的事件才有值,其他事件仍为0。
最后,我为可读性差而道歉。希望有人可以帮助我解决这个问题:]
答案 1 :(得分:0)
尝试使用VBA:
Sub TransformTbl()
Dim i As Long, j As Long, cnt As Long
With ActiveSheet
.Range("G1:I1") = Array("Date", "Event", "Place")
cnt = 1
For j = 2 To 4 'column
For i = 2 To 5 'row
If Len(.Cells(i, j)) <> 0 Then
cnt = cnt + 1
.Cells(cnt, 7) = .Cells(1, j) 'Date
.Cells(cnt, 8) = .Cells(i, j) 'Event
.Cells(cnt, 9) = .Cells(i, 1) 'Place
End If
Next i
Next j
End With
End Sub