excel - 使用嵌套循环对特定单元格求和
问题描述
通常的任务是将 Excel 数据集中的特定值求和并将其粘贴到另一个工作表中。
我的想法是嵌套三个循环。
The first Loop Counts the Project specific number
The second Loop Counts the columns (Begins with column 'H')
The third Loop Counts the rows (Begins with row '9')
Inside this function the program sums the values related to the project number.
After it is done, the accumulated value should be pasted into
another worksheet. The cell it has to be pasted in, is the specific cell for
the project number and column.
The third loop ends when it reached the last filled row.
The second loop ends when it reached the last filled column.
The first loop ends when it reached the last predefined project number
将累积值粘贴到另一个工作表中
解决方案
求和和复制循环
调整常量部分中的值以满足您的需要。
编码
Sub SumAndCopy()
' Source
Const cSheet1 As Variant = "Sheet1" ' Worksheet Name/Index
Const cCol1 As Variant = "D" ' Criteria Column Letter/Number
Const cValFirst1 As Variant = "H" ' First Value Column/Number
Const cFirstRow1 As Integer = 9 ' First Row
' Target
Const cSheet2 As Variant = "Sheet2" ' Worksheet Name/Index
Const cCol2 As Variant = "D" ' Criteria Column Letter/Number
Const cValFirst2 As Variant = "H" ' First Value Column/Number
Const cFirstRow2 As Integer = 9 ' First Row
' Both
Const cValCols As Integer = 6 ' Number of Value Columns
Dim ws1 As Worksheet ' Source Worksheet
Dim ws2 As Worksheet ' Target Worksheet
Dim lngLast1 As Long ' Source Last Used Row
Dim lngLast2 As Long ' Target Last Used Row
Dim intFirst1 As Integer ' Source First Value Column Number
Dim intFirst2 As Integer ' Target First Value Column Number
Dim i As Long ' Source Row Counter
Dim j As Integer ' Source/Target Value Column Counter
Dim k As Long ' Target Row Counter
Dim lngTemp As Long ' Value Accumulator
Set ws1 = Worksheets(cSheet1)
Set ws2 = Worksheets(cSheet2)
' Calculate Last Used Rows.
lngLast1 = ws1.Cells(ws1.Rows.Count, cCol1).End(xlUp).Row
lngLast2 = ws2.Cells(ws2.Rows.Count, cCol2).End(xlUp).Row
' Calculate First Columns.
intFirst1 = ws1.Cells(1, cValFirst1).Column
intFirst2 = ws2.Cells(1, cValFirst2).Column
' Loop through cells (rows) of Target Criteria Column.
For k = cFirstRow2 To lngLast2
' Loop through Value Columns.
For j = 1 To cValCols
lngTemp = 0 ' Reset Value Accumulator.
' Loop through cells (rows) of Source Criteria Column.
For i = cFirstRow1 To lngLast1
' Check if criterias are equal.
If ws1.Cells(i, cCol1) = ws2.Cells(k, cCol2) Then
' Add value to Val7ue Accumlator
lngTemp = lngTemp + ws1.Cells(i, j + intFirst1 - 1)
End If
Next
' Write accumulated value to current target cell.
ws2.Cells(k, j + intFirst2 - 1) = lngTemp
Next
Next
End Sub
推荐阅读
- arrays - “没有提供数组访问的设置方法”——为什么在 Kotlin 中会发生这种情况?
- javascript - 为什么 javascript 在我之前的 html 上运行
- r - tidyverse 和 jsonlite - 将嵌套的 JSON 代码提要转换为单行数据框
- elasticsearch - 使用 gradle 设置基本插件
- mysql - 两个表的LEFT JOIN,SUM,GROUP
- javascript - 自动更正/自动拼写检查和自动更正,无需询问用户
- ios - UIControl 内存泄漏
- python - 捕获但不使用字符串中的字符
- python - 使用 matplotlib 在图例中制作自定义垂直线标记
- javascript - 获取引导模式中动态添加的选择输入的值以显示/隐藏文本输入