BACKGROUND
У меня есть скрипт, который вставляет столбец после каждого существующего столбца в таблице, который должен вставить формулу COUNTIF, где диапазон и критерии основаны на двух разных l oop переменных.
Я могу заставить формулу R1C1 работать нормально, для первой, но так как диапазон и критерии не пропорциональны их положению, R -1 и C -1 не работают в моей формуле.
НАЗНАЧЕНИЕ СКРИПТА
Вот скрипт с COUNTIF в качестве FormulaR1C1, который мне нужно изменить.
Первая часть сценария зацикливается на получении данных из каждого столбца из листа origin_data и помещает их в тот же столбец в origin_analytics, а в процессе удаляет повторяющиеся значения.
Во второй части процесса есть al oop для настройки столбца COUNTIF, который будет вставляться после каждого столбца в листе origin_analytics. Он устанавливает значение x в качестве номера столбца origin_data (каждый раз увеличивается на 1) и имеет y в качестве листа origin_analytics (увеличивается на 2 каждый раз, чтобы учитывать ранее вставленный столбец).
Когда я создаю формулу Я ввожу в строку 6 столбец y + 1. Формула COUNTIF(x:x, y)
. Когда он завершается, он форматирует и автозаполнения до последней строки (установленной origin_data RowCount ранее в подпрограмме).
Последняя версия COUNTIF, которую я безуспешно пытался:
s2.Cells(6, y + 1) = WorksheetFunction.CountIf(Sheets("origin_data").Range(Sheets("origin_data").Cells(1, x), Sheets("origin_data").Cells(Rows.Count, x)), Sheets("origin_analytics").Cells(6, y))
ПРОБЛЕМА
Я получаю сообщение об ошибке: ошибка времени выполнения '9' Подстрочный индекс вне диапазона , который, как я считаю, происходит из-за COUNTIF в VBA не любит работать, если не в FormulaR1C1. Возможно ли иметь один из тех, который включает использование переменных?
PERCEIVED SOLUTION
Если бы я мог установить диапазон от R -1 (относительно моей текущей позиции) до результата ( x - y) - 1 .
Примеры сочетания формулы R и C при циклическом прохождении:
формулы в B, R (origin_analytics! ) = -1 (A), C (origin_analytics!) = -1 (A)
Формула в D, R (origin_analytics!) = - 2 (B), C (origin_analytics!) = -1 (C)
Формула в F, R (origin_analytics!) = -3 (C), C (origin_analytics!) = -1 (E)
Формула в H, R (origin_analytics!) = -4 ( D), C (origin_analytics!) = -1 (G)
КОД
'For each column, copy distinct values and paste into origin_analysis sheet
Dim s1 As Worksheet, s2 As Worksheet, x As Long, y As Long
x = 1
Do Until x = columnCount
Set s1 = Sheets("origin_data")
Set s2 = Sheets("origin_analysis")
s1.Columns(x).Copy s2.Columns(x)
s2.Columns(x).RemoveDuplicates Columns:=1, Header:=xlNo
x = x + 1
Loop
'Insert column after every column and add a COUNTIF calculation for every distinct value from origin_raw
x = 1
y = 1
Do Until x = columnCount
s2.Columns(y + 1).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.ColumnWidth = 3.29
Cells(6, y + 1).Select
ActiveCell.FormulaR1C1 = "=COUNTIF(origin_data!C[-1],origin_analysis!RC[-1])"
Cells(6, y + 1).Select
Selection.FormatConditions.AddDatabar
Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.MinPoint.Modify newtype:=xlConditionValueAutomaticMin
.MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
End With
With Selection.FormatConditions(1).BarColor
.Color = 2668287
.TintAndShade = 0
End With
Selection.FormatConditions(1).BarFillType = xlDataBarFillSolid
Selection.FormatConditions(1).Direction = xlContext
Selection.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
Selection.FormatConditions(1).BarBorder.Type = xlDataBarBorderNone
Selection.FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
With Selection.FormatConditions(1).AxisColor
.Color = 0
.TintAndShade = 0
End With
With Selection.FormatConditions(1).NegativeBarFormat.Color
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.AutoFill Destination:=Range(Cells(6, y + 1), Cells(RowCount, y + 1))
x = x + 1
y = y + 2
Loop