相关文章推荐
冷冷的沙发  ·  《仙子下地獄+第二部風華正茂同人改編版章仙子 ...·  5 月前    · 
睿智的楼房  ·  关于对2022年克拉玛依市工人先锋号、劳模和 ...·  1 年前    · 
性感的青椒  ·  得儿君SP薯片的个人空间-得儿君SP薯片个人 ...·  1 年前    · 
失眠的灭火器  ·  鲁迅文学刊物《奔流》于河南再度复刊-搜狐新闻·  1 年前    · 
忐忑的便当  ·  react-redux数据已经修改但界面没有 ...·  1 年前    · 
Code  ›  VBA: 遍历文件抓取指定条件的数据开发者社区
软件 sub 遍历 vba
https://cloud.tencent.com/developer/article/2069362
奔放的蜡烛
1 年前
Exploring

VBA: 遍历文件抓取指定条件的数据

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
Exploring
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > VBA: 遍历文件抓取指定条件的数据

VBA: 遍历文件抓取指定条件的数据

作者头像
Exploring
发布 于 2022-08-10 09:13:05
1.4K 0
发布 于 2022-08-10 09:13:05
举报
文章被收录于专栏: 数据处理与编程实践 数据处理与编程实践

文章背景: 要查看某次考试成绩不及格的所有学生名单;假定按年级建文件夹,每个文件夹内有各班的考试成绩表(见下图)。需要遍历所有表格,然后对每行的学生成绩进行判断。

图1 文件框架

图2 表格示例

通过Excel VBA的UserForm控件来完成本文的任务。

各个控件内的代码如下所示:

代码语言: javascript
复制
Option Explicit
Option Base 1
'存储数据
Dim data(), flag As Integer
Private Sub CommandButton6_Click()
    '修改路径1的按钮
    With Application.FileDialog(filedialogtype:=msoFileDialogFolderPicker)
        .InitialFileName = "E:\工作\A校"             '设置起始目录
        .AllowMultiSelect = True                    '单选
        .Title = "请选新的文件夹路径1"               '设置对话框标题
        .Show                                       '显示对话框
        If .SelectedItems.Count > 0 Then
            TextBox1.Text = .SelectedItems(1)       '将选中的文件夹路径添加到文本框1
            MsgBox "没有选择目录!"
        End If
    End With
End Sub
Private Sub CommandButton7_Click()
    '修改路径2的按钮
    With Application.FileDialog(filedialogtype:=msoFileDialogFolderPicker)
        .InitialFileName = "E:\工作\B校"            '设置起始目录
        .AllowMultiSelect = True                    '单选
        .Title = "请选新的文件夹路径2"              '设置对话框标题
        .Show                                       '显示对话框
        If .SelectedItems.Count > 0 Then
            TextBox2.Text = .SelectedItems(1)       '将选中的文件夹路径添加到文本框1
            MsgBox "没有选择目录!"
        End If
    End With
End Sub
Private Sub CommandButton8_Click()
    '遍历查找
    Dim tarSheet As Worksheet, num As Integer, folder As String
    Dim time_ini As Date
    '0 准备工作
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    time_ini = Timer
    '1 清除原有数据
    Set tarSheet = ThisWorkbook.Worksheets("查找结果")
    num = tarSheet.Range("A65535").End(xlUp).Row
    If num > 1 Then
        tarSheet.Range("A2:E" & num).ClearContents
    End If
    flag = 0
    '2 遍历文件夹1
    folder = TextBox1.Text
    searchdata folder
    '3 遍历文件夹2
    folder = TextBox2.Text
    searchdata folder
    '4 数据汇总
    tarSheet.Range("A2").Resize(flag, 5) = Application.WorksheetFunction.Transpose(data)
    MsgBox "Done!  " & vbCrLf & vbCrLf & "用时:" & Format(Timer - time_ini, "0.0s")
    Erase data
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    Exit Sub
End Sub
Sub searchdata(folder As String)
    '遍历子文件夹内的各个文件
    Dim fso As Object, fld As Object, subfld As Object, filename As String
    Dim aWB As Workbook, tempSheet As Worksheet, row_total As Integer
    Dim ii As Integer, jj As Integer
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(folder) Then             '判断文件夹是否存在
        Set fld = fso.GetFolder(folder)
        For Each subfld In fld.SubFolders                '遍历子文件夹
            filename = Dir(subfld & "\*.xlsx")
                Workbooks.Open subfld & "\" & filename
                Set aWB = ActiveWorkbook
                Set tempSheet = ActiveWorkbook.Worksheets(1)
                row_total = tempSheet.Range("A65535").End(xlUp).Row
                '遍历各行数据
                If row_total > 1 Then
                    For ii = 2 To row_total
                        If tempSheet.Cells(ii, 5) < 60 Then
                            flag = flag + 1
                            ReDim Preserve data(1 To 5, 1 To flag)
                            For jj = 1 To 5
                                data(jj, flag) = tempSheet.Cells(ii, jj)
                            Next jj
                        End If
                End If
                aWB.Close SaveChanges:=False
                filename = Dir
            Loop Until filename = ""
        MsgBox "文件夹的路径不存在,请确认!"
        Exit Sub
    End If
End Sub
 
推荐文章
冷冷的沙发  ·  《仙子下地獄+第二部風華正茂同人改編版章仙子下地獄純愛沈秋版》(佚名)小說在線閱讀
5 月前
睿智的楼房  ·  关于对2022年克拉玛依市工人先锋号、劳模和工匠人才创新工作室拟命名对象的公示_克拉玛依市人民政府
1 年前
性感的青椒  ·  得儿君SP薯片的个人空间-得儿君SP薯片个人主页-哔哩哔哩视频
1 年前
失眠的灭火器  ·  鲁迅文学刊物《奔流》于河南再度复刊-搜狐新闻
1 年前
忐忑的便当  ·  react-redux数据已经修改但界面没有更新(解决方案)_redux数据修改页面不更新-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号