在Excel中生成真值表。

10

我需要制作一个公式,可以给出任意列数量的真值表。

例子

四位真值表样例


1
我认为这个链接可能适用于VBA方法。 - user4039065
5个回答

7

目前推荐的答案对我不起作用。为了一个更简单的方法,我建议使用以下公式:

=IF(MOD(FLOOR((ROW()-ROW(TopRight))/(2^(COLUMN(TopRight)-COLUMN())), 1),2)=0,0,1)

TopRight是真值表的右上角单元格。

例如,如果您正在创建一个包含8个条目且从A3开始的真值表,请将TopRight替换为$H$3,然后向下和向右拖动公式。


基本解释:在真值表中,每隔2 ^ n行交替显示1或0,其中n是给定列到最右列的距离。


5
用一个静态引用替换FirstCell,引用包含第一个2^1的值所在的单元格,例如对于4位表(16个值)使用$D$1,并且通过自动填充到整个网格中(在此示例中为A1:D16)。
=IF(MOD(ROW()-ROW(FirstCell),POWER(2, ((COLUMN() - COLUMN(FirstCell)) * -1) + 1)) >= (POWER(2, ((COLUMN() - COLUMN(FirstCell)) * -1) + 1) / 2),1,0)

这背后的逻辑是:
如果当前行模2的当前列次幂(*-1,因为第一个值在最后一列,+1是因为从0开始)大于或等于2的当前列次幂的一半,则将该值设为1,否则将其设为0。

提醒那些使用區域設定並將逗號作為小數分隔符的人 => 將所有逗號替換為; - janv8000
非常有帮助!对于其他人,请注意,“FirstCell”是表格右上角的单元格。 - tcop

2
其他答案可能会令布尔(Boole)感到难过。这个答案旨在更为布尔。
你需要用 0 填充第一行(2)。
对于最低有效位列(D),反转:
- `= NOT(D2)*1`(单元格 D3 的公式,复制到 D4:D17) - 这将反转上面一行的值。`*1` 的数值化是必要的,以避免看到“TRUE”或“FALSE”。

enter image description here

对于所有其他列 - 添加:

  • =XOR(AND(D2:$D2),C2)*1(单元格C3的公式,复制到所有单元格A3:C17
  • 对于ADD函数,您希望异或该列上方的值与所有右侧列中所有位的AND运算结果。 (换句话说:如果上面的位右侧的所有位都为1,则应将上面的位翻转。此ADD公式适用于任意数量的列。)
  • AND范围引用到向上一行和向右一列的LSB列$ D ,也是向上一行。因此,$ D 锚定LSB列允许复制到任何其他列
  • 同样,*1用于结果的数字化TRUE/FALSE

enter image description here


0

以下是一个 Microsoft 365 的一行代码:

=TRANSPOSE(LET(n,5,m,2^n,x,SEQUENCE(n,m,0),y,FLOOR(x/m,1),z,FLOOR((x-y*m)/2^(n-1-y),1),MOD(z,2)))

n 是所需的列数,m 存储每列的长度。

该公式找到 x 所在的行并将值存储在 y 中,然后逐步将每行分成正确的格式,并输出结果 mod 2 以生成输入真值表集。

使用 TRANSPOSE 是因为 SEQUENCE 将数字从左到右、从上到下放置。


-1
0 0 0 0  
0 0 0 1   
0 0 1 0   
0 0 1 1   
0 1 0 0    
.....   

请记住,这些数字只能是0或1。

对于D列:D2=1-D1
对于C列:C2=IF(D1=1,1-D1,D1)
对于B列:B2=IF((C1=1)*(D1=1),1-B1,B1)
.....

完成后,请复制没有公式的数字到您的真值表中,以避免Excel计算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接