Excel for 循环从另一行获取值
Excel for loop to get value from another row
我有一个包含各种数据的电子表格。它看起来像这样:
A A A B B C C C C
a 1 2 3 2 1 4 2 3 2
b 0 2 3 3 0 1 2 3 0
c 6 6 3 0 2 1 0 4 0
等等
我想要的是将所有 Aa 相加得到 Aa 总分,将所有 Bb 相加得到 Bb 总分,所有 Ab 等等。
我想做的是,对于每一列,检查它是 A、B 还是 C。我想这样做是因为数据可能会改变,我最终可能会得到 A 的四列,B 的两列,等。但是我知道 a、b 和 c 将保持原样。
我也不知道A、B、C的顺序,可以是两个A,然后是两个C,然后是一个B。
我的最终结果将是 table,其中包含所有总数:
Aa Ab Ac
Ba Bb Bc
Ca Cb Cc
在前面的例子中,Aa = 1 + 2 + 3 = 6,Ab = 5,等等
类似的东西。
我认为 1-1(Aa 的总数)的方法是遍历第一行中的每一列。检查它是否是 A。如果是,则获取同一列但第二行的值。将其添加到总数中。遍历所有列后,在 1-1 中显示总数。
我目前拥有的(对于 A):
Sub getA()
Dim x As Integer
Dim total As Integer
'cols = Find number of columns with data in them
For x = 1 To cols
'cell = cell in Ax
If InStr(1, cellvalue, "a") = 1 Then
'val = value from row 5 in same column
total = total + Val
End If
Next
End Sub
但我真的不知道如何处理注释行。
最后,我想知道的另一件事是如何在不携带任何额外事件(例如按钮)的情况下将这些值显示在各自的单元格中。他们应该在有人打开电子表格的那一刻起就出现在他们的单元格中。
非常感谢任何帮助。
谢谢
您是否在寻找类似的东西:
Function countletter(strLetter As String) As Double
Dim x As Double, y As Double, xMax As Double, yMax As Double
xMax = Range("A1").CurrentRegion.Columns.Count
yMax = Range("A1").CurrentRegion.Rows.Count
For x = 1 To xMax
For y = 1 To yMax
If Cells(y, x).Value = strLetter Then
countletter = countletter + 1
End If
Next
Next
End Function
仅供参考,这可以使用 SUMPRODUCT 公式完成:
=SUMPRODUCT(($B:$J=D)*($A:$A=$C10)*$B:$J)
编辑
要比较第一个字母然后使用这个公式:
=SUMPRODUCT((LEFT($B:$J,1)=D)*($A:$A=$C10)*$B:$J)
我有一个包含各种数据的电子表格。它看起来像这样:
A A A B B C C C C
a 1 2 3 2 1 4 2 3 2
b 0 2 3 3 0 1 2 3 0
c 6 6 3 0 2 1 0 4 0
等等
我想要的是将所有 Aa 相加得到 Aa 总分,将所有 Bb 相加得到 Bb 总分,所有 Ab 等等。
我想做的是,对于每一列,检查它是 A、B 还是 C。我想这样做是因为数据可能会改变,我最终可能会得到 A 的四列,B 的两列,等。但是我知道 a、b 和 c 将保持原样。
我也不知道A、B、C的顺序,可以是两个A,然后是两个C,然后是一个B。
我的最终结果将是 table,其中包含所有总数:
Aa Ab Ac
Ba Bb Bc
Ca Cb Cc
在前面的例子中,Aa = 1 + 2 + 3 = 6,Ab = 5,等等
类似的东西。
我认为 1-1(Aa 的总数)的方法是遍历第一行中的每一列。检查它是否是 A。如果是,则获取同一列但第二行的值。将其添加到总数中。遍历所有列后,在 1-1 中显示总数。
我目前拥有的(对于 A):
Sub getA()
Dim x As Integer
Dim total As Integer
'cols = Find number of columns with data in them
For x = 1 To cols
'cell = cell in Ax
If InStr(1, cellvalue, "a") = 1 Then
'val = value from row 5 in same column
total = total + Val
End If
Next
End Sub
但我真的不知道如何处理注释行。
最后,我想知道的另一件事是如何在不携带任何额外事件(例如按钮)的情况下将这些值显示在各自的单元格中。他们应该在有人打开电子表格的那一刻起就出现在他们的单元格中。
非常感谢任何帮助。 谢谢
您是否在寻找类似的东西:
Function countletter(strLetter As String) As Double
Dim x As Double, y As Double, xMax As Double, yMax As Double
xMax = Range("A1").CurrentRegion.Columns.Count
yMax = Range("A1").CurrentRegion.Rows.Count
For x = 1 To xMax
For y = 1 To yMax
If Cells(y, x).Value = strLetter Then
countletter = countletter + 1
End If
Next
Next
End Function
仅供参考,这可以使用 SUMPRODUCT 公式完成:
=SUMPRODUCT(($B:$J=D)*($A:$A=$C10)*$B:$J)
编辑
要比较第一个字母然后使用这个公式:
=SUMPRODUCT((LEFT($B:$J,1)=D)*($A:$A=$C10)*$B:$J)