Как сохранить все ведущие нули в шестнадцатеричном диапазоне в VBA? - PullRequest
1 голос
/ 07 июля 2010

Я пытаюсь расширить диапазон шестнадцатеричных чисел.Например, для столбца 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

Ответы [ 5 ]

3 голосов
/ 07 июля 2010

Пакет анализа содержит функции для преобразования между DEC и HEX - для HEX вы можете указать количество цифр, например, = DEC2HEX (14,4) дает «000E».Вы можете включить этот пакет через «Инструменты / Надстройки ...».Добавляя столбцы с номерами DEC и отображая эквивалент HEX, вы можете решить свою задачу вообще без VBA ...

Надеюсь, что это поможет

0 голосов
/ 16 марта 2019

Очень важно, чтобы вы также исправили форматирование ячеек, потому что Excel удалит начальные нули, если формат - Общий или Число. Два способа исправить это:

  1. Префикс вашего значения с одинарной кавычкой (')

    Cells(2, 13 + iCtr).Value = "'" & ...
    
  2. Применение определенного формата.

    Cells(2, 13 + iCtr).NumberFormat = "@" ' Text format
    

Что касается задачи добавления ведущих 0. У меня есть три решения для вас.

  1. Установите формат чисел так, чтобы он отображал первые 0. Обратите внимание, что это может быть не идеальным решением, если вам действительно нужно, чтобы сохраненное значение включало ведущие 0.

    Cells(2, 13 + iCtr).NumberFormat = "000000"
    
  2. Используйте двоичный файл 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                                                     ^
    
  3. Используйте функции String() и Len() для дополнения значения 0. Это имеет тот недостаток, что вы должны преобразовать число в шестнадцатеричное число дважды или создать другую переменную для хранения преобразованной строки.

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

Лично я предпочитаю метод Or и Mid(). Это гарантирует, что ваше необработанное значение включает в себя ведущие 0 и имеет наименьшее количество функций / операций (таким образом, оно будет выполнять самое быстрое).

0 голосов
/ 26 октября 2016

Если вы отформатируете ячейку как текст, а затем добавьте свое шестнадцатеричное значение с ведущими нулями, они должны остаться.

Если вы имеете дело с шестнадцатеричными значениями, которые уже потеряли свои ведущие нули, вы можете вручную исправить их в текстовом редакторе, затем отформатировать новые ячейки как текст и вставить значения.

Кроме того, вы можете определить пользовательский формат чисел для этих ячеек, щелкнув по ним правой кнопкой мыши, выбрав Формат ячеек ..., выберите Пользовательский, затем введите значение, например «0000» (если, скажем,Я хотел бы дополнить до четырех символов).Это повлияет только на шестнадцатеричные значения, которые не имеют альфа-символа.Если вы введете 000A, Excel должен сохранить нули и автоматически обработать его как строку.

0 голосов
/ 12 февраля 2014

Попробуйте это:

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".

Приветствия

Рик.

0 голосов
/ 07 июля 2010

вы должны отформатировать данные в виде строки. Вы можете сделать это с одним вполне, т.е. '0045.

может быть что-то вроде этого:
Cells(2, 13 + iCtr).Value = "'" & Hex(cellKValue + iCtr)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...