fork download
  1. '[Main関数]
  2. Sub Main()
  3. 'Main関数で利用する変数の型を定義する。
  4. Dim FileNumber As Integer 'comment: ← 使用用途を明確にする変数名をつけるように癖をつけてください。これも混乱の元です。
  5. Dim SDy As Integer 'comment: ← SDyってなんですか?わかりやすい名前にしてください。
  6. Dim SerchFileandFolder As Integer 'comment: 関数名と同じ名前の変数名は定義しないでください。混乱の元です。
  7. Dim SDirectory As String
  8.  
  9. FileNumber = 2
  10. SDy = 2
  11.  
  12. With ThisWorkbook.Worksheets("sheet1")
  13. 'SDirectoryにはB列の絶対パスを代入する。(初期値はB2セル)→★要配列への移行
  14. SDirectory = .Cells(SDy, 2).Value
  15.  
  16. 'SDirectoryに空欄が見つかったら終了。→★要配列への移行
  17. If SDirectory <> "" Then
  18.  
  19. 'SDy=FileNumberまで再帰処理を実行する。→★要配列への移行
  20. 'FileNumber = SearchFileandFolder(SDy, 2, FileNumber) '●応急処置
  21. '対象フォルダにファイルが1つのとき→Filenumber=2←アウトくさい
  22. '対象フォルダにファイルが2つのとき→Filenumber=3←微妙
  23. 'SDy = SDy + 1 '●応急処置
  24. 'For SDy = 2 To FileNumber 'FileNumber 'SDyからFileNumberまで繰り返し
  25. 'FileNumber = SearchFileandFolder(SDy, 2, FileNumber)
  26. 'Next SDy
  27.  
  28. 'comment: ========================================================
  29. 'comment: 下の記述ですが、B2,B3,B4,B5,B6と行移動し続けていくにつれてCell値を取得してから
  30. 'comment: SearchFileandFolderにファイルパスを渡すようにしていったらどうですかね?
  31. 'comment: セルの値を取得する方法 Cell(行番号, 列番号).Value
  32. Do
  33.  
  34. FileNumber = SearchFileandFolder(SDy, 2, FileNumber)
  35.  
  36. SDy = SDy + 1 'comment: 可能であれば、この動きもなくしたいところですが、本当にこのやり方でよいですか?
  37.  
  38. Loop While SDy <= FileNumber
  39. 'comment: ========================================================
  40.  
  41. End If
  42.  
  43. End With
  44.  
  45. End Sub
  46.  
  47. '[ファイル探索関数]→ファイルを探してハイパーリンクを貼るマクロ
  48.  
  49. 'B列の絶対パスから、中のフォルダ・ファイル一覧の絶対パスを取得する。
  50. Function SearchFileandFolder(SDy As Integer, SDx As Integer, FileNumber As Integer) As Integer
  51. '検索対象のファイル(A2)セル
  52. Dim SFile As String
  53.  
  54. '検索先のフォルダ_初期値(B2)セル→(B列)
  55. Dim NextFile As String
  56.  
  57. Dim SDirectory As String
  58.  
  59. 'ファイル・フォルダを表示する。
  60. Const SerchRuleFileandFolder = 16
  61.  
  62. With ThisWorkbook.Worksheets("sheet1")
  63.  
  64. '検索対象のファイル(A2)セル
  65. SFile = .Cells(2, 1).Value
  66.  
  67. '↓検索開始直下フォルダ・ファイルの洗い出し
  68.  
  69. SDirectory = .Cells(SDy, SDx).Value '★2回目以降はここをうまいことうにゃる。[B2]セルから、検索対象フォルダの絶対パスを取得。.Stringで、文字列を取得できる。
  70. MsgBox "検索対象フォルダはコチラ:" & SDirectory '←取得したSDirectoryの値を確認
  71. NextFile = Dir(SDirectory, SerchRuleFileandFolder) '検索対象はファイル及びフォルダ
  72.  
  73. While NextFile <> "" '親フォルダの中のファイル名一覧を取得する。
  74.  
  75. '"."は華麗にスルーする
  76. If NextFile = "." Then
  77. 'Dir関数の値を次々と読みこんでゆく。
  78. NextFile = Dir
  79.  
  80. '".."は華麗にスルーする
  81. ElseIf NextFile = ".." Then
  82. 'Dir関数の値を次々と読みこんでゆく。
  83. NextFile = Dir
  84. '"NextFile=SFile"なら終了
  85.  
  86. ElseIf NextFile = SFile Then
  87. MsgBox "処理回数" & FileNumber - 1
  88. FileNumber = FileNumber + 1
  89.  
  90. '↓ハイパーリンク(コピペ)
  91. .Hyperlinks.Add Anchor:=.Cells(2, 1), _
  92. Address:=SDirectory & NextFile, _
  93. TextToDisplay:=NextFile
  94. '↑ハイパーリンク(コピペ)
  95.  
  96. '.Cells(FileNumber, 1).Value = NextFile 'ファイル名の印字
  97. '.Cells(FileNumber, 2).Value = SDirectory & NextFile & "\" '絶対パスの印字←ハイパーリンクを貼る。
  98. '.Cells(FileNumber, 3).Value = FileNumber
  99. 'MsgBox "見つかったよ!"
  100. 'Debug.Print "見つかったよ!"
  101.  
  102. '値を戻す場合は、関数名に代入してください。(関数の終わりに戻り値として返却されます)
  103. 'SearchFileandFolder
  104.  
  105. Exit Function
  106.  
  107. Else
  108. MsgBox "処理回数" & FileNumber - 1 '"."".."以外はガッチリリストアップする。
  109. FileNumber = FileNumber + 1
  110. '.Cells(FileNumber, 1).Value = NextFile 'ファイル名の印字
  111. '.Cells(FileNumber, 2).Value = SDirectory & NextFile & "\" '絶対パスの印字
  112. '.Cells(FileNumber, 3).Value = FileNumber
  113. NextFile = Dir 'Dir関数の値を次々と読みこんでゆく。
  114.  
  115. End If
  116.  
  117. 'Cells -> Debug.Printに変更
  118. Debug.Print NextFile 'ファイル名の印字
  119. Debug.Print SDirectory & NextFile & "\" '絶対パスの印字←ハイパーリンクを貼る。
  120. Debug.Print FileNumber 'Dir関数の値を次々と読みこんでゆく。
  121.  
  122.  
  123. Wend
  124.  
  125. SearchFileandFolder = FileNumber
  126. '↑検索開始直下フォルダ・ファイルの洗い出し
  127. End With
  128.  
  129. MsgBox "Functionマクロを実行しました"
  130.  
  131. End Function
  132.  
  133. 'comment: ==================================================================================
  134. 'comment: 解説用関数定義
  135. 'comment: サンプル用の関数を定義しましたので動きを確認される場合は、 SayHello内にカーソルを置いて
  136. 'comment: F5キーを押してください
  137.  
  138. ' Hello文字列を返す関数
  139. Function GetHello() As String
  140. GetHello = "Hello"
  141. End Function
  142.  
  143. ' GetHello()から文字列を取得し、発言する手続
  144. Sub SayHello()
  145. Dim HelloString As String
  146. HelloString = GetHello
  147. Debug.Print HelloString
  148. End Sub
  149. 'comment: ==================================================================================
  150.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Visual Basic.Net Compiler version 0.0.0.5914 (Mono 2.4.2 - r)
