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()
函数添加数据,这里有两个可选代码
-
“数组”的方法
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
-
“帮手排”的做法
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)