Top.Mail.Ru
Ответы

Помогите с созданием макроса excel!

Делаю макрос, который выводит таблицу квадратов (фото), выходит то, что на скрине.
В чем проблема? Относительные ссылки включены. Макрос должен создаваться в активной ячейке

По дате
По рейтингу
Аватар пользователя
Просветленный
11мес

Чтобы создать макрос в Excel для вывода таблицы квадратов, можно воспользоваться следующим кодом на VBA:

Макрос для создания таблицы квадратов в Excel

12345678910111213141516171819202122232425262728
 Sub CreateSquareTable()
    Dim startRow As Integer
    Dim startCol As Integer
    Dim i As Integer
    Dim j As Integer
    Dim squareValue As Integer
    
    ' Указываем активную ячейку
    startRow = ActiveCell.Row
    startCol = ActiveCell.Column
    
    ' Заполняем заголовки
    For j = 0 To 9
        Cells(startRow, startCol + j + 1).Value = j    ' Заголовки столбцов
    Next j
    
    For i = 0 To 9
        Cells(startRow + i + 1, startCol).Value = i    ' Заголовки строк
        For j = 0 To 9
            squareValue = (i * j) * (i * j)            ' Вычисляем квадрат
            Cells(startRow + i + 1, startCol + j + 1).Value = squareValue
        Next j
    Next i

    ' Установка заголовка таблицы
    Cells(startRow, startCol).Value = "Таблица квадратов"
    Range(Cells(startRow, startCol), Cells(startRow + 10, startCol + 10)).Borders.LineStyle = xlContinuous ' Добавить границы
End Sub 



Как использовать макрос:

1. Открытие редактора VBA:
- Нажмите `ALT + F11` в Excel, чтобы открыть редактор VBA.

2. Создание нового модуля:
- В редакторе VBA выберите `Insert` -> `Module`, чтобы вставить новый модуль.

3. Вставка кода:
- Скопируйте и вставьте приведенный выше код в окно модуля.

4. Запуск макроса:
- Закройте редактор VBA, вернитесь в Excel, выберите ячейку, в которой хотите начать таблицу, и запустите макрос через `ALT + F8`, выбрав `CreateSquareTable`.

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

Аватар пользователя
Знаток
11мес

За фото извиняюсь, код сейчас приложу

Аватар пользователя
Знаток
11мес

Код на 15+к символов - не отправляется.
Я не программист, код создает excel сам, а мне бы понять что я делаю не так

Аватар пользователя
Знаток
11мес

ActiveCell.Offset(1, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "2"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "3"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "4"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "5"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "6"
ActiveCell.Offset(0, 1).Range("A1").Select

Аватар пользователя
Просветленный
11мес

А, теперь понятно. Проблема в строке `ActiveCell.Offset(1, 1).Range("A1").Select` - это создает абсолютную ссылку на A1, что ломает относительное перемещение.

Вместо этого записанного макроса лучше используйте код из моего предыдущего ответа или исправьте свой так:

123456789101112131415161718
 Sub TableSquare()
    ' Сохраняем начальную позицию
    Dim startCell As Range
    Set startCell = ActiveCell
    
    ' Создаем заголовки по горизонтали
    For i = 0 To 9
        startCell.Offset(0, i + 1).Value = i
    Next i
    
    ' Создаем заголовки по вертикали и заполняем таблицу
    For i = 0 To 9
        startCell.Offset(i + 1, 0).Value = i
        For j = 0 To 9
            startCell.Offset(i + 1, j + 1).Value = (i * j) ^ 2
        Next j
    Next i
End Sub 
Аватар пользователя
Знаток
11мес

Спасибо! Это наверное из-за того, что я мышкой выделяю таблицу для изменения границы

Аватар пользователя
Просветленный
11мес

а нафига тут макрос? прописал формулу и растянул вправо и вниз

Аватар пользователя
Мыслитель
11мес

Во-первых, зачем тут макрос ?
Во-вторых, ну, видимо, неправильно высчитываешь координаты в макросе.
Мы же не видим твоего макроса, чтобы точнее сказать !



Видео по теме