Как я могу получить эти значения и текстовые строки, добавленные во время моего цикла for / next? - PullRequest
1 голос
/ 29 мая 2019

У меня есть ряд чисел, которые обновляются в основной лист на основе их отдельных вкладок. Я ввожу набор чисел в rngB, и они заполняются на основе размеров цикла for / next на основе множителей в массиве multplr.

Все работает как надо, но я пытаюсь также указать диапазон (x,40) с этим: wsA.Cells(x, 40).Formula = "=""TSR: ""&AX6&"" - ""&AY6&"" - ""&AZ6&"" USD Annual"

Loop:

        For x = 6 To FinalRow
            wsA.Cells(x, 40).Formula = "=""TSR: ""&AX6&"" - ""&AY6&"" - ""&AZ6&"" USD Annual"
        Next x

заполняет формулу, но не заполняется автоматически, как должно, просто повторяется операция сохранения в Cells(6,40)

Я знаю, что есть метод автозаполнения / назначения, но мой предыдущий цикл формулы for / next работает как надо, поэтому я запутался в том, что здесь происходит.

Остальная часть сценария:

Sub UpdateTSRS()

Dim wbk As Workbook
Dim wsA As Worksheet, wsB As Worksheet
Dim rngA As Range, rngB As Range, rngC As Range
Dim rIterator As Range, c As Range, spread As Range
Dim fndRow As Long, i As Long, j As Long, x As Long
Dim multplr As Variant
Dim FinalRow
multplr = Array(1, 1.1, 1.15, 1.2, 1.3)

Set wbk = ThisWorkbook
Set wsA = wbk.Sheets("Annual")
Set wsB = wbk.Sheets("New Annual")
Set rngA = wsA.Range(wsA.Range("E6"), wsA.Range("E6").End(xlDown))
Set rngB = wsB.Range(wsB.Range("A2"), wsB.Range("A2").End(xlDown))
Set rngC = wsA.Range(wsA.Range("AW6"), wsA.Range("AW6").End(xlDown))

FinalRow = wsA.Cells(Rows.Count, 49).End(xlUp).Row

For Each rIterator In rngB
        On Error Resume Next
        fndRow = Application.Match(rIterator.Value, rngA, 0) + _
            rngA.Range("E1").Row - 1
        If Err.Number <> 0 Then
        Else
        For i = 0 To 4
            For j = 3 To 9
                If j <> 6 Then
                Set c = wsA.Cells(fndRow + i, j + 43)
                c.Interior.Color = VBA.RGB(255, 255, 0)
                wsA.Cells(fndRow + i, j + 43).Value = rIterator.Offset(, j - 1).Value * multplr(i)
            End If
            Next j
        Next i
        End If
        Err.Clear
    Next rIterator



        For x = 6 To FinalRow
            wsA.Cells(x, 49).FormulaR1C1 = "=RC[-1]-RC[-3]"
        Next x

        For x = 6 To FinalRow
            wsA.Cells(x, 40).Formula = "=""TSR: ""&AX6&"" - ""&AY6&"" - ""&AZ6&"" USD Annual"
        Next x
End Sub

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Не требуется цикл:

wsA.Range(wsA.Cells(6, 40),wsA.Cells(FinalRow, 40)).Formula = "=""TSR: ""&AX6&"" - ""&AY6&"" - ""&AZ6&"" USD Annual"

То же самое с другой формулой:

wsA.Range(wsA.Cells(6, 49),wsA.Cells(FinalRow, 49)).FormulaR1C1 = "=RC[-1]-RC[-3]"
1 голос
/ 29 мая 2019

Вы указали формулу для использования AX6, AY6 и AZ6, чтобы она помещалась в каждую строку.Вы должны изменить это значение на

wsA.Cells(x, 40).Formula = "=""TSR: ""&AX" & x & "&"" - ""&AY" & x & "&"" - ""&AZ" & x & "&"" USD Annual""" 

или немного проще для чтения

wsA.Cells(x, 40).FormulaR1C1 ="TSR: "&RC[49]&" - "&RC[50]&" - "&RC[51]&" USD Annual"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...