質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

1533閲覧

エクセルマクロ(VBA)親フォルダと子フォルダの一覧からフルパスを調べる

ruikahiromi

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2019/09/09 05:48

親フォルダ一覧がF列
子フォルダ一覧がG列のデータがあります。

最上位のフォルダは
ルートという名前で固定です。
ヘッダは1列目がヘッダになります。
2列目からデータになります。

J列にフルパスを自動でマクロで入れたいです。

シート名は:マクロ

頭がこんがらがってしまい、中々上手く行きません。
分かり易い、良い方法はないでしょうか?

Sub pathFolder()

Dim mcbook As Workbook Set mcbook = ThisWorkbook Const oya As String = "ルート" Dim stock() As String MaxRow = Cells(Rows.Count, 1).End(xlUp).Row MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column ReDim Preserve stock(MaxRow) For i = 2 To MaxRow stock(i) = concatenationFolder(i) Next i For i = 2 To MaxRow Call concatenationFolder2(i, stock) Next i

MsgBox "終了"

End Sub

Function concatenationFolder(ByVal i) As String

Dim childFolder As String childFolder = "" Dim oyaFolder As String oyaFolder = "" Dim mcbook As Workbook Set mcbook = ThisWorkbook Dim fullPath As String fullPath = "" childFolder = mcbook.Worksheets("マクロ").Cells(i, "G") oyaFolder = mcbook.Worksheets("マクロ").Cells(i, "F") If childFolder <> "ルート" Then fullPath = "\" & oyaFolder & "\" & childFolder Cells(i, "J") = fullPath Else fullPath = "ルート" Cells(i, "J") = "ルート" End If concatenationFolder = mcbook.Worksheets("マクロ").Cells(i, "J")

End Function

Function concatenationFolder2(ByVal i, ByVal stock)

Dim childFolder As String childFolder = "" Dim oyaFolder As String oyaFolder = "" Dim mcbook As Workbook Set mcbook = ThisWorkbook Dim fullPath As String fullPath = "" MsgBox stock(i) Dim root As String root = Left(stock(i), InStr(2, stock(i), "\")) root = Replace(root, "\", "") MsgBox root Dim j As Integer j = 0 MaxRow = Cells(Rows.Count, 1).End(xlUp).Row MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column If root <> "" Then For j = i To MaxRow childFolder = mcbook.Worksheets("マクロ").Cells(j, "G") If root = childFolder Then oyaFolder = mcbook.Worksheets("マクロ").Cells(j, "F") fullPath = "\" & oyaFolder & "\" & fullPath Cells(i, "J") = fullPath End If Next j End If

End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

J列にフルパスを自動でマクロで入れたいです。
頭がこんがらがってしまい、中々上手く行きません。
分かり易い、良い方法はないでしょうか?

頭の中だけで考えて、分かり難いなら、
段階ごとに途中経過をシート上に書き込んでいけば、
目視で結果を見ながらできますよね?

VbAでとか配列でとか、したら処理が速くなるのだろうという感じで
マクロにしたいのでしょうか?
自動でできれば、手動でやった場合より、
間違えないし、
処理も速くなるわけなので、
「一瞬で」よりも、
「自分で作れる」を優先した方が結果が得られると思いますが、
いかがでしょうか?

まずは、シート上のイメージのびふぉー&あふたー
を示していただけると、も少しロジック的な話が出来ると思いますが?

投稿2019/09/09 07:45

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どのような結果を期待しているのか、添付のような画像を提示していただけませんでしょうか。
サンプル画像

投稿2019/09/09 07:13

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問