Excel根据标题名称将所有数据返回到另一个工作表

时间:2017-10-10 09:50:10

标签: excel excel-vba excel-formula ms-office vba

在Microsoft Excel中,我想创建一个如下图所示的表格。 I cannot include photo in my post

我已经尝试使用vlookup和index但是我不能让它像我想的那样工作。 请帮帮我

2 个答案:

答案 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

enter image description here