Excel for循环从另一行获取值
我有一个包含各种数据的电子表格。 它看起来像这样:
AAABBCCCC 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的总数)是通过第一排的每一列。 检查它是否为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
但我真的不知道如何继续评论的线。
最后,我想知道的另一件事情是,如何将这些值呈现在它们各自的单元格中,而无需执行任何额外的事件(例如button)。 只要有人打开电子表格,他们应该出现在他们的单元格中。
任何帮助是极大的赞赏。 谢谢。
仅供参考,可以使用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)
你在找什么东西吗?
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