繁体   English   中英

宏VBA,尝试结合SumIfs和Left

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM