ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 急!求大神帮忙根据图1数据填入图2表格批量生成多个表格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-23 23:36 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

图1

图1

图2

图2
求大神帮忙根据图1数据按户主信息依次填入图2表格,家庭成员最多填入3个,不足3个的按实际情况填入,然后批量生成按户主姓名命名的多个表格,谢谢!!

附件4:居民信息和需求调查表.rar

138.78 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2018-8-24 00:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可以实现  但也很麻烦
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2018-8-24 06:37 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-24 08:18 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
朱荣兴 发表于 2018-8-24 06:37
关键一点,得让代码知道每户的有哪些人???研究一下再说吧

好的,户主下面的就是,或者就填入户主下面一位救可

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-24 08:20 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
abc123281 发表于 2018-8-24 00:53
可以实现  但也很麻烦

谢谢大神,那家庭情况就填入户主下面一位的话会不会更容易

TA的精华主题

TA的得分主题

发表于 2018-8-24 10:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主参考一下吧。

注意放在单独的目录下,比如

QQ截图20180824102956.jpg

代码会把各个组别分别建立文件夹。

因都需要建立单独文件,代码运行慢,别着急。

附件4:居民信息和需求调查表.rar (129.88 KB, 下载次数: 14)

Option Explicit
Sub a()
Dim cnn, rs As Object, Sql$, f$, arr, i%, j%, m%, k%, mb As Range, t%, R%
Set mb = Sheet2.[a1:h12]
Dim tim
tim = Timer
Set cnn = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.Recordset")
Application.ScreenUpdating = False
cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
Sql = "select  村小组 FROM [Sheet2$a2:b] where len(村小组)>1 group by 村小组 order by MIN(序号)"
arr = cnn.Execute(Sql).getrows
For i = 0 To UBound(arr, 2)
    f = ThisWorkbook.Path & "\" & arr(0, i)
        If Dir(f, vbDirectory) <> "" Then GoSub 100
            MkDir f
            Sql = "select * FROM [Sheet2$a2:i] where 村小组='" & arr(0, i) & "' order by 序号"
            If rs.State = 1 Then rs.Close
            rs.Open Sql, cnn, 1, 1
            m = rs.Fields("序号")
            rs.movelast
            k = rs.Fields("序号")
                For j = m To k
                    rs.Close
                    Sql = "select * FROM [Sheet2$a2:i] where  序号=" & j
                    rs.Open Sql, cnn, 1, 1
                    Workbooks.Add
                    t = t + 1
                    With ActiveWorkbook.Sheets(1)
                        mb.Copy .[a1]
                        .Columns("A:H").ColumnWidth = 10
                        .[h3] = t
                        .[c4] = rs.Fields("家庭成员(包户主)")
                        .[f4] = rs.Fields("性别")
                        .[h4] = rs.RecordCount
                        .[c5] = rs.Fields("身份证号码")
                        .[g5] = rs.Fields("联系电话")
                        .[d6] = arr(0, i)
                        If rs.RecordCount > 1 Then
                          .[G6] = "已婚"
                        Else
                            .[G6] = "未婚"
                        End If
                        rs.MoveNext
                        R = 9
                        Do While Not rs.EOF
                            R = R + 1
                            .Cells(R, 3) = rs.Fields("家庭成员(包户主)")
                            .Cells(R, 4) = rs.Fields("与户主关系")
                            .Cells(R, 5) = rs.Fields("身份证号码")
                            rs.MoveNext
                            If R > 12 Then Exit Do
                         Loop
                            If Dir(f & "\" & .[c4] & ".xls") = "" Then
                                ActiveWorkbook.SaveAs Filename:=f & "\" & .[c4] & ".xls", FileFormat:=xlWorkbookNormal
                                ActiveWorkbook.Close 1
                            Else
                                ActiveWorkbook.SaveAs Filename:=f & "\" & .[c4] & t & ".xls", FileFormat:=xlWorkbookNormal
                                ActiveWorkbook.Close 1
                            End If
                    End With
                Next
Next
       Exit Sub
100:
            On Error Resume Next
                Kill f & "\*.*"
            On Error GoTo 0
            RmDir f
            Return
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Application.ScreenUpdating = True
MsgBox Format(Timer - tim, "0.00")
End Sub


TA的精华主题

TA的得分主题

发表于 2018-8-24 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码审核中,先上附件吧

1、放在单独目录下
QQ截图20180824102956.jpg
2、会按照组别分别建立文件夹
3、代码运行慢,别着急

附件4:居民信息和需求调查表.rar

129.88 KB, 下载次数: 16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-8-24 11:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你的本意应该是把汇总表里的信息,按家庭户分拆成表格吧。我用了5家不重复名字的试了一下,希望对你有用。



Sub 生成户()
Dim sht As Worksheet, sht2 As Worksheet, rng As Range, hus As Integer, rens As Integer
Set sht = Worksheets("汇总表")
For Each rng In sht.Range("c2:c2890")
Application.DisplayAlerts = False
If rng = "本人或户主" Then
    hus = hus + 1
    rens = rng.Offset(0, 5)
    Worksheets("模板").Copy after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = rng.Offset(0, 1)
    Set sht2 = ActiveSheet
With sht2
If rens >= 3 Then
    .Range("c4") = rng.Offset(0, 1)
    .Range("f4") = rng.Offset(0, 3)
    .Range("h4") = rng.Offset(0, 5)
    .Range("c5") = rng.Offset(0, 2)
    .Range("g5") = rng.Offset(0, 6)
    .Range("c6") = rng.Offset(0, -1)
    .Range("c9") = rng.Offset(1, 1)
    .Range("d9") = rng.Offset(1, 0)
    .Range("e9") = rng.Offset(1, 2)
    .Range("c10") = rng.Offset(2, 1)
    .Range("d10") = rng.Offset(2, 0)
    .Range("e10") = rng.Offset(2, 2)
    .Range("h3") = hus
ElseIf rens = 2 Then
    .Range("c4") = rng.Offset(0, 1)
    .Range("f4") = rng.Offset(0, 3)
    .Range("h4") = rng.Offset(0, 5)
    .Range("c5") = rng.Offset(0, 2)
    .Range("g5") = rng.Offset(0, 6)
    .Range("c6") = rng.Offset(0, -1)
    .Range("c9") = rng.Offset(1, 1)
    .Range("d9") = rng.Offset(1, 0)
    .Range("e9") = rng.Offset(1, 2)
    .Range("c10") = ""
    .Range("d10") = ""
    .Range("e10") = ""
    .Range("h3") = hus
ElseIf rens = 1 Then
    .Range("c4") = rng.Offset(0, 1)
    .Range("f4") = rng.Offset(0, 3)
    .Range("h4") = rng.Offset(0, 5)
    .Range("c5") = rng.Offset(0, 2)
    .Range("g5") = rng.Offset(0, 6)
    .Range("c6") = rng.Offset(0, -1)
    .Range("c9") = ""
    .Range("d9") = ""
    .Range("e9") = ""
    .Range("c10") = ""
    .Range("d10") = ""
    .Range("e10") = ""
    .Range("h3") = hus
End If
End With
sht2.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & hus & sht2.Name & ".xlsx"
ActiveWorkbook.Close
sht2.Delete
End If
Next
Application.DisplayAlerts = True
End Sub


附件4:居民信息和需求调查表.zip

22 Bytes, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-24 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
魂断蓝桥 发表于 2018-8-24 10:33
代码审核中,先上附件吧

1、放在单独目录下

太厉害了,谢谢大神!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 18:55 , Processed in 0.027500 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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