ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: hyz00001

[分享] 从个人所得税专项扣除信息表中提取资料。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-15 10:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
能发个2003版的不?谢谢

TA的精华主题

TA的得分主题

发表于 2019-1-15 10:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,麻烦给看看,如何将附件中的三个表格汇总到汇总表里
现在可以有几千个表格需要汇总,我只上传了3个
我看到有很多朋友遇到这样的问题 ,但是都么有解决
麻烦您看一下

专项附加扣除信息汇总.zip

37.78 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2019-1-15 11:07 | 显示全部楼层
其实不需要把所有的复制到表。根据你的代码改了下,把放进同一个文件夹就可以了,不过试了下,office2016运行的会提示类型不匹配。wps运行正常


  1. Sub 合并()
  2.     Dim MyPath As String, MyFile As String, i As Integer
  3.     Dim Wb As Workbook, arr
  4.     Application.ScreenUpdating = False
  5.     MyPath = ThisWorkbook.Path
  6.     MyFile = Dir(MyPath & "\*.xls*")
  7.     Do Until MyFile = ""
  8.         If MyFile <> ThisWorkbook.Name Then
  9.             Set Wb = Workbooks.Open(MyPath & "" & MyFile)

  10.     Dim br(65536, 20)
  11.     Dim a, b, c, x, y, r, rx, ry, n, item
  12.    
  13.    
  14.    
  15.     For Each sht In Sheets
  16.         sht.Activate
  17.         If [a2] <> "个人所得税专项附加扣除信息表" Then GoTo nextsht
  18.         rx = Cells(Rows.Count, 1).End(xlUp).Row
  19.         ry = Cells(5, Columns.Count).End(xlToLeft).Column
  20.         ar = Range(Cells(1, 1), Cells(rx, ry))
  21.         item = item + 1
  22.         br(item - 1, 0) = ar(4, 2) '姓名
  23.         br(item - 1, 1) = "'" & ar(4, 6) '身份证
  24.         br(item - 1, 2) = "'" & ar(5, 7) '手机号码
  25.         '子女扣除
  26.         n = Application.CountIf(Cells, "本人扣除比例")
  27.         For c = 1 To n
  28.             br(item - 1, 3) = br(item - 1, 3) + 1000 * ar(10 + c * 4, 7) / 100
  29.             br(item - 1, 4) = br(item - 1, 4) & "," & ar(7 + c * 4, 3)
  30.         Next c
  31.             br(item - 1, 4) = Mid(br(item - 1, 4), 2, 99)  '"共" & c & "个小孩,他们是:" &
  32.         '教育扣除
  33.         c = Application.Match("当前继续教育起始时间", Application.Index(ar, , 2), 0)
  34.         If ar(c, 3) <> "" Then br(item - 1, 5) = 400: br(item - 1, 6) = ar(c, 7) & ar(c, 3)
  35.         '住房贷款
  36.         c = Application.Match("房屋证书号码", Application.Index(ar, , 6), 0)
  37.         If ar(c + 1, 7) = "是" Then br(item - 1, 7) = 500: br(item - 1, 8) = ar(c + 4, 7)
  38.         If ar(c + 1, 7) = "否" Then br(item - 1, 7) = 1000: br(item - 1, 8) = ar(c + 4, 7)
  39.         '租房
  40.         c = Application.Match("租赁期止", Application.Index(ar, , 6), 0)
  41.         If ar(c, 7) <> "" Then br(item - 1, 9) = 1500: br(item - 1, 10) = ar(c - 3, 3)
  42.         '赡养老人
  43.         c = Application.Match("本年度月扣除金额", Application.Index(ar, , 6), 0)
  44.         If ar(c, 7) <> "" Then br(item - 1, 11) = ar(c, 7): br(item - 1, 12) = ar(c, 2)
  45.         '大病扣除
  46.         c = Application.Match("与纳税人关系", Application.Index(ar, , 6), 0)
  47.         If ar(c - 1, 3) <> "" Then br(item - 1, 13) = ar(c, 5): br(item - 1, 14) = ar(c - 1, 3)
  48.         '合计扣除
  49.         br(item - 1, 15) = br(item - 1, 3) + br(item - 1, 5) + br(item - 1, 7) + br(item - 1, 9) + br(item - 1, 11) + br(item - 1, 13)
  50. nextsht:
  51.      Next sht
  52.    
  53.                  Wb.Close
  54.             
  55.                 [a2].Resize(item, 16) = br
  56.         End If
  57.         MyFile = Dir
  58.     Loop
  59.     Application.ScreenUpdating = True
  60.    
  61. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-1-15 11:19 | 显示全部楼层
hyz00001 发表于 2019-1-14 16:02
附件已经添加。主要代码如下:

运行附件的程序,提示错误“13”,类型不匹配呀

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-15 11:23 | 显示全部楼层


按照要求增加一个2003的模板。
还有增加了合并表与添加目录两个按钮。

2.png
模板下载地址如下: 个税抵扣提取信息模板XLS.rar (128.29 KB, 下载次数: 320)

模块中的代码就是这个。验证了应该是可以运算出来结果,并且有截图在上面。
  1. Function SheetExist(ByVal Sheetname As String) As Boolean '判断工作表是否存在
  2. Application.Volatile '易失标记
  3. Dim s As String, b As Boolean
  4. b = False
  5. On Error GoTo bottom
  6.     s = Sheets(Sheetname).Name
  7.     b = True
  8. bottom: SheetExist = b
  9. End Function

  10. Sub 个税提取()
  11.     Dim br(65536, 20)
  12.     Dim a, b, c, x, y, r, rx, ry, n, item
  13.     For Each sht In Sheets
  14.         sht.Activate
  15.         If [a2] <> "个人所得税专项附加扣除信息表" Then GoTo nextsht
  16.         rx = Cells(Rows.Count, 1).End(xlUp).Row
  17.         ry = Cells(5, Columns.Count).End(xlToLeft).Column
  18.         ar = Range(Cells(1, 1), Cells(rx, ry))
  19.         item = item + 1
  20.         br(item - 1, 0) = ar(4, 2) '姓名
  21.         br(item - 1, 1) = "'" & ar(4, 6) '身份证
  22.         br(item - 1, 2) = "'" & ar(5, 7) '手机号码
  23.         '子女扣除
  24.         n = Application.CountIf(Cells, "本人扣除比例")
  25.         For c = 1 To n
  26.             br(item - 1, 3) = br(item - 1, 3) + 1000 * ar(10 + c * 4, 7) / 100
  27.             br(item - 1, 4) = br(item - 1, 4) & "," & ar(7 + c * 4, 3)
  28.         Next c
  29.             br(item - 1, 4) = Mid(br(item - 1, 4), 2, 99)  '"共" & c & "个小孩,他们是:" &
  30.         '教育扣除
  31.         c = Application.Match("当前继续教育起始时间", Application.Index(ar, , 2), 0)
  32.         If ar(c, 3) <> "" Then br(item - 1, 5) = 400: br(item - 1, 6) = ar(c, 7) & ar(c, 3)
  33.         '住房贷款
  34.         c = Application.Match("房屋证书号码", Application.Index(ar, , 6), 0)
  35.         If ar(c + 1, 7) = "是" Then br(item - 1, 7) = 500: br(item - 1, 8) = ar(c + 4, 7)
  36.         If ar(c + 1, 7) = "否" Then br(item - 1, 7) = 1000: br(item - 1, 8) = ar(c + 4, 7)
  37.         '租房
  38.         c = Application.Match("租赁期止", Application.Index(ar, , 6), 0)
  39.         If ar(c, 7) <> "" Then br(item - 1, 9) = 1500: br(item - 1, 10) = ar(c - 3, 3)
  40.         '赡养老人
  41.         c = Application.Match("本年度月扣除金额", Application.Index(ar, , 6), 0)
  42.         If ar(c, 7) <> "" Then br(item - 1, 11) = ar(c, 7): br(item - 1, 12) = ar(c, 2)
  43.         '大病扣除
  44.         c = Application.Match("与纳税人关系", Application.Index(ar, , 6), 0)
  45.         If ar(c - 1, 3) <> "" Then br(item - 1, 13) = ar(c, 5): br(item - 1, 14) = ar(c - 1, 3)
  46.         '合计扣除
  47.         br(item - 1, 15) = br(item - 1, 3) + br(item - 1, 5) + br(item - 1, 7) + br(item - 1, 9) + br(item - 1, 11) + br(item - 1, 13)
  48. nextsht:
  49.     Next sht
  50.     Sheets("总表").Activate: Cells.ClearContents
  51.     [a2].Resize(item, 16) = br: [a1].Resize(1, 16) = Split("姓名,身份证,手机,子女扣除,子女,教育扣除,教育,贷款扣除,贷款银行,租房扣除,出租房,赡养扣除,是否独生子女,大病扣除,大病人,合计扣除", ",")
  52. ' Stop
  53. End Sub
  54. Sub CombineWorkbooks()
  55.     '合并工作薄
  56.     Dim FilesToOpen
  57.     Dim x As Integer
  58. '   On Error GoTo ErrHandler
  59.     Application.ScreenUpdating = False
  60.     'Workbooks.Add
  61.     u = ActiveWorkbook.Name
  62.     FilesToOpen = Application.GetOpenFilename(FileFilter:="MicroSoft Excel文件(*.*),*.*", MultiSelect:=True, Title:="要合并的文件")
  63.     If TypeName(FilesToOpen) = "Boolean" Then
  64.         MsgBox "没有选中文件"
  65.         GoTo ExitHandler
  66.     End If
  67.     x = 1
  68.     While x <= UBound(FilesToOpen)
  69.         Workbooks.Open Filename:=FilesToOpen(x)
  70.         
  71.         w = ActiveWorkbook.Name
  72.         w = Replace(w, ".XLSX", "")
  73.         w = Replace(w, ".XLS", "")
  74.         w = Replace(w, "结果", "")
  75.         If Sheets.Count = 1 Then ActiveSheet.Name = Left(Replace(Replace(Split(ActiveWorkbook.Name, ".x")(0), " ", ""), Chr(13), ""), 31)
  76.         For i = 1 To Sheets.Count
  77.             Workbooks(w).Sheets(1).Move after:=Workbooks(u).Sheets(Sheets.Count)
  78.             NewName = Replace(w, ".xls", "") & ActiveSheet.Name
  79.             NewName = Replace(w, ".xlsx", "") & ActiveSheet.Name
  80.             If SheetExist(NewName) Then NewName = NewName & i
  81. '            ActiveSheet.Name = NewName
  82.         Next
  83.         x = x + 1
  84.     Wend
  85.    
  86. ExitHandler:
  87.     Application.ScreenUpdating = True
  88.     Exit Sub
  89. ErrHandler:
  90.     MsgBox Err.Description
  91.     Resume ExitHandler
  92. End Sub
  93. Sub mulu()
  94. 'Application.Calculation = xlManual
  95.     Application.ScreenUpdating = False              '取消刷新屏幕以便加快运行代码
  96.     Application.DisplayAlerts = False
  97.     '创建工作表目录
  98.     On Error GoTo r                   '如遇到错误语句将直接挑到R运行
  99.     Dim i As Integer                    '定义I,shtcount和SelectionCell变量
  100.     Dim ShtCount As Integer
  101.     Dim SelectionCell As Range
  102.     ShtCount = Worksheets.Count
  103.     If ShtCount = 0 Or ShtCount = 1 Then Exit Sub     '工作簿内仅0或1张工作表时候退出
  104. '    For I = 1 To ShtCount                         '遍历所有工作表
  105.     If SheetExist("目录") Then
  106.         For x = 1 To 65
  107.             If SheetExist("目录" & x) = 0 Then Sheets("目录").Name = "目录" & x: GoTo mulu2
  108.             If SheetExist("目录" & x) = 0 Then Sheets("目录").Name = "目录" & x + 1: GoTo mulu2
  109.         Next x
  110.     End If
  111. mulu2:
  112.     Sheets.Add: ActiveSheet.Name = "目录"
  113.     ActiveSheet.Move before:=Sheets(1)
  114.     [a:c].Insert
  115. '    If SheetExist("目录") Then
  116. '        For x = 1 To 65
  117. '            If SheetExist(Sheets("目录" & x)) Then
  118. '                a = x
  119. '            Else
  120. '                Sheets("目录" & x).Name = "目录" & x + 1
  121. '            End If
  122. '        Next
  123. '        Sheets("目录").Name
  124. '    End If
  125. '    If SheetExist("目录") Then SheetExist("目录").Delete
  126. '        Sheets.Add
  127. '    If Sheets(1).Name <> "目录" Then     '当第一张工作表名不为"目录"时候.生成"目录"
  128. '        ShtCount = ShtCount + 1
  129. '        Sheets.Add
  130. '        ActiveSheet.Name = "目录"
  131. '        ActiveSheet.Move before:=Sheets(1)
  132. '    End If
  133. '    Sheets("目录").Select              '选定工作表"目录"
  134. '    Columns("B:B").Delete Shift:=xlToLeft   '清除B列
  135. '    Application.StatusBar = "正在生成目录…………请等待!"   '添加等待状态条
  136.     For i = 2 To Sheets.Count                '遍历除第一张工作表外所有工作表,建立链接
  137.         ActiveSheet.Hyperlinks.Add Anchor:=Worksheets("目录").Cells(i, 2), Address:="", SubAddress:="'" & Sheets(i).Name & "'!R1C1", TextToDisplay:=Sheets(i).Name
  138.         Worksheets("目录").Cells(i, 1) = i - 1
  139.     Next
  140.     Sheets("目录").Select
  141.     Columns("B:B").AutoFit              '自动调整
  142.     [b:b].NumberFormatLocal = "@"
  143.    Cells(1, 1) = "号码"                                    'A列第一个单元格为 "号码"
  144.     Cells(1, 2) = "目录"                                  'B列第一个单元格录"目录"
  145.     Set SelectionCell = Worksheets("目录").Range("B1")
  146.     With SelectionCell                                  '调整单元格格式
  147.         .HorizontalAlignment = xlDistributed
  148.         .VerticalAlignment = xlCenter
  149.         .AddIndent = True
  150.         .Font.Bold = True
  151.         .Interior.ColorIndex = 34
  152.     End With
  153.     Application.StatusBar = False
  154.     Application.ScreenUpdating = True
  155.     Application.DisplayAlerts = True
  156. r:
  157. Application.Calculation = xlAutomatic
  158. End Sub
