Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 计算相对位置的计数公式1c1_Excel_Vba - Fatal编程技术网

Excel 计算相对位置的计数公式1c1

Excel 计算相对位置的计数公式1c1,excel,vba,Excel,Vba,背景 我有一个脚本,在表中的每个现有列之后插入一个列,需要在其中插入COUNTIF公式,其中范围和条件基于两个不同的循环变量 我可以让R1C1公式很好地工作,对于第一个公式,但是由于范围和标准与它们的位置不成正比,所以R-1和C-1在我的公式中不起作用 脚本目的 'For each column, copy distinct values and paste into origin_analysis sheet Dim s1 As Worksheet, s2 As Worksheet, x

背景

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

我可以让R1C1公式很好地工作,对于第一个公式,但是由于范围和标准与它们的位置不成正比,所以R-1和C-1在我的公式中不起作用

脚本目的

'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
这是一个脚本,其中COUNTIF作为公式1c1,我需要更改

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

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

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

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

s2.单元格(6,y+1)=工作表函数.CountIf(工作表(“原始数据”)。范围(工作表‌​(“原始数据”)单元格‌​s(1,x),表格(“原始数据”)。单元格(行数,x)),表格(“原始分析”)。单元格(6,y))

问题

'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
我得到的错误消息是运行时错误“9”下标超出范围,我认为这是因为VBA中的COUNTIF不喜欢工作,除非在公式1c1中。是否可能有一个包含变量的使用

感知解决方案

如果我可以将范围从R-1(相对于我当前的位置)设置为(x-y)-1

循环通过时公式R和C组合的示例:

B中的公式,R(原点分析!)=-1(A),C(原点分析!)=-1(A)

D中的公式,R(原点分析!)=-2(B),C(原点分析!)=-1(C)

F中的公式,R(原点分析!)=-3(C),C(原点分析!)=-1(E)

H中的公式,R(原点分析!)=-4(D),C(原点分析!)=-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

我想我会把我偶然发现的答案贴出来,以防其他人对此感兴趣

ActiveCell.FormulaR1C1=“=COUNTIF(origin\u data!C[”&x-y-1&“],origin\u analysis!RC[-1])”

现在它的工作待遇!感谢斯科特·克兰纳早些时候的帮助,非常感谢