Excel 如何在VBA中保持十六进制范围内的所有前导零?

Excel 如何在VBA中保持十六进制范围内的所有前导零?,excel,vba,Excel,Vba,我试图扩展十六进制数的范围。例如,我在K列有。。。1880和列L…188A我的范围是1880-188A当我扩展范围时,从列M开始我得到1880 1881 1882 1883 1884 1885 1886等 从其中一个帖子中,我复制并更改了VBA脚本以适应我的情况。。。而且它是有效的。。。但发现了两个问题。我所有的设备范围都是4位数,我需要保留所有前导零。 例如,如果我的范围是0000-0005。。。。这是错误的。。。不起作用。 如果我的范围是0001-0005,那么我得到1 2 3 4 5。。。

我试图扩展十六进制数的范围。例如,我在K列有。。。1880和列L…188A我的范围是1880-188A当我扩展范围时,从列M开始我得到1880 1881 1882 1883 1884 1885 1886等

从其中一个帖子中,我复制并更改了VBA脚本以适应我的情况。。。而且它是有效的。。。但发现了两个问题。我所有的设备范围都是4位数,我需要保留所有前导零。
例如,如果我的范围是0000-0005。。。。这是错误的。。。不起作用。
如果我的范围是0001-0005,那么我得到1 2 3 4 5。。。。我想成为0001 0002 0003 0004 0005

任何帮助都将不胜感激。。 谢谢,JCam 这是我使用它的脚本。。。只要在我的范围内没有前导零



您必须将数据格式化为字符串。你可以用一个简单的ie
'0045
来实现这一点

可能是这样的:

Cells(2,13+iCtr).Value=“”&Hex(cellKValue+iCtr)
您必须将数据格式化为字符串。你可以用一个简单的ie
'0045
来实现这一点

可能是这样的:

Cells(2,13+iCtr).Value=“”&Hex(cellKValue+iCtr)
分析工具包包含在DEC和Hex之间转换的函数-对于Hex,您可以指定数字的#,例如=DEC2HEX(14,4)给出“000E”。您可以通过“工具/加载项…”启用此程序包。通过添加包含DEC编号的列并显示十六进制AEEquivalent,您可以在根本不使用VBA的情况下解决您的任务


希望对您有所帮助分析工具包包含在DEC和十六进制之间转换的函数-对于十六进制,您可以指定数字的#,例如=DEC2HEX(14,4)给出“000E”。您可以通过“工具/加载项…”启用此程序包。通过添加包含DEC编号的列并显示十六进制AEEquivalent,您可以在根本不使用VBA的情况下解决您的任务

希望这能有所帮助

尝试以下方法:

Dim i as Integer 'This is the number you want to format
Dim l as Integer 'The length you want your format in (suppose it's six)
Dim h as String

l = 6
i = 47           'Any integer between 0 and 16,777,215

h = Replace(Space(l - len(hex(i))), " ", "0") & hex(i) 'h = "00002F"
变量h将返回格式文本“00002F”

干杯

瑞克。

试试这个:

Dim i as Integer 'This is the number you want to format
Dim l as Integer 'The length you want your format in (suppose it's six)
Dim h as String

l = 6
i = 47           'Any integer between 0 and 16,777,215

h = Replace(Space(l - len(hex(i))), " ", "0") & hex(i) 'h = "00002F"
变量h将返回格式文本“00002F”

干杯


里克。

如果将单元格格式化为文本,然后用前导零添加十六进制值,它们应该保留

如果处理的十六进制值已丢失前导零,则可以在文本编辑器中手动修复它们,然后将新单元格格式化为文本,然后粘贴值


或者,您可以通过右键单击这些单元格,选择format cells…,选择custom,然后输入类似“0000”的值(例如,如果您希望填充到四个字符),来定义这些单元格的自定义数字格式。这只会影响没有alpha字符的十六进制值。如果输入000A,Excel应保留零,并自动将其视为字符串。

如果将单元格格式化为文本,然后将十六进制值与前导零相加,则应保留

如果处理的十六进制值已丢失前导零,则可以在文本编辑器中手动修复它们,然后将新单元格格式化为文本,然后粘贴值


或者,您可以通过右键单击这些单元格,选择format cells…,选择custom,然后输入类似“0000”的值(例如,如果您希望填充到四个字符),来定义这些单元格的自定义数字格式。这只会影响没有alpha字符的十六进制值。如果输入000A,Excel应保留零并自动将其视为字符串。

同时更正单元格格式非常重要,因为如果格式为“常规”或“数字”,Excel将删除前导零。纠正这种情况的两种方法是:

  • 在值前面加一个引号(

  • 强制执行特定的格式

    Cells(2, 13 + iCtr).NumberFormat = "@" ' Text format
    
  • 至于添加领先的
    0
    的挑战。我有三个解决方案给你

  • 设置数字格式,使其显示前导的
    0
    。请注意,如果确实需要存储的值包含前导的
    0
    ,那么这可能不是理想的解决方案

    Cells(2, 13 + iCtr).NumberFormat = "000000"
    
  • 使用一个值为
    &H10000000
    的二进制
    ,然后使用
    Mid()
    Right()
    删除前导的
    1
    。这样做的缺点是十六进制数字不能超过7位。但是,考虑到Excel 2016中的最大列数为16384(十六进制为4位),最大行数为1048576(十六进制为6位)。这不是什么问题

    ' Using Mid()
    Cells(2, 13 + iCtr).Value = Mid(Hex(&H10000000 Or (cellKValue + iCtr)), 2)
    ' Desired # of digits = # of 0's       ^^^^^^^
    
    ' Using Right()
    Cells(2, 13 + iCtr).Value = Right(Hex(&H10000000 Or (cellKValue + iCtr)), 4)
    ' Desired # of digits                                                     ^
    
  • 使用
    String()
    Len()。这样做的缺点是必须将数字转换为十六进制两次,或者创建另一个变量来保存转换后的字符串

    Cells(2, 13 + iCtr).Value = String(5 - Len(Hex(cellKValue + iCtr)), "0") & Hex(cellKValue + iCtr)
    ' Desired # of digits              ^
    

  • 就个人而言,我更喜欢
    Mid()
    方法。它将确保您的原始值包含前导的
    0
    ,并且它具有最少的函数/操作数(因此它将执行最快的操作)。

    您还必须更正单元格格式,因为如果格式为常规或数字,Excel将删除前导的零。纠正这种情况的两种方法是:

  • 在值前面加一个引号(

  • 强制执行特定的格式

    Cells(2, 13 + iCtr).NumberFormat = "@" ' Text format
    
  • 至于添加领先的
    0
    的挑战。我有三个解决方案给你

  • 设置数字格式,使其显示前导的
    0
    。请注意,如果确实需要存储的值包含前导的
    0
    ,那么这可能不是理想的解决方案

    Cells(2, 13 + iCtr).NumberFormat = "000000"
    
  • 使用一个值为
    &H10000000
    的二进制
    ,然后使用
    Mid()
    Right()
    删除前导的
    1
    。这样做的缺点是十六进制数字不能超过7位。但是,如果Excel中的最大列数