Импорт формулы из переменной - Excel VBA

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

Любая помощь будет оценена по достоинству.

Sub test()

    Dim Row As Long
    Dim Col As Long
    Dim strFormula As String
    
    With ThisWorkbook.Worksheets("Sheet1")
        'Loop columns
        For Col = 1 To 3
            'Clear strFormula variable
            strFormula = ""
            'Loop rows
            For Row = 1 To 5
                'Check if cell is green
                If .Cells(Row, Col).Interior.Color = 9359529 Then
                    'Create formula
                    If strFormula = "" Then
                        strFormula = """=SUM(.cells(" & Row & "," & Col & ")"
                    Else
                        strFormula = strFormula & ",.cells(" & Row & "," & Col & ")"
                    End If
                Else
                End If
                
            Next Row
            
            'Finalize formula
            If strFormula <> "" Then
                strFormula = strFormula & ")"""
                'Import formula
                .Cells(7, Col).Formula = strFormula
            Else
            End If
            
        Next Col
    
    End With
        
End Sub

Удалите тройные кавычки (""") в начале и конце формулы и вместо этого используйте одинарную кавычку (").

cybernetic.nomad 04.07.2024 21:41

Я получаю тот же результат, поэтому я их импортировал.

Error 1004 04.07.2024 21:43
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
2
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это неправильный синтаксис для формул Excel. Вы можете использовать что-то вроде этого:

Sub test()
    Dim Row As Long
    Dim Col As Long
    Dim strFormula As String
    
    With ThisWorkbook.Worksheets(1) ' "Sheet1"
        'Loop columns
        For Col = 1 To 3 Step 2
            'Clear strFormula variable
            strFormula = ""
            'Loop rows
            For Row = 1 To 5
                'Check if cell is green
                If .Cells(Row, Col).Interior.Color = 9359529 Then
                    'Create formula
                    If strFormula = "" Then
                        strFormula = "=SUM(R" & Row & "C" & Col
                    Else
                        strFormula = strFormula & ",R" & Row & "C" & Col
                    End If
                End If
            Next Row
            
            'Finalize formula
            If strFormula <> "" Then
                strFormula = strFormula & ")"
                'Import formula
                .Cells(7, Col).FormulaR1C1 = strFormula
            Else
            End If
        Next Col
    End With
End Sub
Ответ принят как подходящий

Пожалуйста, не называйте свою переменную как Row. Row — это свойство, и это будет мешать этому.

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

Это то, что вы пытаетесь?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rw As Long
    Dim cl As Long
    Dim rngGreen As Range
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    With ws
        For cl = 1 To 3
            Set rngGreen = Nothing
            
            For rw = 1 To 5
                If .Cells(rw, cl).Interior.Color = 9359529 Then
                    If rngGreen Is Nothing Then
                        Set rngGreen = .Cells(rw, cl)
                    Else
                        Set rngGreen = Union(.Cells(rw, cl), rngGreen)
                    End If
                End If
            Next rw
            
            If Not rngGreen Is Nothing Then .Cells(7, cl).Formula = _
            "'=Sum(" & rngGreen.Address & ")"
        Next cl
    End With
End Sub

Примечание. Чтобы получить сумму, вы можете использовать "=Sum(" & rngGreen.Address & ")" без апострофа.

У меня есть к вам еще один вопрос. Допустим, я хочу импортировать формулу в D7, которая вычитает A7 из C7. Как я напишу формулу в терминах .cells(rw,cl)

Error 1004 05.07.2024 09:09

Много способов сделать это. Вот один из них. .cells(rw,4).FormulaR1C1 = "=RC[-1]-RC[-3]"

Siddharth Rout 05.07.2024 09:15

есть ли способ с функцией .Formual?

Error 1004 05.07.2024 10:28

Ты имеешь в виду вот так .Cells(rw, cl).Formula = "=C" & rw & "-A" & rw

Siddharth Rout 05.07.2024 11:12

Привет еще раз. Я использую "=Sum(" & rngGreen.Address & ")" для импорта формулы в ячейку. Есть ли способ передать результат формулы в переменную?

Error 1004 09.07.2024 07:50

О, да. Ret = .Evaluate("=Sum(" & rngGreen.Address & ")")

Siddharth Rout 09.07.2024 16:33

Суммируйте выделенные ячейки, используя формулу

Sub SumupHighlightedCells()

    With ThisWorkbook.Sheets("Sheet1")
        
        Dim urg As Range, cell As Range, r As Long, c As Long
        Dim Formula As String, IsCellFound As Boolean
        
        For c = 1 To 3
            ' Combine green cells in current column into unioned range.
            For r = 1 To 5
                Set cell = .Cells(r, c)
                If cell.Interior.Color = 9359529 Then ' is green cell
                    If IsCellFound Then
                        Set urg = Union(urg, cell)
                    Else
                        Set urg = cell
                        IsCellFound = True
                    End If
                'Else ' is not green cell
                End If
            Next r
            ' Check if green cells found in current column.
            If IsCellFound Then ' green cell(s) found
                ' Write formula.
                Formula = "=SUM(" & urg.Address(0, 0) & ")"
                .Cells(7, c).Formula = Formula
                ' Reset for the next iteration.
                IsCellFound = False
            'Else ' no green cells found
            End If
        Next c
    
    End With
        
End Sub

Другие вопросы по теме