作为我的 ICT 工作的一部分,我们需要创建一款战舰游戏,而我想到的一个方法是使用
=IF(ISNUMBER(SEARCH("*x*",C3)),"HIT","MISS")
检查该单元格是否包含 x,但显然它会是静态的,并且始终检查 C3。我需要搜索 C3:G8,但如果我这样做
=IF(ISNUMBER(SEARCH("*x*",C3:G8)),"HIT","MISS")
它将搜索所有这些单元格,并且所有单元格都必须包含 x,或者不包含 x,才能返回 HIT 或 MISS。
我在想,如果你双击一个单元格,例如 D4,它会将 D4 放入公式中,就像动态公式一样。这可能吗?
我是否以错误的方式处理这个问题?如果是的话,有什么更好的方法吗?
谢谢
答案1
您描述的“动态公式”需要 VBA。我提供了一个入门方法 - 它允许用户输入坐标并确定他们是否命中或未命中。
结果单元格中使用的公式是:
=IF(INDEX(C3:D5,MATCH(H3,B3:B5,0),MATCH(I3,C2:D2,0))="x","HIT","MISS")
为了使其更具可读性(因为它是家庭作业......),我倾向于使用命名范围,因此:
=IF(INDEX(grid,MATCH(H3,y_axis,0),MATCH(I3,x_axis,0))="x","HIT","MISS")
。
更新
这是另一种类似的简单方法,它使用条件格式来显示命中和未命中:
条件格式使用以下简单公式:
=AND(B3="x",H3="x") //for a hit
=AND(B3="x",H3="") //for a miss
剩余命中数的公式如下:
=COUNTIF(H3:L16,"x")-SUMPRODUCT((H3:L16="x")*(B3:F16="x"))