VBA: Формирование и преобразование массивов

Автор Александр, 11 ноября 2017, 17:23

Александр

Здравствуйте! Помогите, пожалуйста, если не трудно. Хочу разобраться во всём этом.
Задание в файле. Буду очень благодарен!

Задание 1. Сформировать массив X. Целочисленное значение A задаётся произвольно. Кол-во элементов 15. Задавать глобальные переменные.
Формат вывода результата. В столбец с фиксированным знаком, 3 значащих разряда.
Система уравнений: x(i) =
2lg(e^A+i), если 3<i<=9
i+0,5*A,  при остальных i.


[вложение удалено администратором]

Администратор

Нужно смотреть вашу методичку. Я не знаю, что такое фиксированный знак, 3 значащих разряда.

Александр


Администратор

Три значащих разряда - это три цифры, которые начинаются не нулём:
В этом числе:
0,0123
три значащих разряда содержат 123.
Тут нужна методичка, которую вам выдали в институте с решением аналогичных задач. Гадать здесь не надо.

Александр

Если бы была эта методичка...Нам говорили, что нужно просто записать как #.###

Администратор

Это по идее называется: округлить до трёх знаков после запятой.
А у вас совсем другое в задании.

Администратор

Мне кажется, что здесь нужно представление числа в виде экспоненты. В этом случае можно число 0,0123 записать таким образом: 1,23E^-2.
Но это только предположения, нужны учебные материалы из вашего учебного заведения.

Александр

Преподаватель сказал просто округлить до трёх знаков после запятой.
Значит просто округляем. Изменим задание.

Администратор

Здесь только первый вопрос.
Макрос работает с эксель-файлом, с активным листом (активный лист - это лист, который отображается на мониторе).
Макрос вставляет результат на активный лист, в столбец A.

Макрос
' Создание в оперативной памяти компьютера поименованной области - переменной A.
    ' Переменную можно сравнить с обычным файлом, но файл находится на жёстком диске,
    ' а переменная в оперативной памяти.
' Переменные, созданные вне процедуры, называются глобальными. Они доступны из
    ' любого модуля в пределах одного проекта.
' Variant означает, что в переменной может быть любой тип данных.
    ' Это нужно для InputBox, который даёт данные в виде текста.
Public A As Variant

Sub macro()

    ' Создание в оперативной памяти компьютера поименованной области - массива "x".
        ' Массив можно сравнить с обычной таблицей, эта таблица находится в оперативной
        ' памяти компьютера.
    ' Double означает, что в массиве могут быть только числа (целые и дробные).
    Dim x() As Double
    ' Long - означает, что в перменной могут быть только целые числа.
    Dim i As Long
   
   
    '1. Юзер указывает число A.
    A = InputBox("Введите число ""A"":")
    ' Если A содержит пустую строку, значит юзер щёлкнул "Cancel".
    If A = "" Then Exit Sub
   
    '2. Переводим число в тип данных "Число" для математических действий.
    A = CLng(A)
   
    '3. Создание ячеек в массиве x. Создаётся пятнадцать ячеек.
    ' 1 To - используется, чтобы порядковый номер первого элемента был один, а не ноль.
        ' По умолчанию используется ноль, что неудобно для непрограммистов.
    ReDim x(1 To 15)
   
    '4. Расчёты и запись результатов расчётов в массив "x".
        ' For ... To ... Step ... Next - называется циклом. Цикл используется,
        ' чтобы делать одну и ту же команду несколько раз.
    ' UBound(x) - это порядковый номер последнего элемента в массиве.
    For i = 1 To UBound(x) Step 1
        ' If ... Then ... Else ... End If - используется для выбора действия.
        If (i > 3) And (i <= 9) Then
            ' В VBA под "Log" подразумевается натуральный логарифм, поэтому делаем его ненатуральным.
            x(i) = 2 * (Log(Exp(A + i)) / Log(10))
        Else
            x(i) = i + 0.5 * A
        End If
    Next i
   
    '5. Округление до трёх цифр после запятой.
    For i = 1 To UBound(x)
        x(i) = Format(x(i), "0.000")
    Next i

    '6. Вставка массива в эксель на активный лист, чтобы посмотреть результат работы макроса.
        ' Активный лист - это лист, который отображается на мониторе.
    For i = 1 To UBound(x)
        Cells(i, "A").Value = x(i)
    Next i

End Sub
[свернуть]

Александр

Спасибо! Попробую дальше сам разобраться.

Администратор


Александр

Возник вопрос по второму заданию. Почему, когда формируем массив у, отбирая только чётные индексы, выводит значения не подряд, а через раз, перепрыгивая, оставляя пустые ячейки?

Администратор


Александр

Ну с помощью аксессора Cells, а как тогда нужно?

Администратор

Напишите код, как вы создаёте ячейки в  массиве Y.