Цикл VBA, повторить формулу через столбец - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь воспроизвести в VBA простую функцию в Excel, которая позволяет повторять функцию через весь столбец и останавливается, когда боковые столбцы пусты.В частности, я хочу повторить функцию if - else if для всей соответствующей части столбца

Вот попытка, которая на самом деле не работает

Sub RepeatIfElseif
    Range("A1").Select
    If selection > 0 Then
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "X"
        Range("A1").Select
    ElseIf selection <= 0 Then
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "Y"
    End If
    Range("B1").Select
    selection.AutoFill Destination:=Range("B1:B134")

Есть ли способ, которым я могу сделатьэто с петлей?

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Я пытаюсь улучшить свой английский, клянусь ...

Я бы сделал что-то вроде этого:

dim row as long
dim last_row as Long

last_row = ActiveSheet.Range("A1048576").End(xlUp).Row

For row = 1 to last_row
    If Range("A" & row).Value > 0 Then
        ActiveSheet.Range("B" & row).Value = "X"
    Else
        ActiveSheet.Range("B" & row).Value = "Y"
    End If
Next row

Надеюсь, это поможет.

0 голосов
/ 14 марта 2019

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


Выберите столбец, который наиболее вероятно будет представлять вашу последнюю строку (я использую Column A в моем примере), и затем вы можете динамически раскрывающееся ваше уравнение в одной строке без цикла.

Ниже приведено уравнение A2 + 1 в Column B, начиная со 2-й строки ( при условии, что у вас есть строка заголовка ) до последней использованной строки в Column A


Option Explicit

Sub Formula_Spill()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update sheet!
Dim LR As Long

LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row '<-- Update column!

ws.Range("B2:B" & LR).Formula = "=A2+1" '<-- Update formula!

End Sub
0 голосов
/ 13 марта 2019

Если вы хотите использовать цикл, вы можете использовать что-то вроде кода ниже:

For i = 1 To 134
    If Range("A" & i).Value > 0 Then
        Range("B" & i).FormulaR1C1 = "X"
    Else
        Range("B" & i").FormulaR1C1 = "Y"
    End If
Next I

Это можно сделать без цикла, что-то вроде:

Range("B1:B134").Formula = "=IF(A1>0," & Chr(34) & "X" & Chr(34) & "," & Chr(34) & "Y" & Chr(34) & ")"

Неуверен, какую формулу вы пытаетесь достичь с помощью .FormulaR1C1 = "Y"?

...