ファイル名をエクセルにリスト化するマクロの応用

このQ&Aのポイント
  • フォルダ内の名前や作成日等をエクセルにリスト化するマクロの応用方法を教えてください。
  • エクセルのA列に複数個のフォルダのパスを入力し、それぞれのフォルダ内の情報を別シートに一気にリスト化したいです。
  • プログラミングに関する知識はほとんどありません。具体的な入力方法を教えてください。
回答を見る
  • ベストアンサー

ファイル名をエクセルにリスト化するマクロの応用

ファイル名をエクセルにリスト化するマクロの応用 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)を エクセルにリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 プログラミングに関する知識はほとんどありません… 具体的に、どこに何を入力するのかを教えていただけると嬉しいです。 お手数をおかけし、すいません。 ※以下は以前nicotinismさんに回答いただいたマクロを 参考にさせていただいております。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.6

myRangeです。 3時間ほど格闘したということですので やる気があるとみて、回答させていただきませう。 先ず、注意点(確認事項)あり。 ------------------------------------- >Dセルにシリアル番号の項目を追加し とありますが、回答1のお礼の再質問には >A列:ディレクトリー名 >B列:シリアル番号 >C列:ファイルリストが作成されているか否か このようにB列が"シリアル番号"になってますよ!? 細かいことを、、、と、思うかもしれませんが、 プログラムというのは仕様に一貫性がないと書けるものではありません。 ま、自分でコードを修正加筆できれば別ですが。。 ●本当にD列に追加した値をシート名にしていいんですね?    今回もコピペすること! '-------------------------------------------------------- Sub MakeFileList()  Dim R As Long  Dim NewSheet As Worksheet    For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row   If Sheets("Sheet1").Cells(R, "B") <> "" And _     Sheets("Sheet1").Cells(R, "C") <> "○" Then       If Dir(Sheets("Sheet1").Cells(R, "A").Value, vbDirectory) <> "" Then         On Error Resume Next       Set NewSheet = Sheets(Sheets("Sheet1").Cells(R, "D").Value)       If Err.Number = 0 Then         NewSheet.Cells.Clear       Else         Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count))         NewSheet.Name = Sheets("Sheet1").Cells(R, "D").Value       End If     On Error GoTo 0            Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0)       NewSheet.Range("A1:D1") = Array("No", "作成日", "更新日", "ファイル名")       NewSheet.Columns("A:D").AutoFit       Sheets("Sheet1").Cells(R, "C").Value = "○"     Else       Sheets("Sheet1").Cells(R, "C").Value = "フォルダエラー"     End If      End If  Next R  MsgBox "終了しました" End Sub '--------------------------------------------------------- ●回答しながら感じたことを一言● 質問者には今回のコードはちょと難しいのではと思えます。 もしこれがVBAの勉強ということなら このような再起処理を使った小難しい例題ではなく ふつうの処理から勉強すべきだと考えます。 なぜ? このような処理をしようと思ったのでせうか? 以上です。    

doji26
質問者

お礼

何度もありがとうございました。 普段はプログラミングに触れる機会がなく、 大学時に少し基礎をかじった程度で 突然フォルダの管理が必要になったため、 質問させていただきました。 最後まで丁寧に 教えていただき、とても助かりました。 ほんとうにありがとうございました。

その他の回答 (6)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.7

続けて、myRangeです。 言い忘れあり。 ●リスト作成 > フォルダー更新 > 再リスト作成 この場合、既に作成されたシートを削除すると シートの順番(左からの順番)が変わってしまうので 順番が変わらないようにするために、 回答では、シートを削除しないで、同名シートに上書きするようにしてあります。 以上です。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

