Excel return 所有数据到另一个基于 header 名称的工作表

Excel return all data to another worksheet based on header name

在 Microsoft Excel 我想创建一个 table 如下图所示。

我已经尝试过使用 vlookup 和索引,但我无法让它按我想要的方式工作。 请帮助我

我写了一个解决方案,对我来说效果很好。这个公式真的很复杂,可能很难理解。虽然我会尽力解释它,但更新公式可能仍然是一项艰巨的工作。这三个公式都是用数组公式写的,按ctrl+shift+enter完成。

G6 中的公式:

=IFERROR(OFFSET($A,0,SMALL(
IF($B:$D<>"",1,99999999)*(COLUMN($B:$D)-1),ROW(A1))),"")

外部 IFERROR 使您的 sheet 免受任何 #Err 的影响。调用正确日期的偏移量。 SMALL 里面的公式生成一个数组,其规则是:如果有事件,该值将是偏移日期的编号,否则将为 99999999,使 OFFSET 出错并被 IFERROR 阻止。使用您提供的数据,数组将是

{        1,99999999,       3;
         1,       2,99999999;
         1,99999999,99999999;
  99999999,99999999,       3 }

H6 中的公式:

=IFERROR(OFFSET($A,
    SMALL(IF($B:$D<>"",ROW($B:$D)-5)*
        IF(COLUMN($B:$D)=MATCH(G6,$B:$D,0)+1,1,99999999),99999999),COUNTIF($G:G6,G6)),
    MATCH(G6,$B:$D,0)),"")

IFERROR 和OFFSET 的作用与G6 相同。 OFFSET.ROW 中的公式生成与 G6 几乎相同的数组。这次取值为G列确定日期的事件行。其他给出999999999或更多。

I6 中的公式:

=IFERROR(OFFSET($A,MAX((ROW($B:$D)-5)*($B:$D=H6)*
(COLUMN($B:$D)=MATCH(G6,$B:$D,0)+1)),0),"")

IFERROR 和 OFFSET 还是一样。而这次只有符合日期和名字的事件本身才有值,其他的仍然是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