Accessから抽出したCSVデータ処理用関数メモ
*まだ実際のCSVで作業してないので、作業後に更新する予定。
Accessから抽出したCSVデータを、フォルダ階層をきれいに抽出したいときに使える関数をメモしておきます。
やりたいこと:
・第三階層までのフォルダ一覧を抽出したい。
・重複フォルダは削除したい。
(C:\aaaのデータがあっても、以降にC:\aaa\bbbがあればC:\aaaは抽出しない)
・ファイル名までは今回抽出しない。
期待結果:
第一階層フォルダ,第二階層フォルダ,第三階層フォルダ
C,eee
,aaa
,bbb,ccc
フォルダパス,フォルダ名,ファイル名,拡張子,....
C:\,,hogehoge,txt,....
C:\,aaa,,,....
C:\,bbb,,,....
C:\,eee,,,....
C:\aaa\,,test,xlsx,....
C:\bbb\,,hoge,word,....
C:\bbb\,ccc,,,....
C:\bbb\ccc\,,data,dwg,....
※ちなみにファイル名欄にもフォルダ名欄にもデータがないことはあり得ない前提。
マクロ動作イメージ:
1.フォルダ名欄にデータが
あるとき→2へ
ないとき→3へ
2.以降のフォルダパス欄にファイルパス+フォルダ名が
あるとき→重複する為不要なデータ
ないとき→フォルダのみでファイルが入ってない状態。ファイルパス+フォルダ名の状態で取得。
3.ファイル名欄にデータが
あるとき→4へ
ないとき→ありえない
4.以降のファイルパス欄にさらに深い階層が
あるとき→重複するので不要
ないとき→取得。
実際の計算式:
=IF(E12<>"",IF(ISERROR(VLOOKUP(D12&E12&"\",D13:D19,1,FALSE))=FALSE,"",D12&E12&"\"),IF(F12<>"",IF(ISERROR(VLOOKUP(D12&"?*",D13:D19,1,FALSE))=FALSE,"",D12),"ありえない"))
※凡例:
D11:フォルダパス欄
E11:フォルダ名欄
F11:ファイル名欄
②重複データの削除
データタブ-データツールの重複の削除
③円マークがあるごとにセルを区切り
データタブ-区切り位置
④重複する項目(C:\eeeのあとにC:\aaaがきたときに、後者C:\部分の削除)
③の第一階層、第二階層に、それぞれ上と同じデータがあったら削除するマクロを実行する。
Sub Sample2()
Dim c As Range, i As Long, d As String
For Each c In Selection
i = i + 1
If i = 1 Then
d = c.Value
Else
If d <> c.Value Then
d = c.Value
Else
c.Value = ""
End If
End If
Next c
End Sub