我正在使用C#代码生成Excel工作簿,但代码将以此结束,因为工作簿必须可分发给无法访问VSTO内容的人员。
工作簿包含:
A)“工作表1”,其中包含一个下拉列表,根据所选项目给出“1”或“2”。
B)“工作表1”在网格布局中也有几个单元格,当前包含“1”。
C)在“工作表2”中,单元格A1和A2中存在字符串值(与下拉项目相关),例如, C01010101 C01010102
D)在与工作表1单元格相同位置的“工作表3”(参见上面的B)中,存在相关的字符串值,如下所示:(请注意,这些值可以是任意长度)
复选框| 001 | C010101010101
复选框| 002 | C010101010102
复选框| 002 | C010101010103
等
我需要做的是在B处的细胞中添加一个公式,而不仅仅是包含" 1"它们根据以下逻辑得出一个值:
N1 =下拉选择索引(1-2)(上面A中)
S2 =来自“工作表2”的字符串值,单元格范围“A”& N1
S3 =来自“工作表3”的第3个管道分隔字段值,来自与“工作表1”中相对应的单元格(即相同的地址,C5,B6等)
如果S2与S3的左端匹配,则返回“1”,否则返回“0”
最后,如果可能的话,我想为单元格着色,这样如果返回0则它们具有灰色背景,但如果有人用0手动改写单元格,则必须保持不变。
我不希望任何人提供整个解决方案 - 当然这会很棒! - 但是我很高兴收到关于如何实现这一目标的所有建议!
[编辑]
附图片。
请注意,虽然输出网格以刻度显示,但实际上这些包含" 1"如果勾选或" 0"如果没有。
" 1"公式将被替换,因为单元格应该只有"有效"如果选择了适当的列表项 - 如果有意义:$
[/编辑]
[EDIT2]
好的,这是我目前的进展:
=IF(LEFT(MID(F17,FIND("|",F17,FIND("|",F17)+1)+1,999),LEN(E17))=E17,1,0)
对于此简化的(:o)示例F17
是包含管道分隔字符串的单元格,E17
包含要匹配的下拉值。
现在我需要弄清楚如何使用从下拉列表中读取的行号来引用范围...
[/ EDIT2]
答案 0 :(得分:0)
这是我提出的最终公式:
=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
是包含管道分隔字符串的工作表,Sheet3
列A
包含下拉查找值,V19
是当前单元格,{{1是包含下拉列表的单元格。
根据需要,如果下拉查找与管道分隔字符串中的第三个字匹配,则会导致当前单元格显示T16
,否则会显示1
。
我要去酒吧......