Excel VBAã«ããããã¡ã€ã«ã»ãã©ã«ãç§»åã®ååž°åŠçãã¯ããã¯
ç§ã¯VBAã®æŽ»çšçµéšãéããŠåŸãç¥èãæŽçããå ±æããç®çã§èšäºãäœæããŠããããã°ã©ãã³ã°æŽ1幎åã«ãªããšã³ãžãã¢ã§ããååã¯ãå¯èŠã»ã«ã®ã¿ãå¹ççã«ã³ããŒãããã¯ããã¯ã«ã€ããŠè©³ãã説æããŸãããä»åã¯ããã©ã«ãæ§é ãä¿æãããŸãŸå€§éã®ãã¡ã€ã«ãèªåç§»åããååž°åŠçïŒåŠçãèªåèªèº«ãåŒã³åºãããã°ã©ãã³ã°ææ³ïŒã«ã€ããŠè§£èª¬ããŸãã
- 第1å: Excel VBAã®åºç€ç¥èãšã»ãã¥ãªãã£èšå®
- 第2å: Excel VBAã®åºæ¬æäœãšãªããžã§ã¯ãã®çè§£
- 第3å: Excel VBAã«ããã倿°ãšå®æ°ã®åºæ¬
- 第4å: Excel VBAã«ãããã·ãŒãæäœã®åºæ¬ãšãšã©ãŒåŠç
- 第5å: Excel VBAã«ãããæ¡ä»¶åå²
- 第6å: Excel VBAã«ãããç¹°ãè¿ãåŠçã®åºæ¬
- 第7å: Excel VBAã«ãããé åãšFor Eachã®æŽ»çš
- 第8å: Excel VBAã«ãããFormulaãšValueã®äœ¿ãåããšãŠãŒã¶ãŒå ¥åã®ååŸ
- 第9å: Excel VBAã«ããããã¡ã€ã«æäœãšãã©ã«ã管çã®åºæ¬
- 第10å: Excel VBAã«ãããFileSystemObjectãæŽ»çšããé«åºŠãªãã¡ã€ã«æäœ
- 第11å: Excel VBAã«ãããFileSystemObjectãæŽ»çšããé«åºŠãªãã¡ã€ã«æäœ å¿çšç·š
- 第12å: Excel VBAã«ãããStrConv颿°ã®æŽ»çšãšå¿çšãã¯ããã¯
- 第13å: Excel VBAã«ãããã¯ãŒã¯ããã¯ã®å®å šãªæäœãšç®¡çãã¯ããã¯
- 第14å: Excel VBAã«ãããFunctionïŒé¢æ°ïŒã®äœæãšæŽ»çšãã¯ããã¯
- 第15å: Excel VBAã«ãããé åãè¿ã颿°ã®äœæãšæŽ»çšãã¯ããã¯
- 第16å: Excel VBAã«ãããã³ã¬ã¯ã·ã§ã³ã®æŽ»çšãšå¿çšãã¯ããã¯
- 第17å: Excel VBAã«ãããèŸæžåïŒDictionaryïŒã®æŽ»çšãšå¿çšãã¯ããã¯
- 第18å: Excel VBAã«ãããEnumåãæŽ»çšãã颿°èšèšãšå®è£ ãã¯ããã¯
- 第19å: Excel VBAã«ããããŠãŒãã£ãªãã£é¢æ°ã®äœæãšæŽ»çšãã¯ããã¯
- 第20å: Excel VBAã«ãããæ£èŠè¡šçŸã掻çšãããã¡ã€ã«åè§£æãã¯ããã¯
- 第21å: Excel VBAã§ç¯å²å ã®å³åœ¢ãå¹ççã«åé€ãããã¯ããã¯
- 第22å: Excel VBAã§ææ°ãã¡ã€ã«ãå¹ççã«æ€çŽ¢ãã颿°èšèšãã¯ããã¯
- 第23å: Excel VBAã§éžæããç¯å²ã«å¯ŸããŠãäžè¡ããã«ç©ºè¡ãæ¿å ¥ãããã¯ããã¯
- 第24å: Excel VBAã§å¯èŠã»ã«ã掻çšãããã£ã«ã¿ãŒæäœãã¯ããã¯
- 第25å: Excel VBAã§å¯èŠã»ã«ã®ã¿ãå¹ççã«ã³ããŒãããã¯ããã¯
- 第26å: Excel VBAã«ããããã¡ã€ã«ã»ãã©ã«ãç§»åã®ååž°åŠçãã¯ããã¯ïŒæ¬èšäºïŒ
- 第27å: Excel VBAã«ããã芪ãã©ã«ããã¹ååŸã®å®è£ ãã¯ããã¯
- 第28å: Excel VBAã«ãããç¬èªã€ãã³ãã®èšèšãšå®è£ ãã¯ããã¯
- 第29å: Excel VBAã«ãããEnumåãæŽ»çšããã¡ã³ããã³ã¹æ§åäžãã¯ããã¯
- 第30å: Excel VBAã«ãããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯
ç®æ¬¡
- ã¯ããã«
- ååž°åŠçã®åºæ¬æŠå¿µ
- FileSystemObjectãæŽ»çšãããã¡ã€ã«ç§»å
- ã¡ã€ã³åŠç颿°ã®å®è£ ãšè©³çŽ°è§£èª¬
- éè€ãã¡ã€ã«å¯Ÿå¿ãšãã°æ©èœ
- ãšã©ãŒãã³ããªã³ã°ãšã»ãã¥ãªãã£èæ ®äºé
- å®è£ æã®éèŠãªãã€ã³ã
- å®éã®äœ¿çšå Žé¢
- ãŸãšã
ã¯ããã«
äŒæ¥ãçµç¹ã§Excelãã¯ããæŽ»çšããŠãã¡ã€ã«åŠçãèªååããéãåŠç察象ã®ãã¡ã€ã«ããã©ã«ããã¢ãŒã«ã€ããã©ã«ãã«æ ŒçŽãããŠããã±ãŒã¹ããããããŸããéåžžãããããç¶æ³ã§ã¯ãã¢ãŒã«ã€ããã©ã«ãããç®çã®ãã©ã«ããæäœæ¥ã§åãåºããåŠççšã®ãã©ã«ãã«ç§»åããŠãããã¯ããå®è¡ããããšããæé ãå¿ èŠãšãªãã±ãŒã¹ãå€ã ãããŸãããã®äœæ¥ã¯æéãæ¶è²»ããã ãã§ãªãã人çºçãã¹ã®ãªã¹ã¯ã䌎ããŸãã
ç¹ã«åé¡ãšãªãã®ãååãã¡ã€ã«ã®æ±ãã§ããWindowsã®ãšã¯ã¹ãããŒã©ãŒã§ãã©ã«ããç§»åããå Žåãåäžåã®ãã¡ã€ã«ãååšãããšç¢ºèªãã€ã¢ãã°ã衚瀺ãããŸãããVBAã®FileSystemObjectã䜿ã£ãèªååŠçã§ã¯ãšã©ãŒãçºçããŠããŸããŸãã
æ¬èšäºã§ç޹ä»ãããã¯ãã¯ããã®ãã¢ãŒã«ã€ããã©ã«ãå ã®ãã¡ã€ã«ã»ãã©ã«ããèªåçã«å±éããé©åãªå Žæã«ç§»åãããäœæ¥ãã®ãã®ãå®å šèªååããŸããååž°åŠçã«ãããã©ãã ãæ·±ãéå±€æ§é ã§ããã©ã«ãæ§é ãç¶æãããŸãŸç§»åããååãã¡ã€ã«ããã£ãå Žåã«ã¯èªåçã«ãªããŒã ããŠä¿åãç§»åãªã¹ããèªåã§èšé²ããŸãã
ããã«ããããŠãŒã¶ãŒã¯åã«ãã¯ããå®è¡ããã ãã§ãåŠç察象ã®ãã¡ã€ã«ãèªåçã«é©åãªå Žæã«é 眮ãããååãã¡ã€ã«ã®è¡çªåé¡ãèªåçã«è§£æ±ºãããŸããåŠçåã®æäœæ¥ããè§£æŸãããããšã§ãããæ¬è³ªçãªæ¥åã«éäžã§ããããã«ãªããŸãã
å®è£ ã«ãããäž»èŠãªæè¡èŠçŽ
ä»åã®å®è£ ã§ã¯ã以äžã®æè¡èŠçŽ ãçµã¿åãããŸãã
- FileSystemObject: ãã¡ã€ã«ãšãã©ã«ãã®æäœãå®å šã«å®è¡
- ååž°åŠç: ãã©ã«ãéå±€ã蟿ããªããåŠçãå®è¡
- Dir颿°: æå®ããããã¿ãŒã³ã«åèŽãããã©ã«ããæ€çŽ¢
- ãšã©ãŒãã³ããªã³ã°: åŠçäžã«çºçããäŸå€ãžã®å¯Ÿå¿
- éè€ãã¡ã€ã«åŠç: ååãã¡ã€ã«ã®èªåãªããŒã æ©èœ
ååž°åŠçã®åºæ¬æŠå¿µ
ååž°åŠçãé©ããŠããå Žé¢
ååž°åŠçã¯ããã©ã«ãã®äžã«ããã«ãã©ã«ããååšããéå±€æ§é ã®åŠçã«é©ããŠããŸãã
ãã©ã«ãç§»åã«ãããååž°åŠçã®æµã
芪ãã©ã«ã
âââ ãµããã©ã«ãA
â âââ ãã¡ã€ã«1.txt
â âââ ãµããµããã©ã«ãA-1
â âââ ãã¡ã€ã«2.txt
âââ ãµããã©ã«ãB
âââ ãã¡ã€ã«3.txt
ãã®ãããªæ§é ã§ååž°åŠçãå®è¡ãããæµãã¯ä»¥äžã®éãã§ãã
- 芪ãã©ã«ããåŠçéå§
- ãµããã©ã«ãAãçºèŠ â ãµããã©ã«ãAã®åŠçãéå§ïŒååž°åŒã³åºãïŒ
- ãµããµããã©ã«ãA-1ãçºèŠ â ãµããµããã©ã«ãA-1ã®åŠçãéå§ïŒååž°åŒã³åºãïŒ
- ãã¡ã€ã«2.txtãç§»å
- ãµããµããã©ã«ãA-1ã®åŠçå®äº â ãµããã©ã«ãAã®åŠçã«æ»ã
- ãã¡ã€ã«1.txtãç§»å
- ãµããã©ã«ãAã®åŠçå®äº â 芪ãã©ã«ãã®åŠçã«æ»ã
- ãµããã©ã«ãBãçºèŠ â ãµããã©ã«ãBã®åŠçãéå§ïŒååž°åŒã³åºãïŒ
- ãã¡ã€ã«3.txtãç§»å
- ãã¹ãŠã®åŠçå®äº
ååž°åŠçã®éèŠãªãã€ã³ã
ååž°åŠçã§ã¯ãçµäºæ¡ä»¶ãæç¢ºã«èšå®ããããšãéèŠã§ããçµäºæ¡ä»¶ããªããšç¡éã«ãŒãã«é¥ããããã°ã©ã ã忢ããªããªããŸãããã©ã«ãç§»åã®å Žåãããã以äžåŠçãããã¡ã€ã«ããã©ã«ãããªããç¶æ ãçµäºæ¡ä»¶ãšãªããŸãã
FileSystemObjectãæŽ»çšãããã¡ã€ã«ç§»å
åºæ¬çãªãã©ã«ãç§»ååŠç
ãã©ã«ãç§»åã®æ žå¿ãšãªãéšåã§ããç§»åå ã«ååãã©ã«ããããå Žåã¯çµ±ååŠçããªããã°åçŽç§»åãè¡ããŸãã
' ãã©ã«ãç§»åã®åºæ¬åŠç
' fso: FileSystemObjectã€ã³ã¹ã¿ã³ã¹
' sourcePath: ç§»åå
ãã©ã«ããã¹
' destinationPath: ç§»åå
ãã©ã«ããã¹
Sub TransferFolder(ByRef fso As FileSystemObject, _
ByVal sourcePath As String, ByVal destinationPath As String)
On Error GoTo ErrorHandler
' ç§»åå
ã«ååãã©ã«ããååšããããã§ãã¯
If fso.FolderExists(destinationPath) Then
' éè€ãã©ã«ããååšããå Žåã¯çµ±ååŠçãå®è¡
Call DuplicateFolderProcess(fso, sourcePath, destinationPath)
Else
' ç§»åå
ã«ååãã©ã«ããååšããªãå Žåã¯åçŽç§»å
fso.MoveFolder sourcePath, destinationPath
End If
Exit Sub
ErrorHandler:
Debug.Print "ãã©ã«ãåŠçãšã©ãŒ" & vbCrLf & Err.Description
Err.Clear
End Sub
éè€ãã©ã«ãã®çµ±ååŠç
ååãã©ã«ããååšããå Žåã®åŠçããååž°åŠçã®çé«ã§ããç§»åå ãã©ã«ãå ã®ãµããã©ã«ããšãã¡ã€ã«ãååž°çã«åŠçããŠç§»åå ã«çµ±åããŸãã
' éè€ãã©ã«ãã®çµ±ååŠç
' fso: FileSystemObjectã€ã³ã¹ã¿ã³ã¹
' sourcePath: ç§»åå
ãã©ã«ããã¹
' destinationPath: ç§»åå
ãã©ã«ããã¹
Sub DuplicateFolderProcess(ByRef fso As FileSystemObject, _
ByVal sourcePath As String, ByVal destinationPath As String)
' ç§»åå
ãã©ã«ãã®ãªããžã§ã¯ããååŸ
Dim sourceFolder As Folder
Set sourceFolder = fso.GetFolder(sourcePath)
' ç§»åå
ãã©ã«ãå
ã®ãµããã©ã«ããåŠç
Dim subFolder As Folder
For Each subFolder In sourceFolder.SubFolders
' ç§»åå
ã®ãµããã©ã«ããã¹ãçæ
Dim destSubPath As String
destSubPath = destinationPath & "\" & subFolder.Name
' ãååž°åŒã³åºãããµããã©ã«ãã«å¯ŸããŠãã©ã«ãç§»ååŠçãå®è¡
Call TransferFolder(fso, subFolder.Path, destSubPath)
Next subFolder
' ç§»åå
ãã©ã«ãå
ã®ãã¡ã€ã«ãåŠç
Dim targetFile As File
For Each targetFile In sourceFolder.Files
' ãååž°åŒã³åºããåãã¡ã€ã«ã«å¯ŸããŠãã¡ã€ã«ç§»ååŠçãå®è¡
Call TransferFile(fso, targetFile.Path, destinationPath)
Next targetFile
End Sub
SubFolders ã³ã¬ã¯ã·ã§ã³ã®æŽ»çš
SubFolders
ã¯ãæå®ãããã©ã«ãå
ã«ãããµããã©ã«ããèªåçã«äžèЧãšããŠååŸããŠããã䟿å©ãªæ©èœã§ãã
' ãã©ã«ãå
ã®ãµããã©ã«ããèªåååŸ
Dim subFolder As Folder
For Each subFolder In sourceFolder.SubFolders
' ããã§åãµããã©ã«ãã«å¯ŸããŠåŠçãå®è¡
Debug.Print "çºèŠãããµããã©ã«ã: " & subFolder.Name
Next subFolder
ãã®ã³ã¬ã¯ã·ã§ã³ã®åªããç¹ã¯ããã©ã«ããããã€ãã£ãŠãèªåçã«å šãŠååŸããŠãããããšã§ããæåã§ãã©ã«ãåãæå®ããå¿ èŠããªãããã©ã«ãã®å¢æžã«ãæè»ã«å¯Ÿå¿ã§ããŸãã
Files ã³ã¬ã¯ã·ã§ã³ã«ãããã¡ã€ã«åŠç
Files
ã³ã¬ã¯ã·ã§ã³ãåæ§ã«ããã©ã«ãå
ã®å
šãã¡ã€ã«ãèªåååŸããŸãããã¡ã€ã«ã®çš®é¡ãæ°ã«é¢ä¿ãªããäžæ¬ã§åŠçã§ããã®ãç¹åŸŽã§ãã
' ãã©ã«ãå
ã®ãã¡ã€ã«ãèªåååŸããŠåŠç
Dim targetFile As File
For Each targetFile In sourceFolder.Files
' åãã¡ã€ã«ã®æ
å ±ã衚瀺
Debug.Print "ãã¡ã€ã«å: " & targetFile.Name
Debug.Print "ãã¡ã€ã«ãµã€ãº: " & targetFile.Size & " ãã€ã"
' å®éã®ç§»ååŠçãå®è¡
Call TransferFile(fso, targetFile.Path, destinationPath)
Next targetFile
ãã®æ¹æ³ã«ããã.xlsx
ãã¡ã€ã«ã.txt
ãã¡ã€ã«ã.jpg
ãã¡ã€ã«ãããã¡ã€ã«åœ¢åŒãåããå
šãŠèªååŠçãããŸãã
åŠçé åºã®éèŠæ§
çµ±ååŠçã§ã¯ããµããã©ã«ããå ã«åŠçããŠãããã¡ã€ã«ãåŠçããŸããããã¯ããã©ã«ãæ§é ãæ£ããæ§ç¯ããŠãããã¡ã€ã«ãé 眮ããããã§ãã
- ãµããã©ã«ãã®åŠç: ãã©ã«ãæ§é ãå ã«æŽãã
- ãã¡ã€ã«ã®åŠç: æŽããããæ§é ã«ãã¡ã€ã«ãé 眮
- 空ãã©ã«ãã®åé€: ç§»åãå®äºãã空ã®ãã©ã«ããåé€
ç§»åå
: ãã©ã«ãA/ãµããã©ã«ãB/ãµããµããã©ã«ãC
ç§»åå
: ãã©ã«ãAïŒæ¢ã«ååšïŒ
åŠçã®æµãïŒ
1. ãã©ã«ãAã®çµ±ååŠçéå§
2. ãµããã©ã«ãBãçºèŠ â TransferFolderåŒã³åºã
3. ãµããã©ã«ãBã®çµ±ååŠçéå§
4. ãµããµããã©ã«ãCãçºèŠ â TransferFolderåŒã³åºã
5. ææ·±å±€ããé çªã«åŠçå®äº
éèŠãªã®ã¯ãTransferFolder
ãåã³åŒã³åºããŠããç¹ã§ããããã«ãããäœéå±€ã§ãæ·±ããã©ã«ãæ§é ãæ£ããçµ±åã§ããŸãã
ãã®ä»çµã¿ã«ãããäœéå±€ãã£ãŠãèªåçã«ææ·±éšãŸã§åŠçãå®è¡ãããå®äºãããšå ã®éå±€ã«æ»ã£ãŠç¶ãã®åŠçãè¡ããŸããååž°åŠçããªããã°ãéå±€ã®æ°ã ãå¥ã ã®ã³ãŒããæžãå¿ èŠããããŸããããã®æ¹æ³ãªããã£ãæ°è¡ã§ç¡éã®éå±€ã«å¯Ÿå¿ã§ããŸã
ã¡ã€ã³åŠç颿°ã®å®è£ ãšè©³çŽ°è§£èª¬
ã¡ã€ã³é¢æ°ã®å šäœæ§é
æå®ãã¿ãŒã³ã®ãã©ã«ããæ€çŽ¢ããŠç§»ååŠçãå®è¡ããŸãã
' ã¡ã€ã³åŠç颿°
' upperFolderPath: æ€çŽ¢å¯Ÿè±¡ã®äžäœãã©ã«ããã¹
' searchPattern: æ€çŽ¢ãããã©ã«ãã®ãã¿ãŒã³ïŒã¯ã€ã«ãã«ãŒã䜿çšå¯èœïŒ
' æ»ãå€: ç§»åããããã©ã«ãåïŒèŠã€ãããªãå Žåã¯ç©ºæåïŒ
Function ImportedProcess(ByVal upperFolderPath As String, _
ByVal searchPattern As String) As String
' ãªããŒã ãã¡ã€ã«æ
å ±ãåæå
renamedFileList = ""
renamedCount = 0
' æ€çŽ¢ãããã©ã«ãã®ãã«ãã¹ãçæ
Dim sourceFolderPath As String
sourceFolderPath = upperFolderPath & "\" & searchPattern
' Dir颿°ã§æå®ãã¿ãŒã³ã«åèŽããæåã®ãã©ã«ãåãååŸ
Dim archivedFolderName As String
archivedFolderName = Dir(sourceFolderPath, vbDirectory)
' FileSystemObjectã€ã³ã¹ã¿ã³ã¹ãäœæ
Dim fso As New FileSystemObject
' ã¢ãŒã«ã€ããã©ã«ããèŠã€ãã£ãå Žåã®åŠç
If archivedFolderName <> "" Then
' ç§»åå
ãã©ã«ãã®å®å
šãã¹ãçæ
Dim fullSourcePath As String
fullSourcePath = upperFolderPath & "\" & archivedFolderName
' ãšã©ãŒåŠçãèšå®ããŠãã©ã«ãç§»åãå®è¡
On Error Resume Next
fso.MoveFolder fullSourcePath, upperFolderPath
' ç§»åã倱æããå ŽåïŒéåžžã¯ååãã©ã«ãååšæïŒ
If Err.Number <> 0 Then
' ãšã©ãŒãã¯ãªã¢ããŠååž°åŠçã§çµ±åç§»åãå®è¡
Err.Clear
Call TransferFolder(fso, fullSourcePath, upperFolderPath & "\" & archivedFolderName)
End If
End If
' ãã°åºååŠç
If renamedCount > 0 Then
importedMessage = "åèš" & renamedCount & "åã®ãã¡ã€ã«ãå¥åç»é²ããŸããã" _
& vbCrLf & renamedFileList
' ãªããŒã ãã¡ã€ã«ãååšããå Žåã¯ãã°ãã¡ã€ã«ãšããŠåºå
Call WriteLogToFile(fso, importedMessage, _
upperFolderPath & "\" & archivedFolderName)
Debug.Print importedMessage
End If
' ãªãœãŒã¹ãè§£æŸ
Set fso = Nothing
' åŠççµæãšããŠç§»åããããã©ã«ãåãè¿ã
ImportedProcess = Dir(upperFolderPath & "\" & searchPattern, vbDirectory)
End Function
Dir颿°ã«ã€ããŠãããã«è©³ããç¥ãããæ¹ã¯ãç§ãæžããèšäº
ã第22å: Excel VBAã§ææ°ãã¡ã€ã«ãå¹ççã«æ€çŽ¢ãã颿°èšèšãã¯ããã¯ãããã²ã芧ãã ããã
éè€ãã¡ã€ã«å¯Ÿå¿ãšãã°æ©èœ
ååãã¡ã€ã«ã®èªåãªããŒã åŠç
ååãã¡ã€ã«ãååšããå Žåã¯ãå¥åä¿åããããšã§ããã¡ã€ã«ã®äžæžããæ¶å€±ãé²ãã§ããŸãã
' éè€ãã¡ã€ã«å¯Ÿå¿ã®ãã¡ã€ã«ç§»ååŠç
' fso: FileSystemObjectã€ã³ã¹ã¿ã³ã¹
' sourcePath: ç§»åå
ãã¡ã€ã«ã®å®å
šãã¹
' destinationPath: ç§»åå
ãã©ã«ããã¹
Sub TransferFile(ByRef fso As FileSystemObject, _
ByVal sourcePath As String, ByVal destinationPath As String)
On Error GoTo ErrorHandler
' ç§»åå
ãã¡ã€ã«ã®ååãååŸ
Dim sourceFileName As String
sourceFileName = fso.GetFileName(sourcePath)
' ç§»åå
ã®å®å
šãã¹ãçæ
Dim destinationFile As String
destinationFile = fso.BuildPath(destinationPath, sourceFileName)
' ç§»åå
ã«ååãã¡ã€ã«ãååšããããã§ãã¯
If fso.FileExists(destinationFile) Then
' ãªããŒã ã®ãããå
ãã¡ã€ã«åãæ¡åŒµåãªãã§ååŸ
Dim baseName As String
baseName = fso.GetBaseName(sourcePath)
' æ¡åŒµåãååŸããä»åŸã®ãªããŒã åŠçã«å©çšããããä¿æ
Dim extension As String
extension = fso.GetExtensionName(sourcePath)
' éè€åé¿çšã®æ°ãããã¡ã€ã«åãçæ
Dim newFileName As String
newFileName = baseName & "_ç§»åãã¡ã€ã«" & "." & extension
' æ°ãããã¡ã€ã«åã§ç§»åå
ãã¹ãåæ§ç¯
destinationFile = fso.BuildPath(destinationPath, newFileName)
' ãªããŒã æ
å ±ããã°çšå€æ°ã«è¿œå
renamedFileList = renamedFileList & vbCrLf & _
"ç§»åå
: " & sourcePath & vbCrLf & _
"ç§»åå
: " & destinationFile & vbCrLf
' ãªããŒã ä»¶æ°ã1å¢ãã
renamedCount = renamedCount + 1
End If
' å®éã®ãã¡ã€ã«ç§»åãå®è¡
fso.MoveFile sourcePath, destinationFile
Exit Sub
ErrorHandler:
Debug.Print "ãã¡ã€ã«åŠçãšã©ãŒ" & vbCrLf & Err.Description
Err.Clear
End Sub
åŠçã®æµã
-
ååãã¡ã€ã«ã®ååšãã§ãã¯
If fso.FileExists(destinationFile) Then
ç§»åå ã«åãååã®ãã¡ã€ã«ãããããäºåã«ç¢ºèªããŸãã
-
ãã¡ã€ã«åã®åè§£ãšåæ§ç¯
Dim baseName As String baseName = fso.GetBaseName(sourcePath) ' æ¡åŒµåãé€ãããã¡ã€ã«å Dim extension As String extension = fso.GetExtensionName(sourcePath) ' æ¡åŒµåã®ã¿
äŸïŒ
å ±åæž.xlsx
âbaseName = "å ±åæž"
ãextension = "xlsx"
-
æ°ãããã¡ã€ã«åã®çæ
Dim newFileName As String newFileName = baseName & "_ç§»åãã¡ã€ã«" & "." & extension
äŸïŒ
å ±åæž.xlsx
âå ±åæž_ç§»åãã¡ã€ã«.xlsx
-
ãªããŒã æ å ±ã®èšé²
åŠçããããã¡ã€ã«ã®æ å ±ããã°çšå€æ°ã«èç©ããåŸã§ããã¹ããã¡ã€ã«ãšããŠåºåããŸãã
ãã®æ¹åŒã®å©ç¹
- ããŒã¿æå€±ã®é²æ¢: æ¢åãã¡ã€ã«ãäžæžãããã«ä¿è·
- èªååŠç: ãŠãŒã¶ãŒã®å€æãæ±ããã«åŠçç¶è¡
- 远跡å¯èœæ§: ã©ã®ãã¡ã€ã«ããªããŒã ãããããèšé²
-
äžææ§ã®ä¿èšŒ:
_ç§»åãã¡ã€ã«
æ¥å°ŸèŸã«ããéè€åé¿
å®éã®åäœäŸ
ç§»ååã®ç¶æ³ïŒ
ç§»åå
: C:\temp\è³æ.xlsx
ç§»åå
: C:\work\è³æ.xlsx (æ¢ã«ååš)
åŠçåŸã®çµæïŒ
ç§»åå
: C:\work\è³æ_ç§»åãã¡ã€ã«.xlsx (æ°ããäœæ)
ãã®ä»çµã¿ã«ããã倧éã®ãã¡ã€ã«ç§»ååŠçäžã«ååãã¡ã€ã«ãçºèŠãããŠããåŠçã忢ããããšãªããã¹ãŠã®ãã¡ã€ã«ãå®å šã«ç§»åãããŸãã
FileSystemObjectã®ãã¡ã€ã«åæäœã¡ãœããã«ã€ããŠãããã«è©³ããç¥ãããæ¹ã¯ãç§ãæžããèšäº
ã 第11å: Excel VBAã«ãããFileSystemObjectãæŽ»çšããé«åºŠãªãã¡ã€ã«æäœ å¿çšç·šãããã²ã芧ãã ããã
ãã°ãã¡ã€ã«åºåæ©èœ
ãã¡ã€ã«ç§»ååŠçäžã«çºçãããªããŒã æ å ±ãããã¹ããã¡ã€ã«ãšããŠèªåä¿åããåŸããåŠçå 容ã確èªã§ããããã«ããŠããŸãã
' åŠççµæããã°ãã¡ã€ã«ã«åºå
' fso: FileSystemObjectã€ã³ã¹ã¿ã³ã¹
' message: ãã°ãã¡ã€ã«ã«åºåããã¡ãã»ãŒãžå
容
' logFolderPath: ãã°ãã¡ã€ã«ãä¿åãããã©ã«ããã¹
Sub WriteLogToFile(ByRef fso As FileSystemObject, _
ByVal message As String, ByVal logFolderPath As String)
' ãã°ãã¡ã€ã«ã®å®å
šãã¹ãçæ
Dim logFilePath As String
logFilePath = logFolderPath & "\" & "ç§»åãã¡ã€ã«äžèЧ.txt"
' ããã¹ããã¡ã€ã«ãäœæããŠæžã蟌ã¿
Dim moveListText As TextStream
Set moveListText = fso.CreateTextFile(logFilePath, True) ' äžæžãã¢ãŒã
' ã¡ãã»ãŒãžããã¡ã€ã«ã«åºå
moveListText.WriteLine message
' ãã¡ã€ã«ãéããŠãªãœãŒã¹ãè§£æŸ
moveListText.Close
CreateTextFileã¡ãœããã®ãã©ã¡ãŒã¿
- 第1åŒæ°: äœæãããã¡ã€ã«ã®ãã¹
-
第2åŒæ°: äžæžããã©ã°ïŒ
True
ã§æ¢åãã¡ã€ã«ãäžæžãïŒ - 第3åŒæ°: Unicode圢åŒãã©ã°ïŒçç¥å¯èœïŒ
ãã°ãã¡ã€ã«ãäœæããããšã§ãã©ã®ãã¡ã€ã«ããªããŒã ãããããåŸãã確èªã§ããŸãã
åŠçã®æµã
-
ãã°ãã¡ã€ã«ã®ä¿åå Žææ±ºå®
Dim logFilePath As String logFilePath = logFolderPath & "\" & "ç§»åãã¡ã€ã«äžèЧ.txt"
ç§»åå ãã©ã«ããšåãå Žæã«
ç§»åãã¡ã€ã«äžèЧ.txt
ãšãããã¡ã€ã«åã§ä¿åãããŸãã -
ããã¹ããã¡ã€ã«ã®äœæ
Dim moveListText As TextStream Set moveListText = fso.CreateTextFile(logFilePath, True)
CreateTextFile
ã®ç¬¬2åŒæ°True
ã«ãããæ¢åãã¡ã€ã«ãããã°äžæžãã¢ãŒãã§äœæãããŸãã -
ãã°æ å ±ã®æžã蟌ã¿
moveListText.WriteLine message
èç©ããããªããŒã æ å ±ããã¡ã€ã«ã«äžæ¬åºåããŸãã
-
ãªãœãŒã¹ã®é©åãªè§£æŸ
moveListText.Close
ãã¡ã€ã«ãéããããšã§ãä»ã®ããã°ã©ã ãããã¢ã¯ã»ã¹å¯èœã«ãªããŸãã
åºåããããã°ãã¡ã€ã«ã®å 容äŸ
åèš3åã®ãã¡ã€ã«ãå¥åç»é²ããŸããã
ç§»åå
: C:\archive\ãããžã§ã¯ãA\è³æ.xlsx
ç§»åå
: C:\work\ãããžã§ã¯ãA\è³æ_ç§»åãã¡ã€ã«.xlsx
ç§»åå
: C:\archive\ãããžã§ã¯ãA\ç»å\å³1.png
ç§»åå
: C:\work\ãããžã§ã¯ãA\ç»å\å³1_ç§»åãã¡ã€ã«.png
ç§»åå
: C:\archive\ãããžã§ã¯ãB\å ±åæž.docx
ç§»åå
: C:\work\ãããžã§ã¯ãB\å ±åæž_ç§»åãã¡ã€ã«.docx
ãã®æ©èœã®å©ç¹
- åŠçå±¥æŽã®ä¿å: ã©ã®ãã¡ã€ã«ããªããŒã ãããããæ°žç¶çã«èšé²
- ç£æ»èšŒè·¡: åŸãããã¡ã€ã«ç§»åã®è©³çްã確èªå¯èœ
ãã®ãã°æ©èœã«ããã倧éã®ãã¡ã€ã«åŠçã§ãå®å¿ããŠèªååã§ããç§»åãã¡ã€ã«ã®å 容ã確èªããããšãã§ããŸãã
éè€ãã¡ã€ã«åŠçåŸã®ç¢ºèªäœæ¥
ãã¯ãåŠçå®äºåŸãéè€ãã¡ã€ã«ïŒ_ç§»åãã¡ã€ã«
ãšããæ¥å°ŸèŸãä»ãããã¡ã€ã«ïŒãçæãããå Žåã¯ã以äžã®ç¢ºèªäœæ¥ãšå¯Ÿå¿ãè¡ãããšãåŒ·ãæšå¥šããŸãã
1. ãã¡ã€ã«å å®¹ã®æ¯èŒç¢ºèª
- å
ã®ãã¡ã€ã«ãš
_ç§»åãã¡ã€ã«
ä»ãã®ãã¡ã€ã«ã®å å®¹ãæ¯èŒ - ã©ã¡ããææ°ã®æ£ããå 容ãã確èª
2. é©åãªãã¡ã€ã«ç®¡ç
- äžèŠãªãã¡ã€ã«ãåé€ïŒéåžžã¯ã©ã¡ããäžæ¹ã®ã¿æ®ãïŒ
- äž¡æ¹ãšãå¿
èŠãªå Žåã¯ã
_ç§»åãã¡ã€ã«
ããé©åãªååã«å€æŽ
ãã®æŽçãæ ããšã_ç§»åãã¡ã€ã«_ç§»åãã¡ã€ã«
ã®ãããªãã¡ã€ã«ãäœæããç¶ããŸãããã®çµæããã¡ã€ã«ç®¡çã®æçæ§ãæãªãããåŸã
ã®äœæ¥å¹çã«æªåœ±é¿ãåãŒããŸãã
ãšã©ãŒãã³ããªã³ã°ãšã»ãã¥ãªãã£èæ ®äºé
å®å šãªãšã©ãŒåŠçãã¿ãŒã³
ä»åã®å®è£ ã§ã¯ãç°ãªãã¬ãã«ã§ãšã©ãŒåŠçã䜿ãåããŠããŸãã
' ã¬ãã«1: èŽåœçã§ãªããšã©ãŒã®åŠç
On Error Resume Next
fso.MoveFolder FullSourcePath, UpperFolderPath
If Err.Number <> 0 Then
' ãšã©ãŒãçºçããå Žåã®ä»£æ¿åŠç
Err.Clear
Call moveFolder(fso, FullSourcePath, UpperFolderPath & "\" & ArchivedFolderName)
End If
' ã¬ãã«2: åå¥åŠçã§ã®ãšã©ãŒãã³ããªã³ã°
On Error GoTo ErrorHandler
' ... åŠçå
容 ...
Exit Sub
ErrorHandler:
Debug.Print "åŠçãšã©ãŒ: " & Err.Description
Err.Clear
ã»ãã¥ãªãã£äžã®éèŠãªèæ ®äºé
ãã¡ã€ã«ç§»ååŠçã§ã¯ã以äžã®ã»ãã¥ãªãã£ãªã¹ã¯ã«æ³šæãå¿ èŠã§ãã
ã»ãã¥ãªãã£äžã®æ³šæç¹
- æš©éã®ç¢ºèª: ç§»åå ã»ç§»åå ãã©ã«ãã«å¯Ÿããé©åãªã¢ã¯ã»ã¹æš©éãããããšã確èª
- ã·ã¹ãã ãã¡ã€ã«ã®ä¿è·: ã·ã¹ãã ãã©ã«ããããã°ã©ã ãã¡ã€ã«ã®ç§»åãé¿ãã
- ããã¯ã¢ããã®äœæ: éèŠãªãã¡ã€ã«ã¯ç§»ååã«ããã¯ã¢ãããäœæ
- ãã°ã®ç®¡ç: åŠçãã°ã¯é©åãªå Žæã«ä¿åããäžæ£ã¢ã¯ã»ã¹ãé²ã
å®è£ æã®éèŠãªãã€ã³ã
ã¢ãžã¥ãŒã«ã¬ãã«å€æ°ã®æŽ»çš
ä»åã®å®è£ ã§ã¯ãåŠçç¶æ³ã远跡ããããã«ã¢ãžã¥ãŒã«ã¬ãã«å€æ°ã䜿çšããŠããŸãã
' ã¢ãžã¥ãŒã«ã®å
é ã§å®£èšããã倿°
Private RenamedFileList As String ' ãªããŒã ãã¡ã€ã«ã®äžèЧ
Private RenamedCount As Long ' ãªããŒã ä»¶æ°
Public ImportedMessage As String ' çµæã¡ãã»ãŒãž
ãããã®å€æ°ã«ãããååž°åŠçäžã®æ å ±ãå¹ççã«ç®¡çã§ããŸãã
ããã©ãŒãã³ã¹æé©åã®ãã€ã³ã
- FileSystemObjectã®åå©çš: åŠçå šäœã§1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã䜿ãåã
-
ãã¹æäœã®å¹çå:
BuildPath
ã¡ãœããã§å®å šãªãã¹çµåãå®è¡ - ã¡ã¢ãªç®¡ç: åŠçå®äºåŸã®ãªããžã§ã¯ãè§£æŸã培åº
ãããã°ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°
' ãããã°çšã®æ
å ±åºå
Debug.Print "åŠç察象ãã©ã«ã: " & FullSourcePath
Debug.Print "ç§»åå
ãã©ã«ã: " & DestinationPath
Debug.Print "ãªããŒã ä»¶æ°: " & RenamedCount
Debug.Print
ãæŽ»çšããããšã§ãåŠçã®é²è¡ç¶æ³ã远跡ã§ããŸãã
æ¢åãã¯ããšã®çµã¿åããæŽ»çšæ³
ãã®ãã¡ã€ã«ç§»åãã¯ãã®ç䟡ã¯ãæ¢åã®åŠçãã¯ããšçµã¿åãããŠäœ¿çšããããšã§çºæ®ãããŸããåŸæ¥ã¯ãæäœæ¥ã§ã¢ãŒã«ã€ãããåãåºã â ãã¯ãå®è¡ããšãã2段éã®äœæ¥ãå¿ èŠã§ãããããã®åŠçãçµã¿åãããããšã§å®å šèªååãå®çŸã§ããŸãã
åŸæ¥ã®åŠçãããŒ
' 1. æäœæ¥ã§ã¢ãŒã«ã€ããã©ã«ãããåŠççšãã©ã«ãã«ç§»å
' 2. ãã¯ãåŠçéå§
Sub åŸæ¥ã®åŠçãã¿ãŒã³()
' æ¢åã®åŠçãã¯ããå®è¡
Call ããŒã¿éèšåŠç()
Call ã¬ããŒãäœæåŠç()
End Sub
æ¹è¯åŸã®å®å šèªååŠçãããŒ
Sub å®å
šèªååŠçãã¿ãŒã³()
' ã¢ãŒã«ã€ããã©ã«ãããèªåã§ãã¡ã€ã«ãå±é
Dim targetFolder As String
targetFolder = "C:\Work\Projects" ' äœæ¥ãã©ã«ãã®ãã¹ãæå®
Dim searchPattern As String
searchPattern = "*ã¢ãŒã«ã€ã*" ' å±éãããã¢ãŒã«ã€ããã©ã«ãã®ãã¿ãŒã³ãæå®
' ã远å éšåãã¢ãŒã«ã€ãããã®èªåå±éåŠç
Dim result As String
result = ImportedProcess(targetFolder, searchPattern)
' ã¢ãŒã«ã€ããã©ã«ããèŠã€ãããªãã£ãå Žåã¯åŠççµäº
If result = "" Then
MsgBox "察象ã®ã¢ãŒã«ã€ããã©ã«ããèŠã€ãããŸããã§ããã"
Exit Sub ' æ©æãªã¿ãŒã³ã§åŠççµäº
End If
' ããããæ¢åã®ãã¯ãåŠçãèªåå®è¡
Call ããŒã¿éèšåŠç() ' æ¢åã®åŠç1
Call ã¬ããŒãäœæåŠç() ' æ¢åã®åŠç2
' åŠçå®äºã¡ãã»ãŒãžã衚瀺
MsgBox "ãã¹ãŠã®åŠçãå®äºããŸããã" & vbCrLf & _
"ã¢ãŒã«ã€ãå±éããæçµåŠçãŸã§èªåå®è¡ãããŸããã"
End Sub
ãã®ãã¿ãŒã³ã掻çšããããšã§ããã¢ãŒã«ã€ããã©ã«ãããã®æäœæ¥ç§»åããšããäœæ¥ããå®å šã«è§£æŸããããã¿ã³äžã€ã§ãã¹ãŠã®åŠçãå®äºããç°å¢ãæ§ç¯ã§ããŸãã
ååå®è¡æã®æšå¥šäºé
åããŠäœ¿çšããéã¯ããã¹ãçšã®å°ããªãã©ã«ãã§åäœç¢ºèªãè¡ãããšããå§ãããŸããåŠçãæåŸ éãã«åäœããããšã確èªããŠãããæ¬æ Œçãªãã¡ã€ã«ã§äœ¿çšããŠãã ããã
ãŸãšã
ä»å解説ãããã¡ã€ã«ã»ãã©ã«ãç§»åã®ååž°åŠçãã¯ããã¯ã¯ãã¢ãŒã«ã€ããã©ã«ãããã®æäœæ¥ã«ãããã¡ã€ã«åãåºãäœæ¥ãå®å šèªååããå®çšçãªææ³ã§ãããã®ãã¯ããã¯ã掻çšããããšã§ããã¢ãŒã«ã€ãããæåã§åãåºãâãã¯ãå®è¡ããšããåŸæ¥ã®2段éäœæ¥ããã¿ã³äžã€ã§å®çµããååãã¡ã€ã«ã®è¡çªåé¡ãèªåçã«ãªããŒã ã§è§£æ±ºãããå¹ççãªã·ã¹ãã ãå®çŸã§ããŸãã
ãã®ææ³ã®æ žå¿ãšãªãã®ã¯ãååž°åŠçã«ããç¡ééå±€ãžã®å¯Ÿå¿ãFileSystemObjectãæŽ»çšããå®å šãªãã¡ã€ã«æäœããããŠéè€ãã¡ã€ã«ã®èªåãªããŒã æ©èœã§ãããããã®æè¡èŠçŽ ãçµã¿åãããããšã§ãã©ãã ãæ·±ããã©ã«ãæ§é ã§ãå ã®éå±€ãä¿æãããŸãŸç§»åããåŠçå±¥æŽããã°ãã¡ã€ã«ãšããŠèªåä¿åããå ç¢ãªã·ã¹ãã ãæ§ç¯ã§ããŸãã
å®è£ æã«ç¹ã«éèŠãªã®ã¯ãé©åãªãšã©ãŒãã³ããªã³ã°ãšã»ãã¥ãªãã£èæ ®äºé ã®åŸ¹åºã§ãããã¡ã€ã«ç§»åã¯åãè¿ãã®ã€ããªãæäœã§ãããããäºåã®ãã¹ããšããã¯ã¢ããã®äœæãåŒ·ãæšå¥šããŸãã
次åã¯ãExcelãã¡ã€ã«ãã©ãã«ä¿åãããŠããŠãèªåçã«èŠªãã©ã«ãã®ãã¹ãååŸããç°å¢éäŸåãã¯ãã®äœæãã¯ããã¯ãã玹ä»ããŸããThisWorkbook.Pathãšçžå¯Ÿãã¹èšæ³ã..ããçµã¿åããããã¡ã€ã«ã®ä¿åå Žæã«é¢ä¿ãªãã©ã®PCãããåäœããæè»ãªãã¯ãã·ã¹ãã ã解説ããäºå®ã§ãããã²ãæåŸ ãã ããïŒ