复制代码




TA的精华主题

TA的得分主题

发表于 2019-1-15 11:56 | 显示全部楼层
按楼主的意思   修改了一下
可以执行了
不过只能在一个工作表里汇总多个 sheet  不能汇总多个文件

个税抵扣提取信息模板ok.zip

44.24 KB, 下载次数: 76

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-15 12:00 | 显示全部楼层
qq156059757 发表于 2019-1-15 11:56
按楼主的意思   修改了一下
可以执行了
不过只能在一个工作表里汇总多个 sheet  不能汇总多个文件

你好,我刚才已经更新了一个xls文件的模板,那个里面添加了合并工作表,添加工作表目录两个比较好用的按钮,现在还在审核中,请耐心等待。

TA的精华主题

TA的得分主题

发表于 2019-1-15 13:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 blackttea1 于 2019-1-15 13:09 编辑

2003版出现类型不匹配,运行出错误出现在:
c = Application.Match("当前继续教育起始时间", Application.Index(ar, , 2), 0) 处

TA的精华主题

TA的得分主题

发表于 2019-1-15 14:04 | 显示全部楼层
hyz00001 发表于 2019-1-15 12:00
你好,我刚才已经更新了一个xls文件的模板,那个里面添加了合并工作表,添加工作表目录两个比较好用的按 ...

