2023-01-01ãã1å¹´éã®è¨äºä¸è¦§
3/18(å)20:00ï½ Zoomåå¼·ä¼ã«ç»å£ãã¾ãããé åå ¥éï¼Array&Collection&Dictionary欲張ãã»ãããã¨é¡ããã¾ã é åã使ã£ããã¨ããªãæ¹ãCollectionãDictionaryã«è§¦ãã¦ã¿ããæ¹ã3ã¤ã®ç¹é·ã¨ä½¿ãåããã¤ã³ããæ´çãããæ¹ã«åããè¬åº§ãè¡ãã¾ãã
ç ´æããããã¯ã修復ãã¦éãã«ã¯ãWorkbooks.Openã¡ã½ããã§Corruptload:=xlRepairFileãæå®ããã°ããã®ã§ãããããã¯ç ´æãã¦ããªãããã¯ã修復æ¸ã¿ã«ãã¦ãã¾ããããã¾ãã¯æ®éã«éãâ失æããã修復ã¨ããæé ãè¸ãå¿ è¦ãããã¾ãã
ããã¯ã®èªåå°ç¨æ¨å¥¨ã¡ãã»ã¼ã¸ãç¡è¦ãã¦æ¸ãè¾¼ã¿æ¨©éã§éãããå ´åã¯ãWorkbook.Openã¡ã½ããã®IgnoreReadOnlyRecommendedãTrueã«ããã°OKã§ããDisplayAlerts=FalseãReadOnly:=Falseã§ã¯ããããèªåå°ç¨ã«ãªããããæ³¨æãã ããã
ãã¡ã¤ã«ãæ°è¦ä¿åãããã³ãã¼ã»ç§»åããéã«ãæ¢åãã¡ã¤ã«ã䏿¸ãããªãããé£çªãä»ä¸ããã³ã¼ãã¯é¢æ°åãã¦ããã¨ä¾¿å©ã§ãããã¡ã¤ã«ãåå¨ããªããªãã¾ã§iãå¢ããããã¡ã¤ã«ãã¼ã¹å & (i) & æ¡å¼µåãçµæå¤ã¨ãã¦è¿ããã¨ã§å®è£ ã§ãã¾ãã
åãååã®ãã©ã«ããããå ´æã«ãã©ã«ããç§»åããã¨ãæä½æ¥ã§ããã°ãã©ã«ããçµ±åãããã¨ãã§ãã¾ãããããVBAã«ã¯ãã®æ©è½ããªãããããã©ã«ãå ã®å ¨ãã¡ã¤ã«ãå¤å®ããªããç§»åãã¦ãããæå¾ã«å ãã©ã«ããåé¤ããå¿ è¦ãããã¾ãã
ãã¡ã¤ã«ãç§»åããNameã¹ãã¼ãã¡ã³ãã¨FileSystemObject.MoveFolderã¡ã½ããã®éãã解説ãã¾ããã©ã¡ãã2ã¤ã®ãã¹ãåãåã£ã¦ãã¡ã¤ã«ãç§»åãã¾ããMoveFolderã®ã¿ã¯ã¤ã«ãã«ã¼ã*ã«ãã䏿¬ç§»åãã§ããç¹ãä¸çªå¤§ããªéãã§ãã
ä¸èº«ãã¨ãã©ã«ããã³ãã¼ããFileSystemObject.CopyFolderã¡ã½ããã®ä½¿ãæ¹ã解説ãã¾ããFSO.CopyFolder ã³ãã¼å ãã¹, ã³ãã¼å ãã¹ã¨ããè¨è¿°ã§å®è¡ã§ãã¾ããã³ãã¼å ã«ã¯ã¯ã¤ã«ãã«ã¼ã*ã使ç¨ã§ããè¤æ°ã®ãã©ã«ãã䏿¬ã§ã³ãã¼ã§ãã¾ãã
ä¸èº«ãã¨ãã©ã«ããç§»åããFileSystemObject.MoveFolderã¡ã½ããã®ä½¿ãæ¹ã解説ãã¾ããFSO.MoveFolder ç§»åå ãã¹, ç§»åå ãã¹ã¨ããè¨è¿°ã§å®è¡ã§ãã¾ããç§»åå ã«ã¯ã¯ã¤ã«ãã«ã¼ã*ã使ç¨ã§ããè¤æ°ã®ãã©ã«ãã䏿¬ã§ç§»åã§ãã¾ãã
ãã©ã«ããç§»åããName/FSO.MoveFolderãã®ä¸¡æ©è½ã¨ãå¥ãã©ã¤ãéã®ç§»åã¯ã§ãã¾ããããããä¸çºã§è¡ãæ©è½ã¯ç¨æããã¦ãã¾ããã®ã§ã ã¾ãã¯ãã©ã«ããã¨ã³ãã¼ãããã®ãã¨å ã®ãã©ã«ããåé¤ããæé ã§å®è¡ããå¿ è¦ãããã¾ãã
ãã©ã«ããç§»åã»åç§°å¤æ´ããéã«ä½¿ç¨ããNameã¹ãã¼ãã¡ã³ãã®ä½¿ãæ¹ã解説ãã¾ããName 対象ãã©ã«ããã¹, è¡å ãã©ã«ããã¹ã¨ããè¨è¿°ã§å®è¡ã§ããæå¾ã®ãã©ã«ãåãå¤ããã°åç§°å¤æ´ãéä¸ã®ãã©ã«ããã¹ãå¤ããã°ç§»åãã§ãã¾ãã
ç§»åå ã«ãã¡ã¤ã«ããã£ãå ´åã¯ä¸æ¸ããã¦ãã¡ã¤ã«ãç§»åããæ¹æ³ã解説ãã¾ããName/FSO.MoveFileã¯ã©ã¡ãã䏿¸ãããæ©è½ãæã£ã¦ãã¾ããã®ã§ãKill/FSO.DeleteFilleã§åé¤ãã¦ããName/FSO.MoveFileã§ç§»åããæé ãè¸ãå¿ è¦ãããã¾ãã
Withã¹ãã¼ãã¡ã³ãã§Worksheetãåç §ä¸ã«ãName .Cells(1, 1) As .Cells(2, 1)ã®ãããªè¨è¿°ãå®è¡ãããã¨ããã¨ãæ§æã¨ã©ã¼ãçºçãã¾ããåå ã¯ä¸æã§ãããNameã®ç´å¾ã«ã.ããæã¤ãã¨ã¯ã§ããªãããã§ããName (.Cells(1, 1))ã¨ããã°è§£æ±ºãã¾ãã
ãã¡ã¤ã«ãç§»åããNameã¹ãã¼ãã¡ã³ãã¨FileSystemObject.MoveFileã¡ã½ããã®éãã解説ãã¾ããã©ã¡ãã2ã¤ã®ãã¹ãåãåã£ã¦ãã¡ã¤ã«ãç§»åãã¾ããMoveFileã®ã¿ã¯ã¤ã«ãã«ã¼ã*ã«ãã䏿¬ç§»åãã§ããç¹ãä¸çªå¤§ããªéãã§ãã
FileSystemObjectã«ã¦ãã¡ã¤ã«ãç§»åããMoveFileã¡ã½ããã«ã¤ãã¦è§£èª¬ãã¾ããFSO.MoveFile ç§»åå ãã¡ã¤ã«ãã¹, ç§»åå ãã¡ã¤ã«/ãã©ã«ããã¹ã¨ããè¨è¿°ã§å®è¡ãã¾ãããã¡ã¤ã«ãã¹ã«ã¯ã¤ã«ãã«ã¼ãã使ç¨ãã¦ä¸æ¬ç§»åãããã¨ãå¯è½ã§ãã
ãã¡ã¤ã«ãç§»åããããã¡ã¤ã«åã夿´ããéã«ä½¿ç¨ãããNameã¹ãã¼ãã¡ã³ãã®ä½¿ãæ¹ã解説ãã¾ããName ç§»åãããã¡ã¤ã«ã®ãã¹, ç§»åå ã®ãã¡ã¤ã«ãã¹ã¨ããè¨è¿°ã§å®è¡ã§ãããã©ã«ãé¨åãå¤ããã°ç§»åãå¤ããªããã°åç§°å¤æ´ãã§ãã¾ãã
ãã¡ã¤ã«ãã³ãã¼ããéã«ä½¿ç¨ãããFileCopyã¹ãã¼ãã¡ã³ãã¨FileSystemObject.CopyFileã¡ã½ããã®éãã解説ãã¾ããFSO.CopyFileãå®å ¨ä¸ä½äºæã¨è¨ã£ã¦ãããç¹ã«ããã¡ã¤ã«åçç¥å¯ããã¯ã¤ã«ãã«ã¼ãã§ä¸æ¬ã³ãã¼å¯ãã大ããªé·æã¨ãªãã¾ãã
Worksheets("ââ")ã§ã·ã¼ããåå¾ããã¨ãå°ãã®ããã.ããå ¥ãã¦ãå ¥å鏿è¢ãåºãªããã¨ã§ãããã®å¯¾å¦æ³ã¨ãã¦ã夿°ã«Setããã·ã¼ããªãã¸ã§ã¯ãåããããã¾ããã第3ã®æ¹æ³ãWorksheetåã«ãã£ã¹ããã颿°ãä½ããæ¹æ³ã解説ãã¾ãã
ãã¯ããSubåå²ãããèªä½é¢æ°ãä½ãå§ããã¨ãSub/Functionãå¼ã¶æéåå¦çãé ããªããªããå¿é ã«ãªãã¾ããããããæ¤è¨¼ãã¦ã¿ãã¨1,000ä¸åCallãã¦1ï½2ç§ç¨åº¦ããè¦ããªããããããã·ã¼ã¸ã£ãå¼ã¶ã®ã«ãããæéã¯0ã ã¨æã£ã¦OKã§ãã
5è¡ãããIfï½Elseï½EndIfã®åå²ã1è¡ã§æ¸ã¾ãIIf颿°ã¯ã¨ã¦ã便å©ãªã®ã§ãããè¥å¹²é ããããããæ¤è¨¼ãã¦ã¿ã¾ããçµè«ã¨ãã¦ã¯ãIIfãæ¡ä»¶ãTrueã§ãFalseé¨åãè¨ç®ãã¦ãã¾ãã¨ããé ãããããããããé¤ãã°å®åä¸å®æã§ããå·®ã¯åºã¾ããã
ãï¼ããæååã«å¯¾ãã¦ä½¿ãã¨é£çµæ¼ç®å(ï¼ã¨åã)ã«ãªãã¾ããè¶³ãç®ã®çµæãããªã大ããªèª¤ã£ãå¤ã«ãªã£ãããã»ã«ã®è¡¨ç¤ºæ¸å¼ããæååãã«ããã¨æ£ããè¨ç®ãããªããããªä¸å ·åãçºçããå ´åã¯ããã®ä»æ§ãçã£ã¦ãã ããã
è¨äºæ°ãã ãã¶å¢ããã®ã§ãã«ãã´ãªãè¦ç´ãããµã¤ããããããªãã¥ã¼ã¢ã«ãã¾ãããä»åæ°ãã«ãå ¥éã»ã¾ã¨ããã¨ããã«ãã´ãªã追å ãã¦ããã¾ãã®ã§ãåå¼·ç¨ã®èªã¿ç©ã欲ããæ¹ã¯ãã¡ããããæ¢ããã ããã
FileSystemObjectã«ã¦ãã¡ã¤ã«ãã³ãã¼ããCopyFileã¡ã½ããã«ã¤ãã¦è§£èª¬ãã¾ããã³ãã¼å ã¨è¡å ã®äºã¤ã®ãã¹ã渡ãã¦å®è¡ãã¾ããè¡å ã¯ãã¡ã¤ã«/ãã©ã«ãã©ã¡ãã§ãåãã¾ããã³ãã¼å ãã¹ã«ã¯ã¤ã«ãã«ã¼ãã使ç¨ããã°ä¸æ¬ã³ãã¼ãå¯è½ã§ãã
ãã¡ã¤ã«ãã³ãã¼ããéã«ä½¿ç¨ãããFileCopyã¹ãã¼ãã¡ã³ãã®ä½¿ãæ¹ã解説ãã¾ããFileCopy ã³ãã¼å ã®ãã¡ã¤ã«ãã¹, ã³ãã¼å ã®ãã¡ã¤ã«ãã¹ ã¨ããåç´ãªè¨è¿°ã§å®è¡ã§ãã¾ããæ¢åã®ãã¡ã¤ã«ã¯ç¡è¦åã§ä¸æ¸ãããã¦ãã¾ãç¹ã«æ³¨æãã¦ãã ããã
FileSystemObjectã®åç §ä¸ã§ä½¿ç¨ã§ããããã«ãªããFolderãªãã¸ã§ã¯ãã®å徿¹æ³ã¨ããããã£ã»ã¡ã³ãã¼ä¸è¦§ãè¨è¼ãã¾ãã
FileSystemObjectã®åç §ä¸ã§ä½¿ç¨ã§ããããã«ãªããFileãªãã¸ã§ã¯ãã®å徿¹æ³ã¨ããããã£ã»ã¡ã³ãã¼ä¸è¦§ãè¨è¼ãã¾ãã
ExcelVBAã«ããã¦ãã¡ã¤ã«ã»ãã©ã«ãã便å©ã«æä½ããããã«FileSystemObjectã¨ããååã®æ¡å¼µæ©è½ãç¨æããã¦ãã¾ãããã®FileSystemObjectãåãã¦ä½¿ãæ¹ã«åãã¦ãã©ããªæ©è½ãªã®ããã©ããªæã«ä½¿ãã®ããã¾ãã¯ç°¡åã«èª¬æãã¦ããã¾ãã
FileSystemObjectã§ãã©ã«ãå ã®ãµããã©ã«ãä¸è¦§ãåå¾ããæ¹æ³ã¨ããããæä¸å±¤ã¾ã§ãã¹ã¦ã®é層ã®ãã©ã«ãåå¾ããã³ã¼ãã解説ãã¾ãããã©ã«ããåå¾ãã颿°å ã§èªèº«ãSubFoldersã«å¯¾ãã¦å¼åºãããããããå帰å¼åºã«ãã£ã¦å®è£ ãã¾ãã
FileSystemObjectã§ãã©ã«ãå ã®ãã¡ã¤ã«ä¸è¦§ãåå¾ããæ¹æ³ã«ã¤ãã¦è§£èª¬ãã¾ããFSOã¯ãã¡ã¤ã«ã»ãã©ã«ãããªãã¸ã§ã¯ãã¨ãã¦æ±ããã®ãç¹é·ã§ããã©ã«ãå ã®Fileãªãã¸ã§ã¯ãã¯ãFolderãªãã¸ã§ã¯ã.Filesãã§åå¾ã§ããããã«ForEachæã使ãã¾ãã
Dir颿°ã使ã£ã¦ãµããã©ã«ãã®ä¸è¦§ãåå¾ããæ¹æ³ã解説ãã¾ããããã¯éæ¨å¥¨ãªæ¹æ³ã§ãFileSystemObjectã使ã£ãæ¹ãç°¡åãªãã¨ã«æ³¨æãã¦ãã ãããDirã®å ´åã¯ç¸å¯¾ãã¹ã¨ãã¡ã¤ã«ãæ¤ç´¢ããã¦ãã¾ãããããã¯ããã³ã¼ããå¿ è¦ã«ãªãã¾ãã
空ã®ãã©ã«ãã䏿¬ã§åé¤ããæ¹æ³ã解説ãã¾ãã親ãã©ã«ãã®SubFoldersãForEachã§ã«ã¼ãããFilesã¨SubFoldersã®COuntãå ±ã«0ã§ããåãã©ã«ããDeleteãããã¨ã§å®è¡ã§ãã¾ããä¸å±¤ãã©ã«ãã¾ã§æ¤ç´¢ããå ´åã¯ãå帰å¼åºã追å ãã¾ãã