エクセルでフォルダの有無を確認するため以下のコードを作成しました。
各データは県のフォルダに入っており、県の中のデータを一つのデータとして有無を確認しています。
表には県名と部位のほかにA列に連番が入るように行数(hyoug)から開始行を引いて記載しています。
序盤は問題なく作動するのですが、100番目のみ「0」と表示されてしまいます。
100番目以降は問題なく101番目から再開されます。
(以下がそのコードです。)
Sub フォルダから表巡視() '追加されたデータを探す Dim path As String Dim kenF As String Dim buiF As String Dim name As String Dim hyoug As Long Dim inthyou As Long '表のデータ数 Dim No As Long path = ThisWorkbook.path & "\" & "写真格納ファイル" & "\" & "部位" & "\" kenF = Dir(path & "*", vbDirectory) hyoug = 11 name = Cells(hyoug, 3) Do While name <> "" hyoug = hyoug + 1 name = Cells(hyoug, 3) Loop inthyou = hyoug - 11 Range("H11:H" & hyoug).Clear '確認欄削除 Dim f As Object With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(ThisWorkbook.path & "\" & "写真格納ファイル" & "\" & "部位" & "\").SubFolders Debug.Print f.path kenF = f.name buiF = Dir(f & "\" & "*", vbDirectory) Do While buiF <> "" If buiF = "." Or buiF = ".." Then buiF = Dir() buiF = Dir() End If Dim kenh As String Dim buih As String hyoug = 11 For intA = 1 To inthyou kenh = Cells(hyoug, 2) buih = Cells(hyoug, 3) If kenF = kenh And buiF = buih Then Cells(hyoug, 8) = "〇" Cells(hyoug, 1) = hyoug - 10 Exit For ElseIf intA = inthyou Then '表の項目数分確認したらセルを挿入 Dim tuika As Long tuika = hyoug + 1 inthyou = inthyou + 1 '項目数 Cells(tuika, 2) = kenF Cells(tuika, 3) = buiF Cells(tuika, 8) = "謎" No = hyoug - 11 Cells(tuika, 1) = No Else hyoug = hyoug + 1 End If Next buiF = Dir Loop Next f Cells(hyoug - 1, 1) = No '最終行記入されるように改造 End With End Sub
コード内はもちろん、複数のサイトを探したり、セルの書式設定で他の部分を探したりしたのですが、原因が一向に分からず質問させていただきました。
また、ステップインだと回数が多すぎて確認が難しいのですが、回数の多い繰り返し構文などに使えるステップインの様な機能が有りましたらご教授いただけると嬉しいです。
初心者のため効率悪い部分も多いかと思いますがよろしくお願いします。
単に数字だけ繰り返しセルに設定するコードとしてミニマム構成にするとどうなりますか?
「専用の分を作る」ということでしょうか
100番目とかではなくフォルダ構造が関係しているのではないですか?
> 回数の多い繰り返し構文などに使えるステップインの様な機能
if 条件 then stop
のようにすると、条件に一致した時に実行が中断します。
> https://teratail.com/help/question-tips#questionTips3-5-1
> 最も良いのは、現象を再現するためのミニマムなプログラムを改めて作ることです。
再現のプログラム作れるよう、技術を上げていきたいと思います。
アドアイスありがとうございます。
付属の機能に頼っていました!!
if 条件 then stop
今後トラブルシューティングなどのに使わせていただきます!
いえ、技術は現状でも可能ですよ。
あくまで問題切り分けのために必要最小限のコードを残すだけの話です。
それに、現在解決済みとされた回答のコメントでは解決したかどうか分かりません。
> https://teratail.com/help/question-tips#questionTips4-2
> 4-2. どのように解決したのかを伝えましょう
回答1件
あなたの回答
tips
プレビュー