myRangeです。ちょと遅くなりましたが。。。 (1) B1=空白 → 何もしない (2) B1=値あり → C1=○_ → 何もしない (3) B1=値あり → C1=空白 → リスト作成 → C1に○をセット   上記をB列最終データまで繰り返す。 ●転記ミスがないように必ずコピペすること!! '--------------------------------------------------------- Sub MakeFileList()  Dim R As Long  Dim NewSheet As Worksheet    For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row   If Sheets("Sheet1").Cells(R, "B") <> "" And _     Sheets("Sheet1").Cells(R, "C") <> "○" Then         If Dir(Sheets("Sheet1").Cells(R, "A").Value, vbDirectory) <> "" Then      Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count))      Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0)      NewSheet.Range("A1:D1").Value = Array("No", "作成日", "更新日", "ファイル名")      NewSheet.Columns("A:D").AutoFit      Sheets("Sheet1").Cells(R, "C").Value = "○"     Else      Sheets("Sheet1").Cells(R, "C").Value = "フォルダエラー"     End If        End If  Next R  MsgBox "終了しました" End Sub '--------------------------------------------------------- Function FileList(NewSheet As Worksheet, trgDir As String, fCnt As Long)   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object      Set objFs = CreateObject("Scripting.FileSystemObject")     Set objDir = objFs.Getfolder(trgDir)     Set objFile = objDir.Files     With NewSheet     For Each objFile In objDir.Files       fCnt = fCnt + 1       .Cells(fCnt, 1).Offset(1, 0) = fCnt       .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated       .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified       .Cells(fCnt, 4).Offset(1, 0) = objFile.Path     Next objFile   End With      For Each objDir In objDir.SubFolders     Call FileList(NewSheet, objDir.Path, fCnt)   Next objDir End Function '------------------------------------------- ●フォルダーがNot Foundの場合には、シートは増やさずに、  C列に”フォルダエラー"と表示するようにした。  "フォルダエラー"と表示された場合は  A列に正しいフォルダー名を入れ再処理のこと ●B列ありで、A列空白、はないということなのでA列空白チェックは省略  もし、その条件がある場合は自分でやってみること ●フォルダーもファイルもNormal(普通のもの)とする   ▲▲少しずつでもいいので自分でも勉強すること。。(^^;;; 以上です。

doji26
質問者

お礼

myRangeさん、思い描いた通りの結果が得られました。 ありがとうございました。 何度もすいませんが、 また問題が発生してしまいました… Dセルにシリアル番号の項目を追加し、 新しく作られるシート名がシリアル番号と同じになるように、 NewSheet.Name = Sheets("Sheet1").Cells(R, "D") という命令を追記しました。 ネットで調べて、正常に動くようになるまで 3時間もかかりましたが…汗 やっと正常に出力されるようになりました。 ここからが問題なのですが、 リストを作成した後に、 フォルダを更新し、 また新たにリストを作成したいときに、 ○を消して再度マクロを実行させると、 同じ名前のシートがあるため、作成されません。 事前にDセルのシリアル名と同じシートがあったら削除をして 新たに作成を始めるようにすることは 可能でしょうか。 いつもお疲れのところ 大変恐縮ですが、 教えてくださいお願いします。

回答No.4

言いたかないがここで勉強したことは何の役にも立ってないの?         ↓ http://qanda.rakuten.ne.jp/qa6108578.html そのものずばりの解答だけを求めていてもしかたないですよ。 質問でなくコード作成依頼になってます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

