Ускорение расчетов на столе - PullRequest
1 голос
/ 01 ноября 2019

У меня есть таблица, которая будет иметь разные формулы для нечетных и четных столбцов. Я пытаюсь перебрать таблицу, чтобы выполнить эти вычисления, но проблема в том, что это занимает вечно, даже когда мой код не выполняет вычисления. У кого-нибудь есть предложения по улучшению моего кода? Вот что у меня так далеко:

Dim tbl As ListObject
Dim tRows As Long
Dim tCols As Long
Dim i As Long
Dim i2 As Long
Dim even As Boolean

Set tbl = ActiveSheet.ListObjects("Table1")

With tbl.DataBodyRange
    tRows = .Rows.Count
    tCols = .Columns.Count
End With

'Start performing calculations
For i = 2 To tCols

    If i Mod 2 = 0 Then
        even = True
    Else
        even = False
    End If

    For i2 = 2 To tRows + 1
        If even Then
            'Formula for even columns
            Cells(i2, i) = "Even"
        Else
            'Formula for odd columns
            Cells(i2, i) = "Odd"
        End If
    Next i2

Next i

1 Ответ

2 голосов
/ 01 ноября 2019

Представьте себе следующие данные:

enter image description here

Затем выполните следующий код:

Sub Test()

Dim tbl As ListObject: Set tbl = Sheet1.ListObjects("Table1")
tbl.DataBodyRange.FormulaR1C1 = "=IF(ISODD(COLUMN()),TRUE,FALSE)"

End Sub

Со следующим результатом:

enter image description here

Обратите внимание, что:

  • Вы должны заменить TRUE часть моей формулы своей ODD формулой.
  • Вы должны заменить FALSE часть моей формулы вашей EVEN формулой.
  • Я использовал явную ссылку на ячейку Sheet1, используя ее CodeName. Поэтому измените, что соответственно

Независимо от количества столбцов или строк, целое .DataBodyRange было заполнено по формуле.

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