楼主看一下,你发的附件中的命令,加粗的部分我改动了一下就不出现  错误13 类型不匹配了
添加了n=……   停止执行c=……
是什么原因呢


'子女扣除
        n = Application.CountIf(Cells, "本人扣除比例")
        For c = 1 To n
            br(item - 1, 3) = br(item - 1, 3) + 1000 * ar(10 + c * 4, 7) / 100
            br(item - 1, 4) = br(item - 1, 4) & "," & ar(7 + c * 4, 3)
        Next c
            br(item - 1, 4) = Mid(br(item - 1, 4), 2, 99)  '"共" & c & "个小孩,他们是:" &
        '教育扣除
       n = Application.CountIf(Cells, "当前继续教育起始时间")
        'c = Application.Match("当前继续教育起始时间", Application.Index(ar, , 2), 0)
        If ar(c, 3) <> "" Then br(item - 1, 5) = 400: br(item - 1, 6) = ar(c, 7) & ar(c, 3)
        '住房贷款
         n = Application.CountIf(Cells, "房屋证书号码")
        'c = Application.Match("房屋证书号码", Application.Index(ar, , 6), 0)

        If ar(c + 1, 7) = "是" Then br(item - 1, 7) = 500: br(item - 1, 8) = ar(c + 4, 7)
        If ar(c + 1, 7) = "否" Then br(item - 1, 7) = 1000: br(item - 1, 8) = ar(c + 4, 7)
        '租房
       n = Application.CountIf(Cells, "租赁期止")
        'c = Application.Match("租赁期止", Application.Index(ar, , 6), 0)

        If ar(c, 7) <> "" Then br(item - 1, 9) = 1500: br(item - 1, 10) = ar(c - 3, 3)
        '赡养老人
        n = Application.CountIf(Cells, "本年度月扣除金额")
        'c = Application.Match("本年度月扣除金额", Application.Index(ar, , 6), 0)

        If ar(c, 7) <> "" Then br(item - 1, 11) = ar(c, 7): br(item - 1, 12) = ar(c, 2)
        '大病扣除
        n = Application.CountIf(Cells, "与纳税人关系")
        'c = Application.Match("与纳税人关系", Application.Index(ar, , 6), 0)

        If ar(c - 1, 3) <> "" Then br(item - 1, 13) = ar(c, 5): br(item - 1, 14) = ar(c - 1, 3)

TA的精华主题

TA的得分主题

发表于 2019-1-15 17:20 | 显示全部楼层
hyz00001 发表于 2019-1-15 12:00
你好,我刚才已经更新了一个xls文件的模板,那个里面添加了合并工作表,添加工作表目录两个比较好用的按 ...

2016版出现类型不匹配,运行出错误出现在:
c = Application.Match("当前继续教育起始时间", Application.Index(ar, , 2), 0) 处
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 23:14 , Processed in 0.041611 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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