选项 1 - 手动输入系数

选项 1 - 手动输入系数

这可能有点难以解释,但我会尽力。

我有很多数字,我需要反转其中一些。只有人类才能决定哪些数字需要反转,哪些不需要反转。因此需要涉及手动输入的列。我有三种方法可以做到这一点,但我对其中任何一种都不满意,有一个更好的方法吗?


选项 1 - 手动输入系数

在此处输入图片描述

  • 无需额外的列
  • 我可以轻松使用条件格式或直接执行布尔运算。
  • 我无法快速打字。我必须在每一行输入两个字符,这很慢。或者我必须在某些行输入两个字符,在其他行输入一个字符 - 甚至更慢。

选项 2 - 输入 1 或 0,使用带有 IF 的辅助列来提供 +1/-1 因子

在此处输入图片描述

手动输入的是一或零,然后 C 列提供一个因子。

  • 我只需要快速输入一个字符。
  • 我可以轻松使用条件格式或直接执行布尔运算。
  • 我对如何定义 1 和 0 的含义感到不舒服,我感到一种心理冲突:
    • +1 的因子意味着不是因此反转数字不是执行操作。这意味着如果我不想反转数字,我需要输入 0。结果,我需要输入 1 来产生因子 -1。这太荒谬了。
    • 好的,让我们定义此列的逻辑,以便 1 导致 +1,0 导致 -1。那么我该如何为该列赋予一个有意义的标题呢?“保留原有标志吗?”- 我不喜欢用这种方式询问是否应该执行反转操作。在这个选项中,我必须使用人类语言来有效地表示“是”意味着否定。其他选项都避免了这一点。

选项 3 - 输入 + 或 -,使用带有 IF 的辅助列来提供 +1/-1 因子

在此处输入图片描述

  • 我可以快速打字,而不需要担心列标题的措辞。
  • 我的输入是文本,我无法轻松地使用条件格式或直接执行布尔运算。

答案1

如果人类必须决定在哪里“逆转”,那么除了让某人以某种方式做出决定之外没有其他办法了……最后两者中的任何一个都可能是首选。


要进行实际的“逆转”,您可以使用与以下任何一种方法类似的方法......

=-A1                                      将交换任何非零数字的符号。
=NOT(A2)                               交换 TRUE/FALSE,
=NOT(A3)*1                           交换 1/0

和...

=IF(A4="YES","NO","YES")
将明确的“YES”变成“NO”(其他任何内容都变成YES,区分大小写)

对于明确的是/否
=IF(A4="YES","NO",IF(A4="YES","NO","Unknown entity")

此外,对于除 Y 或 N 之外的任何内容,Y/N
=MID("NY",FIND(A5,"YN"),1)
都会显示正确的“#VALUE!”

它的变体表示完整的“是/否”,不区分大小写。
=TRIM(MID("YESNO",FIND(UPPER(A6),"NO YES"),3))
注意替换 YES 时 No+Space 的结果,除非您有 TRIM()。

... 最后,将“#VALUE!”或任何其他错误更改为更有意义的内容...
=IFERROR(...;"That's a fail!")
将显示显示的文本。
将“...”替换为任何可能失败的公式。

答案2

您可以在工作表中使用宏,这样当您双击单元格时,它会将值乘以 -1,例如:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo MyEndSub
If Not Intersect(Target, Range("D2:D10")) Is Nothing Then Target = Target * -1
MyEndSub:
End Sub

只需更改上面的范围 D2:D10 以覆盖感兴趣的范围,如果有多个范围,只需重复感兴趣的范围的行即可。按 ALT + F11 打开开发人员窗口,然后在工作表的代码中插入代码(双击项目窗口中的工作表名称打开工作表的代码窗口)。

然后,当您双击该单元格时,它会乘以 -1,如果愿意的话,您可以选择通过右键单击来执行此操作。

贾斯汀

相关内容