Есть ли способ использовать переменную в формуле CountIf, чтобы итерация столбца всегда 1 - PullRequest
0 голосов
/ 19 февраля 2019

Я настраиваю электронную таблицу посещаемости, в которой мы подсчитываем общее число поздних и больничных дней с помощью функции CountIf.Сотрудники перечислены по одному в каждом столбце.Я пытаюсь написать макрос, который будет подсчитывать количество поздних или больничных дней на сотрудника, вводить это значение в ячейку и копировать это значение в сводный лист.Затем используйте цикл For для итерации каждого сотрудника, используя тот же диапазон (количество строк), но всегда перемещаясь по одному столбцу.Я впервые использую VBA, поэтому я застрял, так как мой код выдает ошибку при попытке перебрать столбцы.Спасибо!

Sub Counting()
ActiveCell.Select
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[2]:RC[2],""L"")"
Selection.Copy
Sheets("Sheet3").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents

Dim LastCol As Integer
With ActiveSheet
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With

Dim i As Integer
For i = 1 To LastCol

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"

ActiveCell.Select
Selection.Copy
Sheets("Sheet3").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents
Next i
End Sub

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема с этой строкой:

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"

Похоже, вы хотите, чтобы значение i здесь, а не буква "i", которую вы можете сделать вот так:

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[" & i & "]:RC[" & i & "],""L"")"

Это исправит ваше немедленное сообщение об ошибке, однако макрос в целом очень хрупкий, вам следует прочитать статью PEH, на которую есть ссылки, и заменить все эти .Select / .Copy / .PasteSpecial в максимально возможной степени.

В качестве альтернативы вы, вероятно, можете делать то, что вам нужно, без макроса, и вместо этого использовать формулы.Если вы можете это было бы предпочтительнее.

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