【问题标题】:COUNTIF FormulaR1C1 with calculated relative position具有计算相对位置的 COUNTIF 公式 R1C1
【发布时间】:2020-03-03 23:08:00
【问题描述】:

背景

我有一个脚本,它在表中每个现有列之后插入一列,需要在其中插入一个 COUNTIF 公式,其中范围和条件基于两个不同的循环变量。

对于第一个公式,我可以使 R1C1 公式正常工作,但由于范围和标准与其位置不成比例,因此 R -1 和 C -1 在我的公式中不起作用。

脚本目的

这是我需要更改的 COUNTIF 作为 FormulaR1C1 的脚本。

脚本的第一部分循环从工作表“origin_data”的每一列中获取数据,并将其放入工作表“origin_analytics”的同一列中,并在此过程中删除重复值。

该过程的第二部分有一个循环来设置要在工作表“origin_analytics”中的每一列之后插入的 COUNTIF 列。它将值 x 设置为 origin_data 列号(每次递增 1),并将 y 作为 origin_analytics 表(每次递增 2 以将先前插入的列考虑在内)。

当我创建公式时,我输入第 6 行第 y + 1 列。公式是COUNTIF(x:x, y)。完成后,它会格式化并自动填充到最后一行(由 sub 前面的 origin_data RowCount 设置)。

我尝试失败的最后一个版本的 COUNTIF 是:

s2.Cells(6, y + 1) = WorksheetFunction.CountIf(Sheets("origin_data").Range(Sheets‌​("origin_data").Cell‌​s(1, x), Sheets("origin_data").Cells(Rows.Count, x)), Sheets("origin_analytics").Cells(6, y))

问题

我收到的错误消息是 run-time error '9' Subscript out of range,我认为这是因为 VBA 中的 COUNTIF 不喜欢工作,除非在 FormulaR1C1 中。是否有可能拥有其中之一,包括使用变量?

感知解决方案

如果我可以将范围从 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我想我会发布我偶然发现的答案,以防其他人感兴趣。

    ActiveCell.FormulaR1C1 = "=COUNTIF(origin_data!C[" & x - y - 1 & "],origin_analysis!RC[-1])"

    现在它是一种享受!感谢 Scott Craner 早期的帮助,非常感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多