1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

Dictionary套用Dictionary

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-3-28 15:18 | 显示全部楼层 |阅读模式


image.png

image.png


  1. Sub lll()
  2.     Dim Dict As Scripting.Dictionary
  3.         Set Dict = New Scripting.Dictionary
  4.         Set Dict1 = New Scripting.Dictionary
  5.         Set Dict2 = New Scripting.Dictionary
  6.     Dim Sht As Worksheet, Rng As Range
  7.         Set Sht = Sheet1
  8.     Dim oRow
  9.         With Sht
  10.             For jj = 2 To 5
  11.                oRow = .Cells(.Rows.Count, jj).End(xlUp).Row
  12.                Set Rng = .Range(.Cells(4, jj), .Cells(oRow, jj))
  13.                Set Dict(ShtDict(Rng)) = ShtDict(Rng)
  14.             Next jj
  15.             
  16.         End With
  17.    Dim tmpDict As Scripting.Dictionary
  18.         For ii = 0 To Dict.Count - 1
  19.             Set tmpDict = Dict.Keys(ii)
  20.             Debug.Print tmpDict.Count,
  21.             For Each Key In tmpDict.Keys
  22.                  Set Rng = Key
  23.                  Debug.Print Rng.Address,
  24.             Next Key
  25.             Debug.Print
  26.         Next ii
  27. End Sub
  28. Function ShtDict(Rng As Range)
  29.     Dim Dict As Scripting.Dictionary
  30.         Set Dict = New Scripting.Dictionary
  31.         For ii = 1 To Rng.Rows.Count
  32.              Set Dict(Rng(ii, 1)) = Rng(ii, 1)
  33.         Next ii
  34.         Set ShtDict = Dict
  35.         
  36. End Function

复制代码




5            $B$4          $B$5          $B$6          $B$7          $B$8         
10           $C$4          $C$5          $C$6          $C$7          $C$8          $C$9          $C$10         $C$11         $C$12         $C$13         
3            $D$4          $D$5          $D$6         
13           $E$4          $E$5          $E$6          $E$7          $E$8          $E$9          $E$10         $E$11         $E$12         $E$13         $E$14         $E$15         $E$16         


工作簿1.zip

