You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写通用类模块/自定义函数加载Excel数据,无需逐个定义表头且可复用?

问题:动态加载Excel数据到Collection,无需逐个定义类字段

我需要把多组Excel数据读取到Collection中,但目前必须在类模块里逐个定义工作表的列字段才能加载数据。随着列字段持续新增,每次手动添加字段的操作十分繁琐。


现有类模块代码(clsUtil)

Option Explicit

Public COL_ID As Integer
Public PCT_GRTHAN As Double
Public PCT_LESSTHAN_EQUAL As Double
Public TIME_BUCKET As String
Public NO_OF_GROUPS As Integer
Public sum As Integer
Public PCT As Double

现有主程序代码

Sub UtilProfReport()

    Dim sh As Worksheet
    Dim row As Long

    Dim col3 As New Collection

    Dim rg As Range
    Set rg = Sheets("Sheet1").Range("A1").CurrentRegion
    
    Dim i As Long, UtilProf As clsUtil
    For i = 2 To rg.Rows.Count
    
        If rg.Cells(i, 1).Value > 0 Or i = 1 Then
            Set UtilProf = New clsUtil
            
            UtilProf.COL_ID = rg.Cells(i, 1).Value
            UtilProf.PCT_GRTHAN = rg.Cells(i, 2).Value
            UtilProf.PCT_LESSTHAN_EQUAL = rg.Cells(i, 3).Value
            UtilProf.TIME_BUCKET = rg.Cells(i, 4).Value
            UtilProf.NO_OF_GROUPS = rg.Cells(i, 5).Value
            UtilProf.sum = rg.Cells(i, 6).Value
            UtilProf.PCT = rg.Cells(i, 7).Value
                
            col3.Add UtilProf
        End If
    Next i
    
    Worksheets.Add

    Set sh = ActiveSheet

    sh.Range("A1").Value = "UTIL"
    sh.Range("A2").Value = ">"
    sh.Range("B2").Value = ChrW(&H2264)
    sh.Range("C2").Value = "# Groups"
    sh.Range("D2").Value = "%"

    ActiveWindow.DisplayZeros = False
    sh.DisplayPageBreaks = False
    
    With Application
        .ScreenUpdating = False
        .EnableAnimations = False
    End With
    
    With sh.Range("A1:D1")
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
        .Interior.Color = 15849925
    End With
    
    sh.Range("A2:D2").Interior.Color = 14277081
    
    Dim UtilProfout As clsUtil
    For i = 1 To col3.Count
        row = i + 2

        With sh
            Set UtilProfout = col3(i)
            .Cells(row, 1).Value = UtilProfout.PCT_GRTHAN
            .Cells(row, 2).Value = UtilProfout.PCT_LESSTHAN_EQUAL
            .Cells(row, 3).Value = UtilProfout.NO_OF_GROUPS
            .Cells(row, 4).Value = UtilProfout.PCT
        End With
     Next i
     
End Sub

预期输出

生成的工作表样式为:首行合并单元格显示"UTIL",背景色为深灰蓝色;第二行表头依次为">"、"≤"、"# Groups"、"%",背景色为浅灰蓝色;下方为对应的数据行,不显示零值,无分页符。


需求

求一个通用的类模块或自定义函数,能够自动加载Excel工作表的原始数据到Collection,无需手动逐个定义表头字段,且该工具可复用在同一工作簿的其他工作表上(类似通用读取文件的函数逻辑)。


内容的提问来源于stack exchange,提问作者yywong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:30:50