【问题标题】:Transfer data from one worksheet to the next based on cell values根据单元格值将数据从一个工作表传输到下一个工作表
【发布时间】:2013-12-18 23:41:08
【问题描述】:

我在给这个命名时遇到了麻烦,我认为最好用例子来解释。我不是一个经验丰富的 excel 用户,但被要求解决这个问题。

工作表 1(由软件提供)格式如下:

12/17/2013
Hour                  Delivered
00.00-00.59           
Employee 1            18
Employee 2            17
Total For Hour        35
01.00-01.59           
Employee 1            18
Employee 2            17
Employee 3            12
Total For Hour        47
... etc until hours 24.00-24.59

组内每小时的员工人数每天都不一样,所以我认为我不能简单地引用单元格。

我想将数据从工作表 1 传输到的工作表是基于日期的,因此每天都有一个。 (12/17 工作表、12/18 工作表等...)

这是日期工作表的格式:

Employee       00.00-00.59  |   01.00-01.59  |  etc. until hours 24.00-24.59
Employee 1     18               18
Employee 2     17               17
Employee 3     12
Employee 4
Employee 5

所以基本上我需要将工作表 1 中的数据转移到各个日期工作表中。我相信,每小时/每天不同的员工数量使这变得困难。这里有人对如何实现这一点有任何想法吗?

另外,如果有任何问题,请告诉我。

【问题讨论】:

    标签: excel excel-2010 vba


    【解决方案1】:

    这应该可以在没有任何 VB 的情况下分两步完成。第一步是向 Worksheet 1 添加更多列以规范化数据。第二步是使用标准化数据创建数据透视表。

    “规范化”是指使用从现有列 A 和 B 复制值的公式在工作表 1 中添加日期、小时、员工和交付列。如果您需要更多帮助,请告诉我。

    编辑:添加细节...

    假设 Worksheet 1 具有您在 A 列和 B 列中指定的值,并且您希望 Hour 在 D 列中。假设第 1 行仅包含列标题。将第 2 行完全留空。 col D 中的公式需要说“如果 col A 中的值看起来像一个小时,则复制它,否则从上面的行中重复小时。”确定工作表 1 中的一行是否为 Hour 的一种简单方法是在位置 3 中查找小数点。因此,将 =IF(MID(A3,3,1)=".",A3,D2) 放入单元格 D3 中并复制该公式。

    我相信您可以为 Date、Employee 和 Delivered 列构建一个类似的公式。

    可能会在公式中添加一个条件,说明“如果 col A 中的值以 'Total' 开头,则将单元格留空”。

    【讨论】:

    • 感谢您的帮助,我正在尝试这样做,并会通知您。
    • 由于每天每小时可以使用的名称数量都不同,您如何建议我在新的规范化列中引用我的值?我不能只说“=A5”,因为这可能不是每个工作表中的员工
    • 添加了一些额外的提示
    • 我今天下午有空,构建了一个示例解决方案。希望你可以从dl.dropboxusercontent.com/u/14536497/20670805.xlsx下载它
    【解决方案2】:

    如果数据不多,而设置正是您在上面显示的方式,那么一个简单的公式就可以解决这个问题。

    假设我的原始导出在工作表Base、单元格A1 中,并且我的预期输出从工作表Output、单元格A1 开始,您可以在单元格B2 上使用此公式:

    =IF(INDEX(Base!$A:$A,MATCH(B$1,Base!$A:$A,0)+ROW(1:1),0)=$A2,OFFSET(INDEX(Base!$A:$A,MATCH(B$1,Base!$A:$A,0)+ROW(1:1),0),0,1),0)

    前提很简单。它使用INDEX + MATCH 定位正确的时间,然后通过ROWs 的正确数量来定位OFFSETs。当然,这是假设您的员工每小时都在同一个位置(即员工 1 始终位于该小时下方一 (1) 行,员工 2 始终位于该小时下方两 (2) 行,等等)。我们还添加了一个检查员工姓名是否匹配,这样如果员工不在那里,它将返回 0。

    以下是一些屏幕截图:

    样本数据:

    输出:

    当然,这只是基本前提。如果您在工作表中有多个日期,则只需进一步操作此公式即可。在我的脑海中,找到正确的日期并添加正确的偏移量也可以工作。

    让我们知道这是否有帮助,或者 VBA 或 Pivot 选项是否看起来最好。

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多