Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用宏编译不同的Excel工作表_Excel_Excel Formula_Vlookup - Fatal编程技术网

不使用宏编译不同的Excel工作表

不使用宏编译不同的Excel工作表,excel,excel-formula,vlookup,Excel,Excel Formula,Vlookup,我有4张不同的表格,数据相似,但格式不同。例如: 活页A Date Buy-In Game Winnings 11/25/2013 $10 NFL $18 11/28/2013 $10 NBA $0 活页B Sport Buy-In Date Winnings NFL $5 11/26/2013 $9 NBA $2

我有4张不同的表格,数据相似,但格式不同。例如:

活页A

Date        Buy-In     Game    Winnings
11/25/2013  $10        NFL     $18
11/28/2013  $10        NBA     $0
活页B

Sport       Buy-In     Date         Winnings
NFL         $5         11/26/2013   $9
NBA         $2         11/29/2013   $3.60
活页C

Buy-In      Game     Date         Winnings
$5          NFL      11/24/2013   $9
$2          NFL      11/21/2013   $3.60
活页D

Sport       Buy-In     Date         Winnings
NFL         $5         11/20/2013   $9
NBA         $2         11/22/2013   $3.60
我想在不使用宏的情况下将它们组合成一张表。因此,组合的表将如下所示:

组合表

Game      Date        Buy-In      Winnings
NFL       11/20/2013  $5          $9
NFL       11/21/2013  $2          $3.60
NBA       11/22/2013  $2          $3.60
NFL       11/24/2013  $5          $9
NFL       11/25/2013  $10         $18
NFL       11/26/2013  $5          $9
NBA       11/28/2013  $10         $0
NBA       11/29/2013  $2          $3.60

这是可行的还是可能的?

您可以使用
间接
功能和支持表来实现这一点

首先,您需要构建一个小的支持表,用于保存每个输入工作表的参数:

  • 在B列中,使用以下公式确定行数:
    =COUNTA(间接(“&A5&”!A:A”)-1
  • 对于C5:F8范围,我使用了公式
    =MATCH(C$4,间接(““&$A5&”!1:1”),0)
    -这将适用于所有具有“正确”列名的列-只需手动输入C6和C8,因为这里使用的是“运动”而不是“游戏”
基于此支持表,您可以构建合并表。这有两个部分-同样是3个支持列,用于确定图纸和行号-以及数据列:

使用以下公式:

  • H列:
    =IF(ISTEXT(H4),1,IF(I5=1,H4+1,H4))
    逻辑:从1开始,每次行Id重置为1时增加1-否则从上方保留工作表Id
  • 第I列:
    =IF(ISTEXT(I4),1,IF(I4=J4,1,I4+1))
    逻辑:从1开始,增加1,直到上行中的行ID等于表中从上到下的行数。在这种情况下,请在1重新启动
    • J列:
      =索引($B$5:$B$8,H5)
      -从配置表中获取当前工作表的行数
    • 第K列:N:
      =偏移量(间接(“'”和索引($A$5:$A$8,$H5)和“!A1”),$I5,索引(C$5:C$8,$H5)-1)
      -这就是神奇发生的地方!;-)逻辑:从配置表中获取工作表名称,在间接函数中使用该名称从该工作表中检索单元格A1。然后通过支持列的行ID和从配置表中再次检索到的该工作表的列ID进行偏移

请参见中实现的示例

宏更适合于此是的,不幸的是,目标是让多个用户尽可能地访问它。我希望不用宏也能做到,因为不是每个用户都能使用宏。但是,如果宏是唯一的方法,我想这就是我必须要做的。你可以参考其他工作表中的数据并对其进行排序。你能使用Power Query吗?Power Query具有简单的合并/追加功能,最终结果是最终数据位于工作表的表中。我将在组合的工作表上创建4个部分,每个源工作表1个。然后添加一个指示符列,用于区分有用行和“空”(
LEN(..)=0
)行。现在找到下一个有用的部分(例如,组合
IF
MATCH
),然后找到该部分中有用的行(相同的方式),并使用
OFFSET
函数检索数据。无论何时你做了什么,请创建一个新的问题或更新这个问题。这是惊人的!非常感谢你@充满问题:不客气!:-)