Excel 基于VBA内部条件和粘贴值求和
我试图想出一些代码,将vba中不同工作表中的所有值相加,并将它们粘贴为值。我希望一次运行每一行(一行都有相同的条件,只是根据列号从不同的位置获取数据) 如何以这种方式运行基于条件的总和Excel 基于VBA内部条件和粘贴值求和,excel,vba,Excel,Vba,我试图想出一些代码,将vba中不同工作表中的所有值相加,并将它们粘贴为值。我希望一次运行每一行(一行都有相同的条件,只是根据列号从不同的位置获取数据) 如何以这种方式运行基于条件的总和 Dim i as Integer 'Rows Dim n as Integer 'Column For i = 9 To 24 For n = 3 To 21 Next Next 老实说,我不确定这是否回答了您的问题,但它确实粘贴了值而不是公式。宏使用公式(如现在所示)或值(使用相同的公式)
Dim i as Integer 'Rows
Dim n as Integer 'Column
For i = 9 To 24
For n = 3 To 21
Next
Next
老实说,我不确定这是否回答了您的问题,但它确实粘贴了值而不是公式。宏使用公式(如现在所示)或值(使用相同的公式)填充sheet1上的19 x 16矩阵。通过注释循环末尾的相关行来选择哪种方法。将代码放在空工作簿中并运行测试宏,这将在工作表2中生成一些测试数据,并在工作表1中生成摘要。据我所知,这两种方法几乎没有什么不同,这意味着其他一些东西可能会导致你反应缓慢
Option Explicit
Sub test()
Const MONTHS = 19
testdata MONTHS, 1000 ' generate some data on sheet2
Dim ws As Worksheet, wsData As Worksheet
Dim r As Integer, c As Integer
Dim f1 As String, f2 As String, f3 As String
Dim col As String, a1 As String, a2 As String
Dim src As String, mth As Integer
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Cells.Clear
src = ws.Range("B5")
If src = "" Then src = "Sheet2"
Set wsData = ThisWorkbook.Sheets(src)
For r = 1 To 16
ws.Range("B" & r + 8) = "Category_" & r
For mth = 1 To 19
If r = 1 Then ws.Cells(8, mth + 2) = "Month " & mth
c = mth + 4
a1 = Chr(65 + (c - 1) Mod 26)
a2 = ""
' generate column as letters (up to ZZ)
If c > 26 Then a2 = Chr(64 + Int((c - 1) / 26))
col = a2 & a1 & ":" & a2 & a1
f1 = src & "!" & col
f2 = src & "!AI:AI"
f3 = "B" & r + 8
ws.Cells(r + 8, mth + 2).Formula = "=SUMIFS(" & f1 & "," & f2 & "," & f3 & ")"
'ws.Cells(r + 8, mth + 2) = WorksheetFunction.SumIfs(Range(f1), Range(f2), ws.Range(f3).Value)
Next
Next
MsgBox "Finished"
End Sub
Sub testdata(mth As Integer, i As Long)
' sheet2 data
Dim ws, r, c
Set ws = ThisWorkbook.Sheets("Sheet2")
ws.Cells.Clear
For r = 2 To i
ws.Range("AI" & r) = "Category_" & (1 + Int(Rnd() * 16))
For c = 5 To 4 + mth
ws.Cells(r, c) = Int(Rnd() * 100)
Next
Next
End Sub
这样的循环会非常慢。a) 你为什么不用公式呢?公式是Excel的强项,与VBA相比速度非常快。b) 如果你需要某种自动化,你甚至可以用VBA编写公式c)如果你真的必须使用VBA,请使用请分享一些您为什么必须这样做以及为什么必须使用VBA的背景信息,以便我们可以提供合适的答案。如果游戏中出现了条件,也会有
=SUMIF()
和=SUMIFS()
公式。或者作为VBA的等价物和。这些公式使得excel速度非常慢,因为它补充了条件格式,文件基本上是自己拖动的。我试图想出一些解决方案,只需使用字典或循环来运行,然后就可以使用主要值分析文件。尝试一下工作表函数。我想一个循环会更慢。你可以看看,从每张表中获取数据,然后从数组中求和。直接访问工作表上的单元格可能非常慢(如果要访问的单元格很多)。如果您在不同的页面上发布数据示例,并提供有关代码的更多详细信息,我们可以提供更多建议。