Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RFpro.ru: Пакет Microsoft Office


РАССЫЛКИ ПОРТАЛА RFPRO.RU

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

CradleA
Статус: Мастер-Эксперт
Рейтинг: 286
∙ повысить рейтинг »
Megaloman
Статус: Мастер-Эксперт
Рейтинг: 235
∙ повысить рейтинг »
solowey
Статус: Академик
Рейтинг: 104
∙ повысить рейтинг »

Пакет MSOffice

Номер выпуска:1037
Дата выхода:18.06.2021, 10:15
Администратор рассылки:Megaloman (Мастер-Эксперт)
Подписчиков / экспертов:2 / 29
Вопросов / ответов:1 / 1

Консультация # 201151: Здравствуйте! У меня возникли сложности с таким вопросом: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: При помощи датчика случайных чисел получить и вывести в столбец рабочего листа Excel N (N вводится с клавиатуры) целых чисел типа Long. В соседний столбец вывести представление соответствующего числа в дополн...

Консультация # 201151:

Здравствуйте! У меня возникли сложности с таким вопросом:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
При помощи датчика случайных чисел получить и вывести в столбец рабочего листа Excel N (N вводится с клавиатуры) целых чисел типа Long. В соседний столбец вывести представление соответствующего числа в дополнительном коде шестнадцатеричной системы счисления. (На языке VBA)
Огромное спасибо!!!

Дата отправки: 13.06.2021, 10:06
Вопрос задал: 23071996 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Megaloman (Мастер-Эксперт):

Если я правильно понял статью, вот код:

Код
Sub DecHex()

Const R1 As String = "A1"               ' Адрес ячейки с первым элементом массива чисел
'Const R1 As String = "C3"               ' Адрес ячейки с первым элементом массива чисел
Const upperbound As Long = 2147483647#   ' Пределы изменения элементов массива
Const lowerbound As Long = -2147483648#

Dim N, ierr, CN, i
Dim R1N As String, R2 As String, R2N As String
Dim Dhex As String

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 MLong(1 To N, 1 To 1) As Long
ReDim MDhex(1 To N, 1 To 1) As String

Randomize
For i = 1 To N
    MLong(i, 1) = (CDbl(upperbound) - CDbl(lowerbound) + 1) * (CDbl(Rnd) + Rnd * 0.00001) + lowerbound
    If MLong(i, 1) >= 0 Then
        If MLong(i, 1) > 0 Then MDhex(i, 1) = "0" + Hex(MLong(i, 1)) Else MDhex(i, 1) = "0"
    Else
        Dhex = Hex(-MLong(i, 1))
        MDhex(i, 1) = "F"
        For j = 1 To Len(Dhex)
            Select Case Mid(Dhex, j, 1)
                Case "0"
                    MDhex(i, 1) = MDhex(i, 1) + "F"
                Case "1"
                    MDhex(i, 1) = MDhex(i, 1) + "E"
                Case "2"
                    MDhex(i, 1) = MDhex(i, 1) + "D"
                Case "3"
                    MDhex(i, 1) = MDhex(i, 1) + "C"
                Case "4"
                    MDhex(i, 1) = MDhex(i, 1) + "B"
                Case "5"
                    MDhex(i, 1) = MDhex(i, 1) + "A"
                Case "6"
                    MDhex(i, 1) = MDhex(i, 1) + "9"
                Case "7"
                    MDhex(i, 1) = MDhex(i, 1) + "8"
                Case "8"
                    MDhex(i, 1) = MDhex(i, 1) + "7"
                Case "9"
                    MDhex(i, 1) = MDhex(i, 1) + "6"
                Case "A"
                    MDhex(i, 1) = MDhex(i, 1) + "5"
                Case "B"
                    MDhex(i, 1) = MDhex(i, 1) + "4"
                Case "C"
                    MDhex(i, 1) = MDhex(i, 1) + "3"
                Case "D"
                    MDhex(i, 1) = MDhex(i, 1) + "2"
                Case "E"
                    MDhex(i, 1) = MDhex(i, 1) + "1"
                Case "F"
                    MDhex(i, 1) = MDhex(i, 1) + "0"
            End Select
        Next
    End If
Next

Rows("1:100000").ClearContents

R1N = Range(R1).Offset(N - 1, 0).Address
R2 = Range(R1).Offset(0, 1).Address
R2N = Range(R1).Offset(N - 1, 1).Address

Range(R1 + ":" + R1N) = MLong
Range(R2 + ":" + R2N) = MDhex

End Sub
Вместо выделенного цикла с использованием громоздкого Case можно использовать формулу:
Код
       For j = 1 To Len(Dhex)
            MDhex(i, 1) = MDhex(i, 1) + Hex(15 - CLng("&H" + Mid(Dhex, j, 1)))
        Next
Я сделал как мог, кто сделает правильнее - пусть сделает.

Ответ отредактирован модератором Megaloman (Мастер-Эксперт) 15.06.2021, 19:57

Консультировал: Megaloman (Мастер-Эксперт)
Дата отправки: 15.06.2021, 12:59 style="font-style: italic; color: gray;">нет комментария
-----
Дата оценки: 15.06.2021, 19:39

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное