我建立了一个系统来管理我们酒店的预订。我是自学成才的 Excel 用户,只知道过去几个月在网上搜索到的东西。
我遇到了一个问题。一年中的每一天都有自己的 24 个房间列表,其中包含房间号、客人姓名、护照号、付款日期、国籍等信息。我想为这 365 个区域中的每一个区域赋予与一年中的某一天相关的编号,例如 1 月 1 日 = 1
我希望能使用这个主电子表格通过 if 公式 =if(cellref = 1 .... 自动填写每日宾客名单,它会在我的每日表格中填写我需要的所有信息,例如姓名、护照号码、付款日期等。
在我的脑海里,我预见到了一个巨大的混乱的公式,它必须解释原始电子表格/工作表的 365 种可能性。
我如何使用公式将年度电子表格中的信息填写到每日表格中?有没有简单的方法,还是我得在每日表格的每个单元格中输入长篇公式?
任何帮助都值得感激,我要破解它,只是需要一些指导。
答案1
我要在这里做一些假设,但我想我知道你的意思。假设你有一张表格,上面有格式化的“每日客人名单”,还有一张表格,你要从中提取数据(因为 365 个工作表可能有点难以管理)。在没有看到你的格式的情况下,我会假设在你的主电子表格中,A 列有一年中的日期(1 - 365),B 列有房间号(1 - 24)。我进一步假设你已经按 A 列对其进行了排序,以便同一天的所有房间都是连续的(这对我的例子来说很重要,但你可以用更复杂的逻辑来解决这个问题)。
在您的每日宾客名单工作表上,将您想要运行的日期编号放在一个单元格中(我的示例中为 A1)。
B1:
=MATCH(A1,Sheet1!A:A)
如果第 2 行包含标签,那么我们将使用您提取的数据开始第三行:
=INDIRECT(ADDRESS(ROW()-3+$B$1,COLUMN()+1,4,1,"Sheet1"))
您可以将该公式复制到列和 24 行以从主列表中获取数据。=indirect()
根据文本字符串抓取单元格。根据address()
行号、列号、几个格式选项和工作表名称创建指向单元格的字符串。
我通过获取公式单元格的行来指定行号=row()
,减去三,因为我假设前两行是标签等,然后添加具有正确日期的第一行的行号(在 A1 中输入并通过公式找到=match()
)。
我将该列偏移了 1,因为我认为您不需要在此每日宾客名单上重复日期标识符。
这两个格式变量不会改变此函数与=indirect()
函数配对时的工作方式。最后一个变量是以字符串形式输入的工作表名称。如果您必须从多个工作表中提取数据,您可以将工作表名称放在单元格中并引用它。在上面的示例中,您必须将“Sheet1”替换为您为数据选择的任何工作表名称。
我希望这篇文章足够有指导意义,让您从这里开始使用它。有很多方法可以实现这一点(例如,您不需要 B1,但我认为它使示例更清晰)。
最后,我建议使用日期而不是整数。这样可以让事情变得非常清晰,你甚至可以做一些方便的事情,比如使用=today()
今天的日期。