Excel 如何在VBA中保持十六进制范围内的所有前导零?
我试图扩展十六进制数的范围。例如,我在K列有。。。1880和列L…188A我的范围是1880-188A当我扩展范围时,从列M开始我得到1880 1881 1882 1883 1884 1885 1886等 从其中一个帖子中,我复制并更改了VBA脚本以适应我的情况。。。而且它是有效的。。。但发现了两个问题。我所有的设备范围都是4位数,我需要保留所有前导零。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。。。
例如,如果我的范围是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中的最大列数