Родились сегодня:
Антонина


Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Модератор

672

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

325

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

278

Россия, Санкт-Петербург


ID: 325460

CradleA

Академик

211

Беларусь, Минск


ID: 401888

puporev

Профессор

140

Россия, Пермский край


ID: 400815

alexleonsm

6-й класс

130


ID: 137394

Megaloman

Мастер-Эксперт

120

Беларусь, Гомель


8.8.12

06.05.2021

JS: 2.8.16
CSS: 4.5.4
jQuery: 3.6.0
DataForLocalStorage: 2021-05-06 21:16:03-standard


Установка, настройка и работа в пакете Microsoft Office.

Администратор раздела: Megaloman (Мастер-Эксперт)

Консультация онлайн # 200370

Раздел: Пакет MSOffice
Автор вопроса: 23071996 (Посетитель)
Дата: 03.03.2021, 14:47 Консультация закрыта
Поступило ответов: 1

Прошу помощи в следующем вопросе
Считать с первого столбца рабочего листа N (N вводится с
клавиатуры) вещественных чисел типа Single. Перевести числа в шестнадцатеричный формат и вывести в соседний столбец. В шестнадцатеричном представлении числа поменять 1-ую цифру с 8-ой, 2-ую - с 7-ой, 3-ю с 6-ой, 4-ю с 5-ой и т.д. Полученное число перевести в
десятичную систему счисления и вывести в 3 столбец рабочего листа.

Заранее спасибо

Последнее редактирование 03.03.2021, 15:10 Сергей Фрост (Управляющий)
Ответ # 280800 от Megaloman
Здравствуйте, 23071996!
Вы не описали требований к методике конвертации чисел в разные системы счисления, поэтому, в соответствии с принципом: "Не стоит множить сущности без необходимости" - при написании макроса использую стандартные функции листов Excel: Dec2Hex и Hex2Dec.
Код
Sub Sub_200370()

Const RA = "A1"             ' Адрес ячейки с первым элементом массива чисел
    
Dim N, CN, ierr
Dim RRA, In10, N1, N2, i, j
Dim RB, RRB
Dim RC, RRC
Dim RD, RRD

N = InputBox("Введите целое N>0")

ierr = False
If IsNumeric(N) Then
    CN = CDbl(N)
    ierr = CDbl(CN) > 0 And Int(CN) = CN
End If

If Not ierr Then
    MsgBox "Введено неверное число" + vbCrLf + N
    Exit Sub
End If

ReDim In10(1 To N, 1) As Single
ReDim In16(1 To N)
ReDim Out10(1 To N)

Cells.Interior.Pattern = xlNone
Cells.Font.ColorIndex = xlAutomatic
    
RRA = RA + ":" + Range(RA).Offset(N - 1, 0).Address

RB = Range(RA).Offset(0, 1).Address
RRB = RB + ":" + Range(RB).Offset(N - 1, 0).Address

RC = Range(RA).Offset(0, 2).Address
RRC = RC + ":" + Range(RC).Offset(N - 1, 0).Address
    
In10 = Range(RRA)
N1 = LBound(In10, 1)
N2 = UBound(In10, 1)

For i = N1 To N2
    If IsNumeric(In10(i, 1)) And Len(Trim(In10(i, 1))) > 0 Then
        Range(RA).Offset(i - 1, 0).Font.Color = -11489280
        In16(i) = CStr(Application.WorksheetFunction.Dec2Hex(In10(i, 1)))
        Out10(i) = Application.WorksheetFunction.Hex2Dec(Exch(CStr(In16(i))))
    Else
        Range(RA).Offset(i - 1, 0).Font.Color = -16776961
        In16(i) = ""
        Out10(i) = ""
    End If
Next

Range(RRB) = Application.WorksheetFunction.Transpose(In16)
Range(RRC) = Application.WorksheetFunction.Transpose(Out10)

End Sub

Function Exch(S As String)
    Dim SS, k, j
    k = Len(Trim(S))
    SS = ""
    For j = k To 1 Step -1
        SS = SS + Mid(S, j, 1)
    Next
    Exch = SS
End Function

Вот результат работы макроса:



Здесь выбрано 17 десятичных чисел в столбце A, они макросом подсвечены зелёным, за исключением пустой ячейки и ячейки с нецифровым содержимым.
В столбце B они преобразованы макросом в шестнадцатиричное представление, в столбце C показан результат конвертации инвертированной строки с шестнадцатиричным значением исходного значения в десятичный формат.
В столбце E справочно, для контроля работы макроса, без привлечения макроса, отображено преобразование десятичного числа в столбце C в шестнадцатиричный формат, чтобы убедиться, что числа в столбце B инвертированы верно - в задании этого нет.
Excel-файл с примерами прилагаю.

-----
Прикрепленные файлы:


384a23123bb34d5f457b14ad5782a7f8f76c63fa.xlsm
скачать (25.2 кб)

Megaloman

Мастер-Эксперт
03.03.2021, 22:40
Мини-форум консультации # 200370

Нет сообщений в мини-форуме

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

CradleA

Академик

Рейтинг: 211

Megaloman

Мастер-Эксперт

Рейтинг: 120

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 74

Степанов Иван /REDDS

4-й класс

Рейтинг: 1

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

SFResid

Мастер-Эксперт

Рейтинг: 0