Как можно автоматически увеличить ссылку на ячейку в Excel VBA, чтобы макрос выполнялся в каждом столбце? - PullRequest
0 голосов
/ 03 апреля 2020

Итак, у меня есть макрос, который ссылается на определенные c ячейки в рабочей книге. Как я могу повторить этот макрос в следующих пятидесяти столбцах, не печатая вручную ссылки на ячейки пятьдесят раз?

Если бы я использовал формулы Excel, а не VBA, я мог бы щелкнуть и перетащить, чтобы автоматически повторить формулы в следующем столбце. Ссылки на ячейки, которые я хотел бы оставить прежними, я бы определил как ссылки $ absolute $. Но в VBA я не знаю, как это сделать.

Вот код:

If Worksheets("Enter Data Here").Range("D11") = "" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ""

ElseIf Worksheets("Enter Data Here").Range("D11") = "/" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10")

ElseIf Worksheets("Enter Data Here").Range("D11") = "//" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10") & "x2"

ElseIf Worksheets("Enter Data Here").Range("D11") = "///" Then
    Worksheets("SDS").Range("R5") = Worksheets("SDS").Range("R5") & ";" & Worksheets("Enter Data Here").Range("D10") & "x3"


End If

Worksheets ("SDS"). Range ("R5") - абсолютная ячейка ссылка и не меняется, но я бы хотел, чтобы остальные перешли к следующему столбцу, не печатая его. например, D становится E, а затем F.

Должен быть способ, позволяющий это сделать. Может быть, цикл?

Приветствия.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

мне кажется, вы должны быть после этого:

Dim cel As Range
Dim s As String
For Each cel In Worksheets("Enter Data Here").Range("D11").Resize(, 50)
    Select Case Len(r1) - Len(Replace(r1, "/", vbNullString))
        Case 1
            s = s & ";" & cel.Offset(-1).Value
        Case 2
            s = s & ";" & cel.Offset(-1).Value & "x2"
        Case 3
            s = s & ";" & cel.Offset(-1).Value & "x3"
        End If
    End Select
End With

Worksheets("SDS").Range("R5").Value = s
0 голосов
/ 03 апреля 2020

Попробуйте это.

Sub x()

Dim r1 As Range, i As Long

Set r1 = Worksheets("Enter Data Here").Range("D11") 'define starting cell

For i = 1 To 50 'repeat this 50 times
    With Worksheets("SDS").Range("R5")
        If r1 = "" Then
             .Value = .Value & "" 'not sure what purpose this serves
        ElseIf r1.Value = "/" Then
            .Value = .Value & ";" & r1.Offset(-1).Value
        ElseIf r1.Value = "//" Then
            .Value = .Value & ";" & r1.Offset(-1).Value & "x2"
        ElseIf r1.Value = "///" Then
            .Value = .Value & ";" & r1.Offset(-1).Value & "x3"
        End If
    End With
    Set r1 = r1.Offset(, 1) 'move to cell to the right, E11, F11 etc
Next i

End Sub
...