Excel VBA偏移量

时间:2016-08-22 12:31:04

标签: vba

初步问题:Excel VBA sumifs sort and set

所以我有:

int001,int001,..... int024

和29 unique_data。

我想我在这里做错了什么:

Dim iDate As Long
    With Range("C1")
    For iDate = 1 To nr_unique_dates - 1
        .Offset((iDate - 1) * 24 + 1) = Application.WorksheetFunction.SumIfs(INT001, dates, unique_dates(iDate), INT001, ">0")
        .Offset((iDate - 1) * 24 + 2) = Application.WorksheetFunction.SumIfs(INT002, dates, unique_dates(iDate), INT002, ">0")

                                      |     

                                      |

                                      |

                                      |

        .Offset((iDate - 1) * 24 + 22) = Application.WorksheetFunction.SumIfs(INT022, dates, unique_dates(iDate), INT022, ">0")
        .Offset((iDate - 1) * 24 + 23) = Application.WorksheetFunction.SumIfs(INT023, dates, unique_dates(iDate), INT023, ">0")
        .Offset((iDate - 1) * 24 + 24) = Application.WorksheetFunction.SumIfs(INT024, dates, unique_dates(iDate), INT024, ">0")




    Next iDate

但我不知道是什么。

PersonItems = originalItems.Where((person) => person. Name.ToLower().Contains(filter)).ToList();

1 个答案:

答案 0 :(得分:2)

关于输出零的OP请求后

编辑

关于输出零的OP澄清之后

编辑2

如果您的其他代码与链接的代码保持一致,那么您使用With Range("C1")而不是原始 With Range("H1")搞错了,因为C1就在你的 intXXX 数据

里面

由于 intXXX 的24列范围从“B”列到“Y”列,因此您应该使用With Range("Z1")(或者,为了与数据保持两列,With Range("AA1")

您应该完成这样的修改,但我建议您关注@JohnColeman关于“阵列方法”的建议

以下是打开 intXXX 的“范围方法”:

Option Explicit

Sub Tsum2()
    Dim unique_dates As Range, outputRng As Range
    Dim nr_unique_dates As Long
    Dim iDate As Long, nr_Cols As Long, iCol As Long

    With Worksheets("TSums") '<-- change "TSums" with your actual sheet name
        Set outputRng = Cells(1, .Columns.Count).End(xlToLeft).Offset(, 2) '<--| set output range as tow columns right of the last non empty cell in row 1
        With .Range("G1", .Cells(.Rows.Count, 1).End(xlUp)) '<-- reference the range from cell "A1" to cell in column "G" corresponding to last non empty row in column "A"
            nr_Cols = .Columns.Count '<--| store data columns
            .Columns(1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=outputRng, Unique:=True '<-- call AdvancedFilter on first column of the referenced range
            Set unique_dates = Range(outputRng.Offset(1), outputRng.End(xlDown)) '<--| set unique dates range
            nr_unique_dates = unique_dates.Count '<--| store unique dates number
            With .Offset(1).Resize(.Rows.Count - 1) '<--| skip headers of reference range
                For iDate = 1 To nr_unique_dates '<--| outer loop through unique dates
                    For iCol = 2 To nr_Cols '<--| inner loop through "int" columns (from column 2 rightwards)
                        outputRng.Offset((iDate - 1) * (nr_Cols - 1) + iCol - 1, 2) = Application.WorksheetFunction.SumIfs(.Columns(iCol), .Columns(1), unique_dates(iDate), .Columns(iCol), ">0")
                    Next iCol
                Next iDate
            End With
        End With
    End With
    With outputRng.Offset(, 2)
        .SpecialCells(xlCellTypeConstants).Replace 0, ""    '<--| substitute all output "zeros" with a blank value
        .SpecialCells(xlCellTypeBlanks).Delete   '<--| delete all blanks
    End With
End Sub