【问题标题】:Excel - copy certain rows from worksheet in another worksheetExcel - 将工作表中的某些行复制到另一个工作表中
【发布时间】:2012-10-21 04:37:19
【问题描述】:

我找到了解决此问题的方法,但我不知道如何根据我的具体问题调整它们。我以前从未编写过 marco 或任何 VBA 脚本,所以请具体说明您的答案。

我有一个 Excel 工作簿,其中一个工作表名为“食物”,另外四个工作表名为“小吃选择”、“早餐选择”、“午餐选择”和“晚餐选择”

“食物”工作表中的标题如下所示:

食物量卡路里...ETC...类型

其中“类型”包含“早餐”“小吃”“午餐”“晚餐”或 2 种以上选项的组合。

我希望根据“食物”中“类型”字段的值将整行复制到相应的“小吃选择”、“早餐选择”、“午餐选择”和“晚餐选择”工作表中"工作表。

例如,如果我在“食物”工作表中输入一个新行,其中“类型”字段为“小吃/早餐”,我希望该行自动出现在“早餐选择”和“小吃选择”中“工作表。 (如果这样更容易,我可以删除斜线或用另一个字符替换它)

提前谢谢你!

【问题讨论】:

  • I've never written a marco or any VBA script before, so please be specific with your answers. -> 将您的需求分解为步骤(用英文写下您的逻辑),然后学习如何在 VBA 中执行每个步骤,然后将它们放在一起。一些有帮助的 VBA 方法是For Each Next LoopsAutoFilter(可能)和InStr。如果您开发了一些代码并且卡住了,请在此处发布。如果我们有代码可以使用,我们可以提供更好的帮助。

标签: excel excel-2007 excel-formula vba


【解决方案1】:

主餐桌上的食物(表“食物”):

早餐桌:

在此表中:

A1:食物类型。为了与其他食物(午餐/谷物/早餐)相匹配,它应该以“*”开头和结尾:*breakfast* 而不是breakfast。也可以更改公式。

然后我们在“食物”表上寻找第一次“早餐”:

A3:

=IF(ISERROR(MATCH($A$1,Foods!A:A;0)),"",MATCH($A$1,Foods!A:A,0))

因此,将显示匹配行的编号。如果不匹配,将显示一个空白单元格。

然后我们匹配其他数据:

B2:

=IF(A3="","",INDIRECT("Foods!B"&$A3))

D2:将 INDIRECT("Foods!B"&$A3)) 更改为 INDIRECT("Foods!D"&$A3)),将 E 更改为 E2 等。

第一行下方A列中的其他行(从A4向下复制):

=IF(ISERROR(A3+MATCH($A$1,INDIRECT("Foods!A"&A3+1&":A60000"),0)),"",A3+MATCH($A$1,INDIRECT("Foods!A"&A3+1&":A60000"),0))

如果不匹配,将显示一个空白单元格。

我上传了一个电子表格示例到http://www.bumpclub.ee/~jyri_r/Excel/Type_of_food_on_another_sheet.xls

【讨论】:

  • 如果必须处理超过 16K 的行数,Excel 2003 的索引效率似乎会大大降低(并且数量会增加)。不幸的是,我将一个公式复制到最后一行,即使删除了所有行,体积也保持不变。清理后的体积为 17 KB,不应有争议。
  • 新的 Excel 2003 工作表仅是一张空工作表就需要 11.5 KB。
  • 是的,我知道 :-) 等待我的雇主升级。
【解决方案2】:

寻找 excel 公式将许多工作表中的整行复制到单个工作表中。尝试复制的行在第一列中有一个“x”。

例如

表格是这样设置的:

列 1 2 3 4 5 行 1 销售优先级 WHID 序列 SAT 2 X 1 FG 1.FG.01
3 1 FG 1.FG.01

有很多行、很多列和很多工作表。

希望将第一列中的每个“X”拉到新工作表中。

有什么帮助吗?

【讨论】:

  • 欢迎来到 Stack Overflow。如果您有其他问题,ask a question
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多