具有字符串操作的复杂跨工作表 Excel 公式
Complex cross-worksheet Excel formula with string manipulation
我正在从 C# 代码生成 Excel 工作簿,但代码将在那里结束,因为工作簿必须可分发给无法访问 VSTO 内容的人。
工作簿包含:
A) “工作表 1”包含一个下拉列表,根据所选项目给出“1”或“2”。
B) “工作表 1”在网格布局中也有几个单元格,当前包含“1”。
C) 在“工作表 2”上,单元格 A1 和 A2 中有字符串值(与下拉项相关),例如
C01010101
C01010102
D) 在“工作表 3”上与工作表 1 单元格相同的位置(见上面的 B)有相关的字符串值,如下所示:(注意这些值可以是任意长度)
复选框|001|C010101010101
复选框|002|C010101010102
复选框|002|C010101010103
等
我需要做的是在 B 的单元格中添加一个公式,这样它们就不会只包含“1”,而是根据以下逻辑得出一个值:
N1 = 下拉列表的选定索引 (1-2)(在上面的 A 中)
S2 = 来自“工作表 2”的字符串值,单元格范围“A”& N1
S3 = 来自“工作表 3”的第三个管道分隔字段值,来自与“工作表 1”中对应的单元格(即相同地址、C5、B6 等)
如果S2与S3的左端匹配,return“1”否则return“0”
最后,如果可能的话,我想给单元格上色,这样如果 returned 它们有灰色背景,但如果有人用 0 手动改写单元格,这必须保持不变。
我不希望任何人提供完整的解决方案 - 当然,那会很棒! - 但所有关于如何实现这一目标的建议都将不胜感激!
[编辑]
附上图片。
请注意,虽然输出网格显示有刻度,但实际上包含“1”(如果选中)或“0”(如果未选中)。
这是公式将要替换的“1”,因为如果选择了适当的列表项,则单元格只能是 "valid" - 如果这有意义的话:$
[/编辑]
[编辑2]
好的,这是我目前的进度:
=IF(LEFT(MID(F17,FIND("|",F17,FIND("|",F17)+1)+1,999),LEN(E17))=E17,1,0)
对于这个简化的 (:o) 示例,F17
是包含竖线分隔字符串的单元格,E17
包含要匹配的下拉值。
现在我需要研究如何使用从下拉列表中读取的行号来引用范围...
[/Edit2]
这是我得出的最终公式:
=IF(
LEFT(
MID(
Sheet2!V19,
FIND(
"|",
Sheet2!V19,
FIND(
"|",
Sheet2!V19
)+1
)+1,
999),
LEN(
INDIRECT(
"Sheet3!"&ADDRESS(T16,1)
)
)
)=INDIRECT(
"Sheet3!"&ADDRESS(T16,1)
),
1,
0
)
其中 Sheet2
是包含管道分隔字符串的 sheet,Sheet3
列 A
包含下拉查找值,V19
是当前单元格,T16
是包含下拉菜单的单元格。
根据需要,这会导致当前单元格显示 1
如果下拉查找匹配竖线分隔字符串中的第三个单词,否则显示 0
。
我要去酒吧...
我正在从 C# 代码生成 Excel 工作簿,但代码将在那里结束,因为工作簿必须可分发给无法访问 VSTO 内容的人。
工作簿包含:
A) “工作表 1”包含一个下拉列表,根据所选项目给出“1”或“2”。
B) “工作表 1”在网格布局中也有几个单元格,当前包含“1”。
C) 在“工作表 2”上,单元格 A1 和 A2 中有字符串值(与下拉项相关),例如 C01010101 C01010102
D) 在“工作表 3”上与工作表 1 单元格相同的位置(见上面的 B)有相关的字符串值,如下所示:(注意这些值可以是任意长度)
复选框|001|C010101010101
复选框|002|C010101010102
复选框|002|C010101010103
等
我需要做的是在 B 的单元格中添加一个公式,这样它们就不会只包含“1”,而是根据以下逻辑得出一个值:
N1 = 下拉列表的选定索引 (1-2)(在上面的 A 中)
S2 = 来自“工作表 2”的字符串值,单元格范围“A”& N1
S3 = 来自“工作表 3”的第三个管道分隔字段值,来自与“工作表 1”中对应的单元格(即相同地址、C5、B6 等)
如果S2与S3的左端匹配,return“1”否则return“0”
最后,如果可能的话,我想给单元格上色,这样如果 returned 它们有灰色背景,但如果有人用 0 手动改写单元格,这必须保持不变。
我不希望任何人提供完整的解决方案 - 当然,那会很棒! - 但所有关于如何实现这一目标的建议都将不胜感激!
[编辑]
附上图片。
请注意,虽然输出网格显示有刻度,但实际上包含“1”(如果选中)或“0”(如果未选中)。
这是公式将要替换的“1”,因为如果选择了适当的列表项,则单元格只能是 "valid" - 如果这有意义的话:$
[/编辑]
[编辑2]
好的,这是我目前的进度:
=IF(LEFT(MID(F17,FIND("|",F17,FIND("|",F17)+1)+1,999),LEN(E17))=E17,1,0)
对于这个简化的 (:o) 示例,F17
是包含竖线分隔字符串的单元格,E17
包含要匹配的下拉值。
现在我需要研究如何使用从下拉列表中读取的行号来引用范围...
[/Edit2]
这是我得出的最终公式:
=IF(
LEFT(
MID(
Sheet2!V19,
FIND(
"|",
Sheet2!V19,
FIND(
"|",
Sheet2!V19
)+1
)+1,
999),
LEN(
INDIRECT(
"Sheet3!"&ADDRESS(T16,1)
)
)
)=INDIRECT(
"Sheet3!"&ADDRESS(T16,1)
),
1,
0
)
其中 Sheet2
是包含管道分隔字符串的 sheet,Sheet3
列 A
包含下拉查找值,V19
是当前单元格,T16
是包含下拉菜单的单元格。
根据需要,这会导致当前单元格显示 1
如果下拉查找匹配竖线分隔字符串中的第三个单词,否则显示 0
。
我要去酒吧...