我有一个包含各种数据的电子表格。它看起来像这样:
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.
我的最终结果将是一个包含所有总数的表格:
Aa Ab Ac
Ba Bb Bc
Ca Cb Cc
前面示例中的位置表示Aa = 1 + 2 + 3 = 6,Ab = 5等
类似的东西。
我认为要走的路是1-1(Aa' s的总数)要经过第一行的每一列。检查它是否为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
但我真的不知道如何处理注释行。
最后,我想知道的另一件事是,如何在没有任何额外事件的情况下将这些值呈现在各自的单元格中(例如按钮)。从有人打开电子表格的那一刻起,它们就应该出现在他们的单元格中。
非常感谢任何帮助。 感谢。
答案 0 :(得分:1)
只是一个FYI,可以使用SUMPRODUCT公式来完成:
=SUMPRODUCT(($B$1:$J$1=D$9)*($A$2:$A$4=$C10)*$B$2:$J$4)
修改强>
要比较第一个字母,请使用以下公式:
=SUMPRODUCT((LEFT($B$1:$J$1,1)=D$9)*($A$2:$A$4=$C10)*$B$2:$J$4)
答案 1 :(得分:0)
您正在寻找类似的东西:
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