Sumif与列索引而不是字母表forms范围

我在用

=SumIf(ws!A:A,"Some Text", ws!G:G) 

将一些数据添加到新的电子表格。

我想知道是否有办法将A或G转换为1或7,或者使用列索引而不是按字母顺序的forms给予Sumif函数相同效果的其他解决方法。

这对我来说似乎很重要,因为我的下一个单元格将是:

 sumif(ws!A:A, "Some Text", ws!I:I) sumif(ws!A:A, "Some Text", ws!K:K) 

等等。

我希望循环这两列的间隔(如示例中所示),但我不知道如何使用范围的字母表forms。 一些帮助将不胜感激。

这里使用VBA:

 Sub concious() Dim i As Integer, j As Integer: j = 0 For i = 0 To 10 Step 2 '<~~ depends how many columns you wish to populate With Sheet2 Sheet1.Range("A1").Offset(0, j).Formula = _ "=SUMIF(" & .Columns("A:A").Address(, , , True) & _ ",""Some Text""," & .Columns("G:G").Offset(0, i).Address(, , , True) & ")" End With j = j + 1 Next End Sub 

那么, Sheet1就是你放公式的地方, Sheet2就是你的参考表。
您可以使用Sheets("NameofYourActualSheet")replaceSheet1 Sheets("NameofYourActualSheet")或实际的表格代号。

这是公式版本:

 =SUMIF(Sheet2!$A:$A,"Some Text",OFFSET(Sheet2!$G:$G,,(COLUMN()-1)*2)) 

这部分COLUMN()-1取决于你想要把你的公式。
它只适用于在Sheet1的列A中开始的公式。

编辑:实现OP后编辑要求公式每个不均匀的列…

假设“NewSheet”作为工作表的名称,通过引用ws工作表的SumIf()函数添加数据,这里有两个可选代码

  1. “数组”的方法

     Option Explicit Sub main() Dim ws As Worksheet Dim myArr As Variant Dim i As Long Dim formulaStrng As String Set ws = Worksheets("OldSheet") '<-- change as per your actual "ws" name formulaStrng = "=SumIf(" & ws.Name & "!C1,""Some Text""," & ws.Name & "!C)" With Worksheets("NewSheet").Range("A1:NC1") ReDim myArr(1 To .Columns.Count) For i = 1 To .Columns.Count If 2 * Int(i / 2) <> i Then myArr(i) = formulaStrng Next i .value = myArr End With End Sub 
  2. “帮手排”的做法

     Sub main2() Dim ws As Worksheet Set ws = Worksheets("OldSheet") With Worksheets("NewSheet").Range("A1:NC1") .FormulaR1C1 = "=SumIf(" & ws.Name & "!C1,""Some Text""," & ws.Name & "!C)" With .offset(1) '<--| helper row. assuming row 2 is "free". should it not be, simply adjust the offset .FormulaR1C1 = "=if(2*int(column()/2)<>column(),1,"""")" '<-- mark "uneven" columns with "1" .value = .value '<-- get rid of formulas .SpecialCells(xlCellTypeBlanks).EntireColumn.Clear ''<-- clear "even" colums .ClearContents ''<-- clear helper row End With End With End Sub 

这两种方法都可以加速,在开始时join下面的代码:

 Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.ScreenUpdating = False 

和下面的代码结尾:

 Application.ScreenUpdating = True Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic 

= SUBSTITUTE(ADDRESS(1,X,4), “1”, “”)& “:” &SUBSTITUTE(ADDRESS(1,X,4), “1”, “”)

x将是你的专栏

然后,您必须将其从文本转换为范围:

= SUMIF(INDIRECT(SUBSTITUTE(ADDRESS(1,X,4), “1”, “”)& “:” &SUBSTITUTE(ADDRESS(1,X,4), “1”, “”)), “B” ,A:A)