如何在 Excel 中跨多个单元格进行十六进制计算?

如何在 Excel 中跨多个单元格进行十六进制计算?

我正在处理一个电子表格,其中有一个[256]x[256]如下所示的表格或网格:

     B      c   D     E      F    G                     IY
3  Address:   [byte][byte][byte][byte]    ...          [256]
4  0x100000  
5  0x100400
6  0x100800
7  0x100C00
.
.
.
259 

该表具有以下自定义格式"0x"@

现在,我正在尝试进行计算...我正在尝试计算列中垂直向下的地址值B

我不再手动输入每个值B5B6而是BN尝试在0x400每次向下移动一行时增加它......

人们会认为对于单元格B5他们会使用类似的东西=SUM(HEX2DEC(B4),1024),因为B4显示为十六进制转换0x100000为十进制然后添加1024因为1024十进制是0x400十六进制。

0x=Sum(HEX2DEC(B4),1024))但是,Excel 正在打印单元格中的文本。

我不确定我在这里做错了什么。我期望得到0x100400打印结果。

我尝试了各种公式组合,但似乎都没有效果,但是,如果我做一些简单的事情,比如使用单元格中的公式将单元格设置D4为等于,Excell 就会显示在单元格中。B4=B4D40x100000D4

当我尝试使用任何其他公式时,我没有得到十六进制的值......

即使我尝试:

`=Sum(B4,1024)` in `B5` 

它仍然显示

`0x=Sum(B4,1024)` in `B5` 

当我尝试时:

`=Sum(B4,0x400)` in `B5` 

再次显示

`0x=Sum(B4,0x400)` in `B5`...

答案1

尝试一下这个公式:

="0x" & DEC2HEX(SUM(HEX2DEC(MID(B2,3,10)), HEX2DEC(400)))

提取 B2 中的 后部分0x,将其转换为十进制。将其添加到转换为十进制的 400 中。然后将结果转换回十六进制,然后将其与 连接起来0x

图片:

答案2

我认为这与 excel 将其视为函数前的字符串有关。这样,格式就胜过了函数计算。

如果您执行 =TEXT(DEC2HEX(SUM(HEX2DEC(B4),1024)),"0"),它在我的测试中有效。

答案3

问题几乎肯定出在结果格式为“0x”@ 的单元格中。

发帖人使用的是 Excel 2007,我无法在其中进行测试。但是,我们都习惯于看到在具有常规格式的单元格中输入各种公式,按下后Enter会看到结果与引用单元格的格式一起出现。何时由 Excel 决定。由于这里只引用了一个单元格,所以可以。

今天(2021 年)使用 Office 365,对于这种情况的发生,我没有遇到任何问题,因为...它不会。但也许在 Excel 2007 中会这样。

但是,存在一种相关但更有可能的可能性:输出单元格直接格式化为“0x”@。

请注意,公式的结果是一个字符串(Excel 中的所有非小数实际上都是文本字符串)。因此它完全符合格式... Excel 可能只是接受输入的字符串(即使它以“=”开头),并将其作为字符串处理,使其符合“0x”@ 字符串的格式。

给出所显示的准确结果。

当我在常规格式的单元格中输入公式时,如上所述,它工作得很好。输入它进行编辑,然后保存(非)编辑就可以了。但如果我事先格式化单元格,它就无法给出好的结果,而是最终与此处报告的完全一样。

因此,虽然提到的第一种可能性可能是这种情况,但第二种可能性肯定是这种情况。因此,这肯定是这种情况(至少您知道,这是高度肯定的)。

(主要的反对意见是“哦不,Excel 总是将以‘=’开头的内容视为公式”,但事实证明实际情况并非如此,甚至不仅仅是列出它可能不会将其视为公式的时间。)

如何解决?只需将输出列恢复为常规格式,这样公式就可以工作了,然后,由于这样做没有任何损失,因为输出已经是字符串,而不是数字,因此TEXT()使用格式将其包装起来。如果结果单元格中的值需要进一步使用,请将其引用包装为RIGHT()适合情况的引用(可能需要LEN()在其中,但所有地址的长度相同,可以对进行硬编码RIGHT()。将其结果传递到使用引用的任何公式中。

相关内容