またまた、myRangeです。 乗りかかった船ですから今回までは面倒みませう。 が、自分でもちゃんと●勉強する●、という条件つきですが。。(^^;;; (1) B1=空白 → 何もしない (2) B1=値あり → C1=○_ → 何もしない (3) B1=値あり → C1=空白 → リスト作成 → C1に○をセット   上記をB列最終データまで繰り返す、ということでいいですね? 今から帰宅しますので回答は自宅から21時位(遅くとも今夜中)までにはアップしておきます。 以上です。  

doji26
質問者

お礼

その通りです。 本当にすいません… よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

近日にも同じ質問したのでは。回答を締め切ってないらしいが、一言お礼や判らないならコメントぐらいすべきだ。 ヒントなどもらっても類推できないようでは、何度質問してみても仕方がないと思う。 ーー A列にはフォルダ名だけ入力されるとして Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row '最下行の行番号 MsgBox d For i = 1 To d fdn=Worksheets("Sheet1").Cells(i, "A") '処理 MsgBox fdn Next i End Sub これを事件してご覧。各行のフォルダ名が表示されるはず。 この'処理の段階でフォルダ名は文字列fnとして捉えられている。 そこでこのフォルダ名fdnを上記の関数(Function()のfileList)の引数として、あたえて実行させる 。 コードは fileList(fdn) この中にセルへのセットのコードが入っているのでそのまま使える。 fCntは書き出し用の行ポインターなので、続けて使っていけば良い。 シートをフォルダごとに分けるとかすると複雑になるからこのぐらいで我慢して。 上記はヒントなんでやって見るとエラーが出たりするかもしれない。 その場合はこの質問の中で行ってください。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

あせっているのは分からんでもないですが、 同じ質問をするなら、前のは締めて再質問するのがマナーです。(^^;;; http://okwave.jp/qa/q6112995.html と、まあ、それは置いといて、 前の質問に回答してますのでお試しあれ。 以上です。

doji26
質問者

お礼

以後気をつけます。すいませんでした… ついでにといっては失礼ですが、 もう一つ教えてください(><) 今回、作成していただいた ファイルリスト作成マクロを使って、 下に示す条件のもと自動処理をしたいと思っています。    A   B C 1  ディ  α   ○                           2  ディ  β    3 A列:ディレクトリー名 B列:シリアル番号 C列:ファイルリストが作成されているか否か    処理が完了していれば○、それ以外は空欄 1.エクセルの表で、B1セルが空白か否か 2.B1セルが 空白の場合→終了 シリアル番号が記入してある場合→C1セルが空白か否か と同様の処理を) 空白の場合→ファイルリスト作成マクロ起動       →B2セルへ(再び1と同様の処理を) 4.Bセルが空欄になるまで繰り返す ※Bセル(シリアル番号)が入力されているときは、 Aセル(ディレクトリ名)も記入されています。 説明がへたくそですいません。 もしわかりましたら 教えてください。よろしくお願いします。

関連するQ&A

  • 複数のフォルダ内の名前や作成日等をリスト化する方法

    複数のフォルダ内の名前や作成日等をリスト化する方法 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)をリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

  • Excelのマクロで条件を指定して、自動処理する方法。

    Excelのマクロで条件を指定して、自動処理する方法。 こんにちは。 条件を指定して自動処理したいのですが、 どのようにしたらよいかわからず困っています。 よろしくお願いします。     A    B 1   α   ○                           2   β 3 エクセルの表で、A1セルが空白か否か A1セルが 空白の場合→終了 記入してある場合→B1セルが空白か否か B1セルに○が 記入してある場合→A2セルへ 空白の場合→「ファイル情報リスト作成マクロ(既に作成済み)」を使ってリストを自動作成          →リスト作成が終わったらB1セルに○印を付ける          →A2セルへ A2セルが空白か否か…(繰り返し) 「ファイル情報リスト作成マクロ」は、文字数の許す限りで以下に示します。 こちらも相談箱を参考にさせて頂いたものです。 「ファイル情報リスト作成マクロ」 Sheet1 の A1 セルに調べたいフォルダ名を入力して 標準モジュールに貼り付けて、マクロ makeFileList を実行 Sheet2にリスト出力 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"

  • エクセルの簡単なマクロ機能を追加したいのです

    既存のエクセルマクロ(Sub チェック()以下です)に下記の内容のマクロを付け足したいです。 教えていただけないでしょうか。 付け足したい条件です:  Sheet2のC列に 0  があれば  Sheet1のB列に 愛 と([太字]でセルの背景色を[灰色25%]にして)入れたいです 恐れ入りますがご存じの方がいらっしゃりましたら教えていただきたく何卒よろしくお願いいたします。 ----------------------------------------------- Sub チェック() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c1 As Range Dim c2 As Range Dim myCt As Long Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(Rows.Count, "A").End(xlUp)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(Rows.Count, "A").End(xlUp)) For Each c1 In myRange1 myCt = 0 For Each c2 In myRange2 If c2.Value = c1.Value Then If c2.Offset(, 1).Value = "" Then c1.Offset(, 1).Interior.ColorIndex = 3 Else c1.Offset(, 1).Value = c2.Offset(, 1).Value End If myCt = myCt + 1 End If Next c2 If myCt > 1 Then c1.Offset(, 1).Interior.ColorIndex = 10 Next c1 Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub

  • Excelのマクロを教えてください。

    マクロの超初心者ですが、よろしくお願いします。 サンプルからですが、 Sub 検索() myWord = Range("C2").Value Set myData = Range("A5:D155") Set myRng = myData.Find(myWord) If Not myRng Is Nothing Then Application.Goto Cells(myRng.Row, 1), True End If End Sub Sub コピー()   'Set myData = Range("A5:D155") Set motorng = Application.Intersect(myData, ActiveCell.EntireRow) Set sakiRng = Sheets("抽出").Range("B65535").End(xlUp).Offset(1) motorng.Copy sakiRng End Sub 以上のうち、「コピー」の部分をについて質問ですが、「検索」を使わないで、元Sheetのクリックしたセルのレコード全体を取得してSheets("抽出")にコピーする方法はないでしょうか。 上記のマクロでは一旦「検索」を行った後では「検索」を実行しなくてもクリックしたセルのレコード全体をSheets("抽出")にコピー出来ましたので、検索の部分を削除したいのですが。 説明が下手でスミマセンが何卒よろしくお願いします。

  • エクセルのマクロについて教えてください

    お世話になっております。 エクセルのマクロについて教えていただきたいのですが、 サンプルのファイルをこちらにアップしたのでよろしければご覧になってください。 http://kie.nu/yPV 質問したいことは、列Iに、各行の黄色いセルの数を表示させるマクロを作りたいのですが 途中まで何とかわかったのですがどうもうまくいきません。。 行11から各行にひとつずつ、黄色いセルが含まれていますが、その黄色いセルの中の数字を列Iに表示させたいです。行にデータがある限り、下までずっとです。 以下、途中までわかったマクロです。 Sub 黄セル値Copy() Const TgLeftUp = "A3" '<--対象範囲左上セル指定 Dim Rng As Range Dim Target As Range Set Target = Range(TgLeftUp, Cells(Rows.Count, _ Range(TgLeftUp).Column)) For Each Rng In Target.Resize(, 2) If Rng.Interior.ColorIndex = 6 Then If Rng.Column = Target.Column Then Rng.Offset(, 3).Value = Rng.Value Else Rng.Offset(, 2).Value = Rng.Value End If End If Next MsgBox "値 貼り付け完了。", vbInformation Set Target = Nothing End Sub でもこれを貼り付けてもうまくいきません。 正しいマクロを教えていただけないでしょうか?? 宜しくお願いいたします。 ※いつも、私の質問に対してまるで回答になってないような、ふざけた言葉を書き込んでは消してる方が一名だけいらっしゃいます。確か、鳥の写真をマイページに載せてる方です。 都度違反報告はしていますが、質問の趣旨に反する回答をされてる方一名、絶対にやめてください。

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • エクセルのマクロで

    http://oshiete1.goo.ne.jp/qa727693.htmlの質問の回答を参考に Private Sub CommandButton1_Click() Dim Meibo As Worksheet Dim Kojin As Worksheet Dim Rng As Range Dim R As Range Set Meibo = Worksheets("名簿") ' Set Kojin = Worksheets("表") ' Set Rng = Meibo.Range("A2:A51") ' For Each R In Rng Kojin.Range("L4").Value = R.Value ' Kojin.PrintOut Next R Set Meibo = Nothing Set Kojin = Nothing End Sub というマクロを組み、コマンドボタンのクリックで名簿ひとりひとりの名前を表に印刷する事が出来ました。 ただ名簿の範囲 A2:A51が常に埋まってるわけでなく、一人、二人 少ないことがあるのですが、その状態でマクロを実行すると名前が 空欄の表も印刷されてしまいます。 そこで、「範囲はA2:A51で空欄は印刷しない」というようなコマンド設定は出来ないものでしょうか? 印刷するたびに、A2:A51の範囲を変えてやるしかないんですか? まだまだマクロについては勉強不足なもので、よろしくご指導のほど 願います。

  • マクロFind検索で見つからなかった時の対処

    エクセル2013です 以下のコードを作成しましたが .Rowが色で塗られ 「型が違います」でERRになります。 .Columnの方はERRでなく なぜ.Rowの方がERRなのでしょうか? よろしくお願いします。 Dim 検索行番号 As Range Dim 判定列番号 As Range Dim 検索列番号1 As Range Dim 検索列番号2 As Range Set 検索行番号 = Rows(1).Find("みかん").Column If 検索行番号 Is Nothing Then MsgBox "みかんが有りません。" End If Exit Sub Set 判定列番号 = Rows(1).Find("りんご").Column If 判定列番号 Is Nothing Then MsgBox "りんごが有りません。" End If Exit Sub Set 検索列番号1 = Range("B:B").Find("大箱").Row If 検索列番号1 Is Nothing Then MsgBox "大箱が有りません。" End If Exit Sub Set 検索列番号2 = Range("B:B").Find("小箱").Row If 検索列番号2 Is Nothing Then MsgBox "小箱が有りません。" End If Exit Sub

  • 作ったマクロに不備があるかどうか分かりません

    様々なサイトを参考にして、自分でマクロを作り、うまく動作したまではいいのですが、不勉強で不備があるかどうか自分では判断できません…。 どなたか不備を指摘してはいただけないでしょうか。 内容:指定したフォルダ内のフォルダ名を、一行ずつ間を空けて書き出す。 Public Sub make_FolderList_02() ' FileSystemObjectを作成する。 Dim Obj As Object Set Obj = CreateObject("Scripting.FileSystemObject") ' フォルダ名をシート上に出力する為のカウンタ Dim cnt As Long cnt = 0 ' 「C:\Sample」フォルダ配下に存在するフォルダを一つずつ参照する。 Dim f As Object For Each f In Obj.GetFolder("C:\Users\test\Desktop\test").SubFolders ' フォルダ名をシート上に出力する。 Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(f).Name cnt = cnt + 1 ' 空白セルを出力する。 Range("A1").Offset(cnt, 0).Value = Null cnt = cnt + 1 Next f Set f = Nothing ' 別のフォルダを書き出す Dim a As Object For Each a In Obj.GetFolder("C:\Users\test\Desktop\nyannko").SubFolders ' フォルダ名をシート上に出力する。 Range("A1").Offset(cnt, 0).Value = Obj.GetFolder(a).Name cnt = cnt + 1 Range("A1").Offset(cnt, 0).Value = Null cnt = cnt + 1 Next a Set a = Nothing ' オブジェクトを破棄する。 Set Obj = Nothing End Sub ここでは、2つのディレクトリを書き出していますが、実際には、6~7つ書き出す予定です。 また、参照先を共有フォルダにした場合、過剰な負荷が掛からないかどうかも、教えていただけると嬉しいです。 大変無駄の多い内容だとは思いますが、ご指導のほどよろしくお願いいたします。

  • マクロで質問です

    下記のようなマクロで現在はマクロコード内にフォルダのアドレスを書いていますが これをダイアログを開いてフォルダを選択できるようにするには どうすればよいでしょうか? Sub Sample10()    Call FileSearch("V:\個人\飯塚\マクロ\RawData2") End Sub Sub FileSearch(Path As String) Application.ScreenUpdating = False    Dim FSO As Object, Folder As Variant, File As Variant    Set FSO = CreateObject("Scripting.FileSystemObject")    For Each Folder In FSO.GetFolder(Path).SubFolders        Call FileSearch(Folder.Path)    Next Folder    For Each File In FSO.GetFolder(Path).Files        If File.Name = "RawData" Then Workbooks.Open fld & File, Format:=2 Range("B1:B180").Select Application.CutCopyMode = False Selection.Copy Application.DisplayAlerts = False ActiveWindow.Close Application.DisplayAlerts = True Range("f2").Select ActiveSheet.Paste ActiveSheet.Next.Activate End If    Next File End Sub

専門家に質問してみよう