Используя приведенный ниже код, я пытаюсь зациклить столбец и строки. Когда ячейки зеленого цвета импортируют диапазон в строку формулы. В строке 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
Я получаю тот же результат, поэтому я их импортировал.
Это неправильный синтаксис для формул 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)
Много способов сделать это. Вот один из них. .cells(rw,4).FormulaR1C1 = "=RC[-1]-RC[-3]"
есть ли способ с функцией .Formual
?
Ты имеешь в виду вот так .Cells(rw, cl).Formula = "=C" & rw & "-A" & rw
Привет еще раз. Я использую "=Sum(" & rngGreen.Address & ")"
для импорта формулы в ячейку. Есть ли способ передать результат формулы в переменную?
О, да. Ret = .Evaluate("=Sum(" & rngGreen.Address & ")")
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
Удалите тройные кавычки (
"""
) в начале и конце формулы и вместо этого используйте одинарную кавычку ("
).