15.99 KB, 下载次数: 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-5 11:14 | 显示全部楼层
For Each key In Dict.keys


  1. Sub SlelctShtToAimFolder()
  2.     Dim Fso As Scripting.FileSystemObject, oFolder  As Folder
  3.         Set Fso = New Scripting.FileSystemObject
  4.     Dim Sht As Worksheet
  5.         Set Sht = Application.ActiveSheet
  6.     Dim SheetDate As Date
  7.         SheetDate = CDate(Sht.Name)
  8.         Set oFolder = CheckFolder(Fso, Sht)
  9.     Dim CurrentFolder As Folder, AimFolder As Folder
  10.         Set AimFolder = oFolder
  11.     Dim FileDict As Scripting.Dictionary
  12.         Set FileDict = New Scripting.Dictionary
  13.         ''
  14.     Dim CameraDict As Scripting.Dictionary, ScreenDict As Scripting.Dictionary
  15.         Set CameraDict = New Scripting.Dictionary
  16.         Set ScreenDict = New Scripting.Dictionary

  17.         Set CurrentFolder = Fso.GetFolder(ThisWorkbook.Path & "\JPG") ' & Sht.Name)
  18.         '''
  19.     Dim PathName
  20.         PathName = ThisWorkbook.Path
  21.     Dim oDate As Date
  22.         oDate = SheetDate
  23.           ''
  24.         For Each oFile In CurrentFolder.Files
  25.                If Format(oFile.DateLastModified, "yyyy/mm/dd") = oDate Then
  26.                     If InStr(oFile.Name, "IMG") > 0 Or InStr(oFile.Name, "Screenshot") > 0 Then
  27.                         Set FileDict(oFile) = Nothing
  28.                     End If
  29.                End If
  30.         Next oFile
  31.             
  32.             
  33.         ''
  34.         With FileDict
  35.             For Each key In .keys  'ii = 0 To .Count - 1
  36.                  Debug.Print ii, AimFolder & "" & key.Name; '' .keys(ii).Name
  37.                  Fso.MoveFile .keys(ii), AimFolder & "" & key.Name  ''.keys(ii).Name
  38.             Next key ' ii
  39.         End With


  40. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-15 13:21 | 显示全部楼层
本帖最后由 ning84 于 2025-4-15 22:23 编辑



image.png




image.png



  1. Function CameraGroupTimeDict(folderFileDict As Scripting.Dictionary, intervalThreshold As Long) As Scripting.Dictionary
  2.     Dim resultDict As Scripting.Dictionary
  3.     Set resultDict = New Scripting.Dictionary
  4.     Dim pptDict As Scripting.Dictionary
  5.     Set pptDict = New Scripting.Dictionary

  6.     Dim i As Long
  7.     Dim File1 As File, File2 As File
  8.     Dim date1 As Date, date2 As Date

  9.     For i = 0 To folderFileDict.Count - 2
  10.         Set File1 = folderFileDict.keys(i)
  11.         Set File2 = folderFileDict.Items(i)
  12.         Set pptDict(File1) = File2

  13.         If Not File2 Is Nothing Then
  14.             date1 = CDate(folderFileDict.keys(i).DateLastModified)
  15.             date2 = CDate(folderFileDict.keys(i + 1).DateLastModified)
  16.             
  17.             If Abs(DateDiff("s", date1, date2)) >= intervalThreshold Then
  18.                 'Set resultDict(File1) = File2
  19.                 'Debug.Print DateDiff("s", date1, date2), date1, date2
  20.                 Set resultDict(pptDict) = pptDict
  21.                 Set pptDict = New Scripting.Dictionary
  22.             End If
  23.         End If
  24.     Next i

  25.     If pptDict.Count > 0 Then
  26.         Set resultDict(pptDict) = pptDict
  27.     End If

  28.     Set CameraGroupTimeDict = resultDict
  29. End Function
  30. '''


  31. Sub lll()
  32.     Dim Sht1 As Worksheet, Sht2 As Worksheet
  33.     Dim Rng1 As Range, Rng2 As Range
  34.     Dim oRow
  35.       Set Sht1 = Sheet1
  36.          With Sht1
  37.              .Cells.Font.Size = 9
  38.              oRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  39.              If oRow < 5 Then
  40.                 oRow = 3
  41.              End If
  42.              Set Rng1 = .Cells(oRow, 1)
  43.          End With
  44.       ''
  45.       Set Sht2 = Application.ActiveSheet
  46.          With Sht2
  47.              .Cells.Clear
  48.              .Cells.Font.Size = 9
  49.              Set Rng2 = .Cells(5, 1)
  50.          End With
  51.          If Sht1.Name = Sht2.Name Then
  52.              MsgBox "Error"
  53.              Exit Sub
  54.             
  55.          End If
  56.          Debug.Print Sht1.Name, Sht2.Name
  57.          
  58.     Dim ii, jj, kk, Str
  59.     Dim Fso As Scripting.FileSystemObject
  60.         Set Fso = New Scripting.FileSystemObject
  61.     Dim oFolder As Folder, oFile As File
  62.     Dim CameraGroupDict As Scripting.Dictionary
  63.         Set CameraGroupDict = New Scripting.Dictionary
  64.     Dim Dict As Scripting.Dictionary
  65.     Dim PathName As String
  66.         'Set Dict = New Scripting.Dictionary
  67.         PathName = ThisWorkbook.Path & "\JPG"
  68.         Set oFolder = Fso.GetFolder(PathName)
  69.         Debug.Print oFolder.Name, oFolder.Path
  70.         ''
  71.         For Each oFile In oFolder.Files
  72.               If InStr(oFile.Name, "IMG") > 0 Then
  73.                    Set CameraGroupDict(oFile) = oFile
  74.               End If
  75.         Next oFile
  76.         '''
  77.         Set CameraGroupDict = CameraGroupTimeDict(CameraGroupDict, 20 * 60)
  78.         CameraGroupDictSht CameraGroupDict, Fso, PathName, Rng1, Rng2
  79.         '''
  80. End Sub


  81. Function CameraGroupDictSht(CameraGroupDict As Scripting.Dictionary, Fso As Scripting.FileSystemObject, PathName, Rng1 As Range, Rng2 As Range)
  82.     '''
  83.     Dim Sht1 As Worksheet, Sht2 As Worksheet
  84.     Dim oRow1 As Integer, oRow2 As Integer
  85.         Set Sht1 = Rng1.Parent
  86.         Set Sht2 = Rng2.Parent
  87.         'Debug.Print Sht1.Name, Sht2.Name
  88.     Dim File1 As File, File2 As File
  89.     Dim Str, ii As Integer, jj As Integer, kk As Integer
  90.     Dim oRow As Integer
  91.         oRow1 = Rng1.Row + 3
  92.    
  93.         oRow2 = Rng2.Row
  94.     Dim Dict As Scripting.Dictionary
  95.         For Each Dict In CameraGroupDict '.Keys
  96.             'Set Dict = CameraGroupDict.Keys(ii)
  97.                  With Dict
  98.                     ''Debug.Print .Count
  99.                     Set File1 = Dict.keys(0)
  100.                     Set File2 = .keys(.Count - 1)
  101.                     Str = Format(File1.DateLastModified, "yyyymmdd") & "_" & Format(File1.DateLastModified, "hhmm") & "-" & Format(File2.DateLastModified, "hhmm")
  102.                     With Sht1
  103.                         .Cells(oRow1, 2) = Str
  104.                            PathName = ThisWorkbook.Path & "" & Str
  105.                            If Fso.FolderExists(PathName) Then
  106.                                Debug.Print PathName
  107.                            Else
  108.                                Debug.Print "Not Folder "; PathName
  109.                            End If
  110.                         
  111.                         ''
  112.                         Str = Sht2.Name & "!" & Sht2.Cells(oRow2, 2).Resize(Dict.Count - 1, 1).Address(0, 0)
  113.                         
  114.                         'Debug.Print Str
  115.                         .Cells(oRow1, 1) = Str
  116.                         EngDateStr = "Stree Snap From " & Format(File1.DateLastModified, "h:mm") & " to " & Format(File2.DateLastModified, "h:mm") & " on " & Format(File1.DateLastModified, "mmmm d,yyyy")
  117.                         .Cells(oRow1, 4) = EngDateStr
  118.                         ChiDateStr = Format(File1.DateLastModified, "yyyy年m月d日h:mm") & "到" & Format(File2.DateLastModified, "h:mm") & "的街拍"
  119.                         .Cells(oRow1, 3) = ChiDateStr
  120.                     End With
  121.                     '''
  122.                     For ii = 1 To Dict.Count - 1
  123.                            Str = Dict.keys(ii).Name
  124.                            Sht2.Cells(oRow2, 2) = Str
  125.                            oRow2 = oRow2 + 1
  126.                     Next ii
  127.                 End With
  128.                 oRow1 = oRow1 + 1
  129.                 oRow2 = oRow2 + 5
  130.         Next Dict
  131. End Function

  132. Private Sub llll()
  133.    Dim Arr
  134.    Dim Rng As Range, oRng As Range
  135.        Set Rng = Sheets("Item").Cells(12, 1)
  136.        Debug.Print Rng.Address, Rng
  137.    Dim Sht As Worksheet
  138.        Arr = Split(Rng, "!")
  139.        Set Sht = Sheets(Arr(0))
  140.        Set Rng = Sht.Range(Arr(1))
  141.        Debug.Print Rng.Address
  142.        Sht.Activate
  143.        Rng.Select
  144.       
  145.       
  146.       
  147. End Sub
复制代码

CameraGroupTime.zip

23.67 KB, 下载次数: 1

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

本版积分规则

1234

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

GMT+8, 2025-4-23 22:10 , Processed in 0.021527 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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