sasos Asked: 2024-07-23 18:36:13 +0800 CST2024-07-23 18:36:13 +0800 CST 2024-07-23 18:36:13 +0800 CST Excel VBA - 根据数组值将数据移动到另一个表 772 我有 2 个 Excel 表: 表进程: 和餐桌订单: 我想用 Orders 表中的 OrderID 填充 Process 表中的 OrderID 列 - 当标签值为 ProcessID 时。我很确定可以使用 VBA 完成,但我没有必要的背景知识,因此非常感谢任何帮助。我正在研究 Excel 数组,因此如果我需要将标签更改为 {217,218,229,230} 之类的东西 - 我知道该怎么做 :) 但从那时起呢? 这是我想要的最终结果: 由于我无法将其附加到评论中,因此仅针对 CLR 的回答提供一张图片作为回复: excel 3 个回答 Voted Best Answer CLR 2024-07-23T19:03:45+08:002024-07-23T19:03:45+08:00 您可以使用公式来实现此目的: =IFERROR(INDEX(OrderTab!A:A,MATCH("*|"&A2&"|*","|"&OrderTab!B:B&"|",0)),"Not Found") 假设您的订单表位于名为 的工作表上OrderTab。更改此设置。 结果: Foxfire And Burns And Burns 2024-07-23T19:01:38+08:002024-07-23T19:01:38+08:00 Excel365 可能有更简单的方法,但至少在旧版本中这是可行的: C列中的公式: =INDEX($E$2:$E$9;SUMPRODUCT(--(IFERROR(SEARCH("|"&A2&"|";"|"&$F$2:$F$9&"|");0)>0)*ROW($F$2:$F$9))-1) 为了使其工作,您需要按+ +将公式作为数组公式输入CTRLSHIFTENTER nkalvi 2024-07-23T23:50:57+08:002024-07-23T23:50:57+08:00 如果您有 Microsoft 365,您可以尝试一下这个(这里不争夺简短的答案:) 对于每个进程 ID MAP(process_ids, LAMBDA(process_id 在订单 ID 标签中,针对每个订单 ID 的标签 MAP(tags_for_order_ids, LAMBDA(tags_for_order_id, 拆分标签并寻找匹配项 OR(process_id = TRIM(TEXTSPLIT(tags_for_order_id, "|")) ` 如果匹配则返回订单 ID,删除不匹配项 ( #NA)TOCOL 在第一个单元格中输入以下内容(C2在示例中),无需向下填充 =LET( process_ids, TRIM(A2:A9), tags_for_order_ids, OrderTab!B2:B9, order_ids, OrderTab!A2:A9, MAP( process_ids, LAMBDA(process_id, IFERROR( TOCOL( IF( MAP( tags_for_order_ids, LAMBDA(tags_for_order_id, OR( process_id = TRIM(TEXTSPLIT(tags_for_order_id, "|")) ) ) ), order_ids, NA() ), 3 ), "no match" ) ) ) ) 在 Excel 单元格内开始新行文本 - Microsoft 支持
您可以使用公式来实现此目的:
假设您的订单表位于名为 的工作表上
OrderTab
。更改此设置。结果:
Excel365 可能有更简单的方法,但至少在旧版本中这是可行的:
C列中的公式:
为了使其工作,您需要按+ +将公式作为数组公式输入CTRLSHIFTENTER
如果您有 Microsoft 365,您可以尝试一下这个(这里不争夺简短的答案:)
MAP(process_ids, LAMBDA(process_id
MAP(tags_for_order_ids, LAMBDA(tags_for_order_id,
OR(process_id = TRIM(TEXTSPLIT(tags_for_order_id, "|"))
`#NA
)TOCOL
C2
在示例中),无需向下填充在 Excel 单元格内开始新行文本 - Microsoft 支持