如何格式化十六进制的Microsoft Excel 2007单元格?


27

我想在Microsoft Excel 2007中以十六进制格式设置单元格的格式,但是找不到如何执行此操作。

是否有内置方法将一个单元的基数从10更改为16?

Answers:


18

如前所述,公式= DEC2HEX(A1)转换为十六进制,而DEC2HEX(A1,8)转换为0前缀表示32位的十六进制。加前导0会使数字更易读,特别是如果您使用定点字体,则当数字中的所有数字恰好为0-9(例如327701 = 50015)时,十六进制和十进制版本可能会混淆。

一种改进是添加“ 0x”前缀。有两种方法可以做到这一点。=“ 0x”&DEC2HEX(A1,8)可以解决问题,但是它将字段更改为文本字段,因此不再可以在公式中轻松使用。另一种方法是使用自定义格式。如果将自定义格式“ 0x” @应用于单元格,则该单元格的值仍可用于公式中。例子:

╔═══╦════════════════╦════════════╦═══════════════ ══════════════╦═══════════════╗
║A║B║║
╠═══╬════════════════╬════════════╬═══════════════ ══════════════╬═══════════════╣
║1║值║对应公式║数字格式║
║2║小数║11162790║11162790║一般║
║3║十六进制║AA54A6║= DEC2HEX(B2)║一般║
║4║前0的║AA 00AA54A6║= DEC2HEX(B2,8)║一般║
║5║文本0x前缀║0x00AA54A6║= DEC2HEX(B2,8)║“ 0x” @║
║6║文本0x前缀║0x00AA54A6║=“ 0x”&DEC2HEX(B2,8)║常规║
║7║使用B5║AA54A600║= DEC2HEX(HEX2DEC(B5)* 256)║一般║
║8║使用B5║0xAA54A600║= DEC2HEX(HEX2DEC(B5)* 256)║“ 0x” @║
║9║尝试使用B6║#NUM!║= DEC2HEX(HEX2DEC(B6)* 256)║常规║
╚═══牛皮════════════════牛皮════════════牛皮════════════ ══════════════牛皮═══════════════╝


但是,仍然很难读取具有不同数字的大数字,因此我喜欢将逗号放入十进制数字,将“ _”放入十六进制数字。首先,您需要获取数字的高16位。可以使用= INT(A1 / 2 ^ 16)检索32位数字的高16位。除以2 ^ 16就像右移16位,而INT则去除了小数部分。MOD可用于获取任何32或64位数字的低16位。= MOD(A1,2 ^ 16)。MOD有效地取回其余部分,即低16位。这是一个表,显示了此操作。

╔═══╦═════════════╦═══════════════╦═══════════════ ═════════════════════╦═════════╗
║A║B║║
╠═══╬═════════════╬═══════════════╬═══════════════ ═════════════════════╬═════════╣
║1║值║对应公式Formula格式║
║2║小数║3,098,743,209║3098743209║#,## 0║
║3║高位字节║B8B3║= DEC2HEX(INT(B2 / 2 ^ 16),4)║一般║
║4║低字节║11A9║= DEC2HEX(MOD(B2,2 ^ 16))║一般║
║5║整数║0xB8B3_11A9║=“ 0x”&DEC2HEX(INT(B2 / 2 ^ 16),4)║一般║
║&“ _”和DEC2HEX(MOD(B2,2 ^ 16),4)║
╚═══牛皮═════════════牛皮═══════════════牛皮═══════════════ ═════════════════════牛皮═════════╝


顺便说一句,我要非常感谢https://ozh.github.io/ascii-tables/。我使用该链接创建了ASCII文本表。我只是将表格从excel电子表格复制到其输入部分,然后它会自动创建漂亮的Unicode文本布局。


16

如果要格式化一个单元格,以便您可以键入一个十进制数字并自动将其显示为十六进制数字,那么这是不可能的。您可以将单元格设置为文本格式并直接输入十六进制数字(但请注意,Excel无法将其用于计算),也可以使用DEC2HEX()HEX2DEC()函数在以10为基数和以16为基数之间进行转换。


1
作为参考,还有DEC2BIN()转换为二进制的。对于固定宽度的二进制文件,请使用类似=TEXT(DEC2BIN(A1), "0000")
Tor Klingberg

1
在德语本地化的Excel 2013上,DEC2HEX和HEX2DEC导致错误消息#NAME?。借助Office帮助,我可以发现这些函数分别称为DEZINHEX和HEXINDEZ。
伯恩哈德·希勒

如何将= 0x1234AB扩展到= 0x001234AB(我需要固定宽度8)?
Danijel

@Danijel使用DEC2HEX的第二个参数。
Vincent G

7

如果A1使用要转换的单元格=DEC2HEX(A1)


2
您可能要在十六进制值中添加前导“ 0x”。使用="0x"&DEC2HEX(A1,4)得到的结果,看起来像一样0x1AF2
User5910

4

如果需要对转换为十六进制的数字执行数学运算,请先将其转换为十进制,然后执行该运算,然后再转换回十六进制。

例如,如果单元格A1具有十六进制数字,例如将根据以下公式创建:

=DEC2HEX(17)

它将显示为11,并且单元格A2具有公式:

=DEC2HEX(165)

它将显示为A5,并且您要将它们添加在一起,那么此公式将获得所需的结果:

=DEC2HEX(HEX2DEC(A1)+HEX2DEC(A2))

将显示为 B6


1
=REPT("0",4-LEN(DEC2HEX(B3)))&DEC2HEX(B3)

REPT公式根据通过从十进制转换后生成的十六进制字符串的长度和所需的十六进制字符串长度来重复“ 0”。在此示例中,我希望生成长度为4的十六进制字符串。

然后,您将前导零连接到实际的HEX字符串,从而生成所需长度的HEX值。

好处:

  1. 轻松将公式处理到其他工作表。只有两个单元格引用十进制值B3才能重新分配。
  2. Excel将此公式的结果视为十六进制值。您也可以在“ 0x”前面加上前缀,但我认为没有必要。

注意:我在复制十六进制字符串时会用到它,并且它们会以不同的长度被复制。我首先从原始值生成一列十进制值,然后可以对它运行此公式。


0

我找到了一种解决方案,以确保可以将这些十六进制数字格式化为HTML格式:

SWITCH(LEN(DEC2HEX(B6)),1,"000"&DEC2HEX(B6),2,"00"&DEC2HEX(B6),3,"0"&DEC2HEX(B6),4,DEC2HEX(B6))

2
对代码中发生的事情的解释将使答案更有用。
WilliamKF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.