[英]Macro VBA, trying to combine SumIfs and Left
我正在尝试在VBA中运行带有Sumifs
函数的Left
函数:
我有:
Sub refresh_OEdc_data_files()
Application.ScreenUpdating = False
Dim wB As Workbook
Dim SumResult As Double
Dim OutPutRange As Range
Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
'Fill it with your own adress
Set FolderObj = FileSystemObj.GetFolder("C:...\")
Set OutPutRange = Workbooks("Libro4").Sheets("Hoja1").Range("D4")
For Each fileobj In FolderObj.Files
Set wB = Workbooks.Open(fileobj.Path)
For Each fileobj In FolderObj.Files
Set wB = Workbooks.Open(fileobj.Path)
'My Problem is here
SumResult = WorksheetFunction.SumIfs(wB.Sheets("Schedule Daily Bank Structure R").Range("A:A"), Left(wB.Sheets("Schedule Daily Bank Structure R").Range("H6:H414").Value, 2), "<1", Left(wB.Sheets("Schedule Daily Bank Structure R").Range("H6:H414").Value, 2), "=>3")
OutPutRange.Value = SumResult
Set OutPutRange = OutPutRange.Offset(1, 0)
wB.Save
wB.Close
Next fileobj
End Sub
'SumResult2 = WorksheetFunction.SumIfs(wB.Sheets("Schedule Daily Bank Structure R").Range("A:A"), Left(wB.Sheets("Schedule Daily Bank Structure R").Range("H6:H414").Value, 2), "<1", Left(wB.Sheets("Schedule Daily Bank Structure R").Range("H6:H").Value, 2), "=>3")
'Does not seem to be well specified
我经常SumIfs
“错误13”消息,所以,我猜我的SumIfs
是错误的,但是我无法弄清楚是什么,希望我仍然可以在其中循环播放不同的Excel文件(我的wb),我不知道问题出在哪里。从。 不能与简单的SumIf
使用。
我看到的唯一明显的问题是范围不一致。 还将使用with语句缩短文本:
With wB.Sheets("Schedule Daily Bank Structure R")
SumResult2 = WorksheetFunction.SumIfs(.Range("A6:A414"), Left(.Range("H6:H414").Value, 2), "<1", Left(.Range("H6:H414").Value, 2), "=>3")
End With
A:A与A4:A414,即不一致。 您正在从H6向下评估,使用A:A时,它与A6向下没有直接关系。
如果您仍然遇到问题,并且认为这是工作的Left(,)部分,建议您设置尺寸,例如:
Dim rngH as Integer
With wB.Sheets("Schedule Daily Bank Structure R")
rngH = Left(.Range("H6:H414").Value, 2)
SumResult2 = WorksheetFunction.SumIfs(.Range("A6:A414"), rngH, "<1", rngH, "=>3")
End With
当您单步执行代码时,将可以查看rngH是否被正确拾取。 如果选择正确,则可以检查以确保范围参数符合VBA的要求。
编辑:为您提供一种不同的方法:
Dim rngH, i, j, k As Integer
With wB.Sheets("Schedule Daily Bank Structure R")
For i = 6 To 414
rngH = Left(.Cells(i, "H").Value, 2)
If rngH > 1 And rngH <= 3 Then 'Value is between 1 and 3; corrected per comments
k = .Cells(i, "A").Value
End If
j = j + k
K=0
Next i
'Output j somewhere
End With
这将使用循环来代替使用sumifs函数。
Edt2:
现在,让我们对您要去的地方有了更好的了解:
Dim rngH, i, j, k, b As Integer
With wB.Sheets("Schedule Daily Bank Structure R")
For b = 0 to 23
For i = 6 To 414
rngH = Left(.Cells(i, "H").Value, 2)
If rngH = b Then
k = .Cells(i, "A").Value
End If
j = j + k
K=0
Next i
Sheets("Master").Cells(2, b+2).Value = j 'Edit this where you want the output
j=0
Next b
End With
这样就可以为每个工作簿运行,报告每个小时的数据(如果您希望在一个小时内获得操作,则不需要一定的范围)。 在使用Sheets(“ Master”)的地方,弄清楚您希望报告值位于何处。
EDIT3:
我们不在问题的范围内,但将尝试提供最后一点帮助:
For Each fileobj In FolderObj.Files
Set wB = Workbooks.Open(fileobj.Path)
e = d
'Other code to go through the hours
Sheets("Master").Cells(d+2, b+2).Value = j 'Edit this where you want the output
'Hopefully that makes sense
f = 1
d = e + f
Next fileobj
这将提供一个与fileobj更改一起迭代的值,该值可以直接作为行添加到输出单元格中。 只需确保将dim d设为Long,e设为Long,f设为Long。
我目前在这里:我使用一个非常简单的excel文件进行尝试,但出现以下不匹配错误:SumResult2 = WorksheetFunction.SumIfs(.Range(“ A2:A11”),rngH,“ => 0”,rngH,“ <2" )
Sub refresh_OEdc3333_data_files()
Application.ScreenUpdating = False
Dim wB As Workbook
Dim SumResult As Double
Dim OutPutRange As Range
Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
'Fill it with your own adress
Set FolderObj = FileSystemObj.GetFolder("C:...\")
Set OutPutRange = Workbooks("Libro1").Sheets("Hoja1").Range("D4")
For Each fileobj In FolderObj.Files
Set wB = Workbooks.Open(fileobj.Path)
Dim rngH As Integer
With wB.Sheets("Hoja1")
rngH = Right(.Range("H2:H11").Value, 2)
SumResult = WorksheetFunction.SumIfs(.Range("A2:A11"), rngH, "=>0", rngH, "<2")
End With
OutPutRange.Value = SumResult
Set OutPutRange = OutPutRange.Offset(1, 0)
wB.Save
wB.Close
Next fileobj
结束子
虽然看起来并不那么困难...但是无法获得结果
实际上,我有一个文件夹,里面充满了具有相同格式的excel工作表,对于我在A栏肯定操作数中的每个文档,此数字与某个小时相关联,H:栏12:03出现1203。
例如,一个文件夹可以有一张纸:
A H
4242 0032
2342 0034
653 0043
865 0057
53 0154
64 0159
在sheet2中:
A H
54 0002
76 0045
54 0056
43 0058
56 0105
765 0153
43 0157
. .
. .
. .
546 2334
43 2359
我想做的是在另一个工作表中创建一个矩阵,格式如下:
H1 H2 H3 H4 H5 ... H24
1
2
3
4
.
.
.
Total number of file in my folder
H1 ... H24在一个时隙对应,例如H1:00:00至00:59,H2 01:00至01:59 ...等等
1,2,3 ...是张数
该矩阵将每个时间段(每个小时)和每个文件的操作次数(包含在A中)相加,因此矩阵...
Sub refresh_OEdc33333_data_files()
'Application.ScreenUpdating = False
Dim wB As Workbook
Dim SumResult As Double
Dim OutPut As Range
Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
'Fill it with your own adress
Set FolderObj = FileSystemObj.GetFolder("C:...\")
Set OutPut = Workbooks("Libro1").Sheets("Hoja1").Range("A1")
For Each fileobj In FolderObj.Files
Set wB = Workbooks.Open(fileobj.Path)
Dim rngH, i, j, k As Integer
With wB.Sheets("Hoja1")
For i = 2 To 11
rngH = Left(.Cells(i, "H").Value, 2)
If rngH < 7 And rngH >= 0 Then
k = .Cells(i, "A").Value
End If
k = 0
j = j + k
Next i
OutPut.Value = j
Set OutPut = OutPut.Offset(1, 0)
End With
wB.Save
wB.Close
Next fileobj
结束子
我的想法是重复24次您给我的循环。 到目前为止,它只给了我0 ..但我相信你的主意是个好主意
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.