我正在尝试扩展一系列十六进制数字。例如,我在列K ... 1880和列L ... 188A我的范围是1880-188A当我扩展范围时,从列M开始我得到1880 1881 1882 1883 1884 1885 1886等等。
从我发布的一个帖子中我复制并更改了VBA脚本以适合我的情况......它有效......但是发现了2个问题。我的所有设备范围都是4位数,我需要保留所有前导零 例如,如果我的范围是0000 - 0005 ....它的错误......将无效 如果我的范围是0001 - 0005那么我得到1 2 3 4 5 ....我想成为0001 0002 0003 0004 0005
任何帮助将不胜感激.. 谢谢,JCam 这是我使用它的脚本......只要我的范围内没有前导零
Sub FillHexNumbers()
Dim cellKValue As Long
Dim cellLValue As Long
Dim diffBetweenKAndL As Long
Dim iCtr As Long
cellKValue = CLng(Format("&h" & Cells(2, 11).Text, "###"))
cellLValue = CLng(Format("&h" & Cells(2, 12).Text, "###"))
diffBetweenKAndL = cellLValue - cellKValue
For iCtr = 0 To diffBetweenKAndL
Cells(2, 13 + iCtr).Value = Hex(cellKValue + iCtr)
Next
End Sub
答案 0 :(得分:3)
分析工具包包含在DEC和HEX之间进行转换的功能 - 对于HEX,您可以指定数字位数,例如= DEC2HEX(14,4)给出“000E”。您可以通过“工具/加载项...”启用此包。通过添加包含DEC编号的列并显示HEX等效值,您可以在没有VBA的情况下解决您的任务......
希望有所帮助
答案 1 :(得分:0)
您必须将数据格式化为字符串。你可以用一个非常'0045
完成这个。
可能是这样的:
Cells(2, 13 + iCtr).Value = "'" & Hex(cellKValue + iCtr)
答案 2 :(得分:0)
试试这个:
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”。
干杯,
瑞克。
答案 3 :(得分:0)
如果将单元格格式化为文本,然后添加带前导零的十六进制值,它们应保留。
如果您正在处理已丢失其前导零的十六进制值,则可以在文本编辑器中手动修复它们,然后将新单元格格式化为文本,并粘贴值。
或者,您可以通过右键单击这些单元格,选择“设置单元格格式...”,选择“自定义”,然后输入类似" 0000" (如果,比方说,你喜欢填充到四个字符)。这只会影响不具有字母字符的十六进制值。如果输入000A,Excel应保留零并自动将其视为字符串。
答案 4 :(得分:0)
还必须更正单元格格式,这很重要,因为如果格式为“常规”或“数字”,则Excel会删除前导零。纠正此问题的两种方法是:
用单引号('
)前缀您的值
Cells(2, 13 + iCtr).Value = "'" & ...
强制使用特定格式。
Cells(2, 13 + iCtr).NumberFormat = "@" ' Text format
关于添加前导0
的挑战。我为您提供了三种解决方案。
设置数字格式,使其显示前导0
。请注意,如果您确实需要存储值包括前导0
,那么这可能不是理想的解决方案。
Cells(2, 13 + iCtr).NumberFormat = "000000"
使用值为Or
的二进制&H10000000
,然后使用Mid()
或Right()
除去前导1
。这样做的缺点是您的数字不能超过7位数(十六进制)。但是,鉴于Excel 2016中的最大列数为16,384(十六进制4位数字),最大行为1,048,576(十六进制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()
函数用0
来填充值。这样做的缺点是必须将数字转换为十六进制两次,或者创建另一个变量来保存转换后的字符串。
Cells(2, 13 + iCtr).Value = String(5 - Len(Hex(cellKValue + iCtr)), "0") & Hex(cellKValue + iCtr)
' Desired # of digits ^
我个人更喜欢Or
和Mid()
方法。它将确保您的原始值包括前导0
,并且具有最少的功能/操作(因此执行起来最快)。