ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 从若干工作表中提取一个人的数据,并粘贴到一个新表里

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-15 19:25 | 显示全部楼层
希望123456 发表于 2023-5-15 17:45
两个问题,第一,我那个写法是参照了录制宏的代码写的,可是就算按照你说的ROWS("I"),好像也运行不了,第 ...

第一,“可是就算按照你说的ROWS("I"),好像也运行不了” ,我说明的这句I是小写,并且没有双引号,是这样的:rows(i),确实你这样改了也还是运行不了,因为你要复制到的表“sheet1”不存在。还有其它原因,所以我改成了我以上的代码。
第二、加上这句:exit for 是退出本次循环。就是当一张工资表中找到了这个人的工资条,就不要再继续往下找了。因为一张表中一个人只有一条记录。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 19:31 来自手机 | 显示全部楼层
吴中泉 发表于 2023-5-15 19:25
第一,“可是就算按照你说的ROWS("I"),好像也运行不了” ,我说明的这句I是小写,并且没有双引号,是这样 ...

sheet1我加了,第一个问题我在试试!第二个问题,就算找到了,不需要找,那我让程序继续往下运行,按道理也不会影响结果呀,最多多循环几次

TA的精华主题

TA的得分主题

发表于 2023-5-15 19:46 | 显示全部楼层
希望123456 发表于 2023-5-15 19:31
sheet1我加了,第一个问题我在试试!第二个问题,就算找到了,不需要找,那我让程序继续往下运行,按道理 ...

第二个问题你理解是对的,至于出现问题,可以看看你那些工资表是否规范一致,另外,for x = 4 to 50 这句写固定死了,可能有的工资表记录超过了50行,超过的部分就查不到。

TA的精华主题

TA的得分主题

发表于 2023-5-16 07:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
希望123456 发表于 2023-5-15 18:02
可是我要查找出所有的记录,不是应该把那两个if删除吗?可是删除后,我感觉读取表的名字不对?

查全部只去掉内层if就行了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-16 10:09 | 显示全部楼层
根据各位大佬提供的思路,我修改了一下,请大家批评指正,谢谢!

方法一:Sub 按钮1_Click()                                                                  
Dim s As Worksheet
Dim i As Integer
i = 1
For Each s In Sheets
If s.Name <> "汇总" Then
    For x = 2 To 20
        If s.Cells(x, 1) = Sheets("汇总").[q12] Then
        s.Rows(x).Copy Sheets("汇总").Range("a" & i + 1)
        Sheets("汇总").Cells(i + 1, "s") = s.Name
       i = i + 1
        End If
     Next
End If
Next
End Sub

方法二:

Sub 按钮3_Click()
Dim s As Worksheet
i = 1
For Each s In Worksheets
If s.Name <> "汇总" Then
    For x = 2 To 20
    If s.Cells(x, 1) = Sheets("汇总").[q12] Then
     s.Select
     Rows(x).Select
     Selection.Copy
   
   Sheets("汇总").Select

    Rows(i + 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("汇总").Cells(i + 1, "s") = s.Name
    i = i + 1
    End If
Next
End If
Next
End Sub


方法三:

Sub 按钮1_Click()
Dim i%, j%, k%, arr, s As Worksheet
k = 1
For Each s In Sheets
    If s.Name <> "汇总" Then
       arr = s.Range("a1").CurrentRegion
       For i = 2 To UBound(arr)
          If arr(i, 1) = Sheets("汇总").[q12] Then
            Sheets("汇总").Cells(k + 1, "s") = s.Name
             k = k + 1
             For j = 1 To 18
             Sheets("汇总").Cells(k, j) = arr(i, j)
         
             Next
          End If
       Next
   End If
Next
End Sub


提取数据.zip

50.46 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-5-16 14:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
方法四:
  1. Sub test()
  2.     Set cnn = CreateObject("ADODB.Connection")
  3.     cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0';data source=" & ThisWorkbook.FullName
  4.     For Each s In Sheets
  5.         If s.Name <> "汇总" Then
  6.             r = s.[r65536].End(3).Row
  7.            Sql = Sql & " union all select 姓名,班级, 语文, 数学,英语,历史,政治,物理,化学,地理,生物,音乐,美术,信息,体育,口语,总分,年名,'" & s.Name & "' from [" & s.Name & "$a1:r" & r & "] where 姓名='" & Sheets("汇总").[q12] & " '"
  8.         End If
  9.     Next
  10.     [a2:s10] = ""
  11.     [a2].CopyFromRecordset cnn.Execute(Mid(Sql, 12))
  12.     cnn.Close: Set cnn = Nothing
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-16 14:30 | 显示全部楼层
疑问,为什么用 Sql = "select *,'2' from [2$a1:r6] where 姓名='付紫君 '" ,最后那个“2”会放到第一列?

TA的精华主题

TA的得分主题

发表于 2023-5-16 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
测试证明,Sql = "select 'kk',*,'aa' from [2$a1:r6] where 姓名='付紫君 '",结果是
kk,aa,付紫君,...
用到select *,和其他常量,常量会放在首几列。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 19:44 来自手机 | 显示全部楼层
grf1973 发表于 2023-5-16 14:36
测试证明,Sql = "select 'kk',*,'aa' from [2$a1:r6] where 姓名='付紫君 '",结果是
kk,aa,付紫君,...
...

兄弟,你这是用的什么方法,论坛里麻烦给个教程学一下

TA的精华主题

TA的得分主题

发表于 2023-5-18 08:19 | 显示全部楼层

这个代码能添加字段名称,就更完美了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:54 , Processed in 0.032815 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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