VBA Excel зацикливание с автозаполнением таблицы - PullRequest
0 голосов
/ 23 октября 2018

У меня есть 2 значения, где: A2 - это широта, а B2 - это долгота.Оба изменения на шаге 0.25.

Я хотел бы использовать эти значения для автозаполнения таблицы с использованием цикла.

Идея состоит в том, что для каждого отдельного значения (например, 49) Iнужны еще несколько значений (например, -2, -1.75, -1.5, -1.25 и т. д.), установленных в той же строке, как показано на прилагаемом рисунке.

Во-первых, этот цикл (ссылающийся нак единице, значение широты):

Sub calc2()
    Dim i As Single
    With Worksheets("9")
    .UsedRange.clear
    .Range("a1").Value = "Input"
    .Range("f1").Value = "Output"
    For i = 40 To 55 Step 0.25
        Worksheets("1_GENERAL").Range("A2").Value = i
        With .Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0).Value = i
        .Offset(1, 1).Value = Worksheets("4.MINUTES").Range("BL371").Value
        End With
    Next i
End With
End Sub

, которое выполняет автозаполнение во 2 столбце (значение широты в 1-ом и выходное значение во 2-м).Во-вторых, я пытался изменить этот цикл для вертикального автозаполнения, что позволяет мне устанавливать значения в строках (1-й ряд - значение долготы, 2-й выходной параметр).Следующие шаги должны содержать только выходные значения, соответствующие значению lon, lat.

Цикл выглядит следующим образом:

Sub calc_full()
    Dim i As Single
    With Worksheets("9")
    .UsedRange.clear
    .Range("a1").Value = "Input"
    .Range("b1").Value = "Output"
    .Range("c1").Value = "Input"
    .Range("d1").Value = "Output"
    For i = 40 To 45 Step 0.25
    For k = -2 To 2 Step 0.25
        Worksheets("1_GENERAL").Range("A2").Value = i
        With .Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0).Value = i
        .Offset(1, 1).Value = Worksheets("4.MINUTES").Range("BL371").Value
        End With
        With .Cells(Cols.Count, 1).End(xlUp)
        .Offset(2, 0).Value = k
        .Offset(2, 1).Value = Worksheets("4.MINUTES").Range("BL371").Value
        End With
    Next i
    Next k
End With
End Sub

Однако он не работает.Я должен что-то смешать.В основном мое выходное значение находится на другом листе (4.MINUTES), и я хотел бы вставить его в одном месте для разных координат, в конечном итоге составив таблицу (см. Пример во вложении).Есть идеи, как это сделать?Я буду очень благодарен.Заранее спасибо.

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я пробовал ваш код, но проблема в том, что ошибка не отображается, но код не работает.

Sub autofill_example()
Dim i As Long
Dim LAT As Double
Dim LON As Double
Dim Lastrow As Long
Dim Lastcolumn As Long
Dim Times As Integer

With Sheets("9")

    LAT = Sheets("1_GENERAL").Range("A2").Value
    LON = Sheets("1_GENERAL").Range("B2").Value

    Times = (55 - LAT) / 0.25

    For i = 1 To Times
        Lastrow = .Range("A" & Rows.Count).End(xlUp).Row

        LAT = LAT + 0.25

        .Range("A" & Lastrow + 1) = LAT

    Next i
        Debug.Print LAT

        Times = (LON + 7.75) / 0.25

        For i = 1 To Times
            Lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

            LON = LON - 0.25

        .Cells(1, Lastcolumn + 1) = LON

    Next i

End With

End Sub

Не могли бы вы посоветовать значение With?Мои значения LON и LAT указаны на отдельном листе.

0 голосов
/ 23 октября 2018

@ Мариуш Крукар импортирует значения 49 и 25, как на рисунке ниже, и попробуйте:

Option Explicit

Sub test()

Dim i As Long
Dim LAT As Double
Dim LON As Double
Dim Lastrow As Long
Dim Lastcolumn As Long
Dim Times As Integer

With wsTest

    LAT = .Range("A2").Value
    LON = .Range("B1").Value

    Times = (55 - LAT) / 0.25

    For i = 1 To Times
        Lastrow = .Range("A" & Rows.Count).End(xlUp).Row

        LAT = LAT + 0.25

        .Range("A" & Lastrow + 1) = LAT

    Next i
     Debug.Print LAT

    Times = (LON + 7.75) / 0.25

    For i = 1 To Times
        Lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

        LON = LON - 0.25

        .Cells(1, Lastcolumn + 1) = LON

    Next i

End With

End Sub

результат будет похож на рисунок:

enter image description here

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