ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 判断条件,并将符合的输出到另一张表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-22 17:56 | 显示全部楼层 |阅读模式
如下图,判断第一个表(All表)的B列单元格的第一个字符,将对应的单元格输入到对应的其它表中;
“T表”里只显示 T1043和T0043,依次类推!谢谢各位。
(注:这个是不是只能用函数实现)

image.png image.png


test.rar

7.64 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2022-11-22 18:40 | 显示全部楼层
凑合着可以实现你的功能  懒得写了

VBA拆分&合并工作表20221109-5.7z

39.94 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-22 19:01 | 显示全部楼层
捞屎人 发表于 2022-11-22 18:40
凑合着可以实现你的功能  懒得写了

这个看起来好复杂啊,不过还是谢谢!

TA的精华主题

TA的得分主题

发表于 2022-11-22 19:04 | 显示全部楼层
Sub TEST()
    Dim arr, i&, dic As Object, vKey, wks As Worksheet
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")
    arr = [B1].CurrentRegion
    For i = 2 To UBound(arr)
      vKey = Mid(arr(i, 1), 1, 1)
      If Not dic.exists(vKey) Then
         Set dic(vKey) = CreateObject("Scripting.Dictionary")
      End If
      dic(vKey)(arr(i, 1)) = ""
    Next i
    For Each vKey In dic.keys
       If bIsWorksheetExist(CStr(vKey)) Then
          With Worksheets(vKey)
             .[A1].CurrentRegion.Cells.Clear
             .[A1] = "号码"
             .[A2].Resize(dic(vKey).Count) = Application.Transpose(dic(vKey).keys)
          End With
       End If
    Next
    Set dic = Nothing
    Application.ScreenUpdating = True
    Beep
End Sub
Public Function bIsWorksheetExist(wksName As String) As Boolean
    On Error Resume Next
    bIsWorksheetExist = Sheets(wksName).Name = wksName
End Function

TA的精华主题

TA的得分主题

发表于 2022-11-22 19:13 | 显示全部楼层
代码审核中,请参考附件。。。

test.rar

18.95 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-22 20:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gwjkkkkk 发表于 2022-11-22 19:13
代码审核中,请参考附件。。。

确实可以实现,有点小问题,覆盖了标题字段

TA的精华主题

TA的得分主题

发表于 2022-11-22 21:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xiaomi123ok 于 2022-11-23 11:29 编辑
gwjkkkkk 发表于 2022-11-22 19:13
代码审核中,请参考附件。。。


Set dic(vKey) = CreateObject("Scripting.Dictionary")
dic(vKey)(arr(i, 1)) = ""
字典嵌套,学习了,但是“嵌套”的字典,在“本地窗口”中不显示!
明白了,谢谢老师!

TA的精华主题

TA的得分主题

发表于 2022-11-22 21:33 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-11-23 14:34 | 显示全部楼层
如果数据量不大,用SQL+for也可以。

Dim con As Object, sql$
    Dim i, ii
    Dim rng As Range
   
    Sheets("T").Cells.ClearContents
    Sheets("S").Cells.ClearContents
    Sheets("M").Cells.ClearContents
   
    Sheets("T").[a1] = "号码"
    Sheets("S").[a1] = "号码"
    Sheets("M").[a1] = "号码"

    Set con = CreateObject("adodb.connection")
    con.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName

    Set rng = Sheets("ALL").Range("A" & Rows.Count).End(xlUp)

    For i = 2 To rng.Row

        ii = VBA.Mid(Sheets("ALL").Range("a" & i), 1, 1)
     
        sql = "select 号码 from [ALL$] where 号码 like '" & ii & "%'"
        
        On Error Resume Next
            If Not Sheets(ii) Is Nothing Then                       '判断工作表是否存在
              Set rng = Sheets(ii).Range("A" & Rows.Count).End(xlUp)
              Sheets(ii).Range("A" & rng.Row + 1).CopyFromRecordset con.Execute(sql)
            End If

    Next i
   
    Sheets("T").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
    Sheets("S").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
    Sheets("M").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
    con.Close: Set con = Nothing
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 22:27 , Processed in 0.032907 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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