ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 124|回复: 5

[求助] execl批量提取文件夹下所有表格的固定单元格的值(家庭人口需二次运算)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-20 11:45 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.jpg

数据提取模板.rar

96.99 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-8-20 14:10 | 显示全部楼层
很简单 得走VBA

TA的精华主题

TA的得分主题

发表于 2024-8-20 14:29 | 显示全部楼层
你发错版块了,.
VBA的活,,,就是点苦力活

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-20 22:19 来自手机 | 显示全部楼层
13570449347 发表于 2024-8-20 14:10
很简单 得走VBA

请来一个vba 可以吗 大佬

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-20 22:20 来自手机 | 显示全部楼层
沈默00 发表于 2024-8-20 14:29
你发错版块了,.
VBA的活,,,就是点苦力活

大佬 可以带我起飞吗 请求支援啊

TA的精华主题

TA的得分主题

发表于 2024-8-21 17:24 | 显示全部楼层
1.按alt+f11,进入VBA窗口

2.双击左边ThisWorkbook,输入:
  1. Sub ExtractDataFromWorkbooks()
  2.     Dim wsTarget As Worksheet
  3.     Dim lastRow As Long
  4.     Dim row As Long
  5.     Dim wbName As String
  6.     Dim wsName As String
  7.     Dim wb As Workbook
  8.     Dim ws As Worksheet
  9.     Dim cellValue As String
  10.     Dim householdName As String
  11.     Dim region3 As String
  12.     Dim peopleCount As Long
  13.     Dim perCapitaIncome As Double
  14.     Dim targetFolderPath As String
  15.     Dim currentWbPath As String
  16.     Dim cell As Range
  17.     Dim foundCell As Range
  18.    
  19.     ' 指定目标工作表(数据将填充到该表)
  20.     Set wsTarget = ThisWorkbook.Sheets("Sheet1")
  21.    
  22.     ' 获取目标工作簿的文件夹路径
  23.     currentWbPath = ThisWorkbook.Path
  24.    
  25.     ' 找到最后一行
  26.     lastRow = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).row
  27.    
  28.     ' 从第二行开始循环,提取数据
  29.     For row = 2 To lastRow
  30.         wbName = wsTarget.Cells(row, 1).Value & ".xlsx" ' 添加 ".xlsx" 后缀
  31.         wsName = wsTarget.Cells(row, 2).Value
  32.         
  33.         ' 检查指定的工作簿是否在相同的文件夹中
  34.         targetFolderPath = currentWbPath & "" & wbName
  35.         If Dir(targetFolderPath) = "" Then
  36.             MsgBox "工作簿 " & wbName & " 不在目标文件夹中,无法执行操作。", vbExclamation
  37.             GoTo NextIteration
  38.         End If
  39.         
  40.         ' 打开指定工作簿
  41.         On Error Resume Next
  42.         Set wb = Workbooks.Open(targetFolderPath)
  43.         On Error GoTo 0
  44.         
  45.         If Not wb Is Nothing Then
  46.             On Error Resume Next
  47.             ' 获取指定工作表
  48.             Set ws = wb.Sheets(wsName)
  49.             On Error GoTo 0
  50.             
  51.             If Not ws Is Nothing Then
  52.                 ' C列: 提取 A3 单元格 "地区3:" 后面的非空文字
  53.                 cellValue = ws.Range("A3").Value
  54.                 If InStr(cellValue, "地区3:") > 0 Then
  55.                     region3 = Trim(Mid(cellValue, InStr(cellValue, "地区3:") + Len("地区3:")))
  56.                 Else
  57.                     region3 = ""
  58.                 End If
  59.                 wsTarget.Cells(row, 3).Value = region3
  60.                
  61.                 ' D列: 提取户主姓名对应的 B 列数据
  62.                 householdName = wsTarget.Cells(row, 4).Value
  63.                 Set foundCell = ws.Columns("D").Find(What:="户主", LookIn:=xlValues, LookAt:=xlPart)
  64.                 If Not foundCell Is Nothing Then
  65.                     householdName = ws.Cells(foundCell.row, "B").Value
  66.                     wsTarget.Cells(row, 4).Value = householdName
  67.                 Else
  68.                     wsTarget.Cells(row, 4).Value = "未找到"
  69.                 End If
  70.                
  71.                 ' E列: 统计 B9 到 B17 单元格的姓名数量
  72.                 peopleCount = Application.CountA(ws.Range("B9:B17"))
  73.                 wsTarget.Cells(row, 5).Value = peopleCount
  74.                
  75.                 ' F列: 提取 D27 单元格数据
  76.                 wsTarget.Cells(row, 6).Value = ws.Range("D27").Value
  77.                
  78.                 ' G列: 提取 O27 单元格数据
  79.                 wsTarget.Cells(row, 7).Value = ws.Range("O27").Value
  80.                
  81.                 ' H列: 提取 N39 单元格数据
  82.                 wsTarget.Cells(row, 8).Value = ws.Range("N39").Value
  83.                
  84.                 ' I列: 提取 Q27 单元格数据
  85.                 wsTarget.Cells(row, 9).Value = ws.Range("Q29").Value
  86.                
  87.                 ' J列: 提取 A44 单元格 "人均收入:" 后面的数字
  88.                 cellValue = ws.Range("A44").Value
  89.                 If InStr(cellValue, "人均收入:") > 0 Then
  90.                     perCapitaIncome = Val(Trim(Mid(cellValue, InStr(cellValue, "人均收入:") + Len("人均收入:"))))
  91.                 Else
  92.                     perCapitaIncome = 0
  93.                 End If
  94.                 wsTarget.Cells(row, 10).Value = perCapitaIncome
  95.                
  96.             Else
  97.                 MsgBox "无法找到工作表 " & wsName & " 在工作簿 " & wbName, vbExclamation
  98.             End If
  99.             
  100.             ' 关闭工作簿而不保存更改
  101.             wb.Close SaveChanges:=False
  102.         Else
  103.             MsgBox "无法打开工作簿 " & wbName, vbExclamation
  104.         End If
  105.         
  106. NextIteration:
  107.     Next row
  108.    
  109.     MsgBox "数据提取完成!"
  110. End Sub

复制代码
3.按alt+q,退出VBA窗口
4.按alt+f8,启动宏


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-21 15:39 , Processed in 0.049242 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表