Copyright (C) 2004-2008 Rolf Bjarne Kvinge. All rights reserved.


/home/DlOxQN/prog.vb (2,4) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (4,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (5,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (6,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (7,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (9,15) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (10,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (12,9) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (14,19) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (17,11) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (32,15) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (34,23) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (36,16) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (38,17) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (41,15) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (43,13) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (45,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (50,9) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (52,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (55,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (57,8) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (60,10) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (62,10) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (65,11) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (69,23) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (70,19) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (71,21) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (73,18) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (76,19) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (78,29) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (81,23) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (83,29) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (86,23) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (87,27) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (88,31) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (91,22) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (105,25) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (107,21) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (108,27) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (109,31) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (113,29) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (115,23) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (118,22) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (119,22) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (120,22) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (123,17) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (125,32) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (127,13) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (129,11) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (131,13) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (139,9) : Error VBNC30203: Not valid as identifier.
/home/DlOxQN/prog.vb (139,9) : Error VBNC30041: Too many errors.
Exception of type 'vbnc.TooManyErrorsException' was thrown.
  at vbnc.Report.ShowMessage (Boolean SaveIt, vbnc.Message Message) [0x00080] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Report.vb:342 
  at vbnc.Report.ShowMessage (Messages Message, Span Location, System.String[] Parameters) [0x00000] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Report.vb:259 
  at vbnc.Report.ShowMessage (Messages Message, System.String[] Parameters) [0x00054] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Report.vb:269 
  at vbnc.Compiler.Compile () [0x005a3] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Compiler.vb:651 
  at vbnc.Compiler.Compile (System.String[] CommandLine) [0x00057] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Compiler.vb:279 
  at vbnc.Main.Main (System.String[] CmdArgs) [0x0000f] in /var/tmp/portage/dev-lang/mono-basic-2.4.2/work/mono-basic-2.4.2/vbnc/vbnc/source/General/Main.vb:55 
Failed compilation took 00:00:00.5825830
stdout
Standard output is empty