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. Do
  29.  
  30. FileNumber = SearchFileandFolder(SDy, 2, FileNumber)
  31.  
  32. SDy = SDy + 1 'comment: 可能であれば、この動きもなくしたいところですが、本当にこのやり方でよいですか?
  33.  
  34. Loop While SDy <= FileNumber
  35.  
  36. End If
  37.  
  38. End With
  39.  
  40. End Sub
  41.  
  42. '[ファイル探索関数]→ファイルを探してハイパーリンクを貼るマクロ
  43.  
  44. 'B列の絶対パスから、中のフォルダ・ファイル一覧の絶対パスを取得する。
  45. Function SearchFileandFolder(SDy As Integer, SDx As Integer, FileNumber As Integer) As Integer
  46. '検索対象のファイル(A2)セル
  47. Dim SFile As String
  48.  
  49. '検索先のフォルダ_初期値(B2)セル→(B列)
  50. Dim NextFile As String
  51.  
  52. Dim SDirectory As String
  53.  
  54. 'ファイル・フォルダを表示する。
  55. Const SerchRuleFileandFolder = 16
  56.  
  57. With ThisWorkbook.Worksheets("sheet1")
  58.  
  59. '検索対象のファイル(A2)セル
  60. SFile = .Cells(2, 1).Value
  61.  
  62. '↓検索開始直下フォルダ・ファイルの洗い出し
  63.  
  64. SDirectory = .Cells(SDy, SDx).Value '2回目以降はここをうまいことうにゃる。[B2]セルから、検索対象フォルダの絶対パスを取得。.Stringで、文字列を取得できる。
  65. MsgBox "検索対象フォルダはコチラ:" & SDirectory '←取得したSDirectoryの値を確認
  66. NextFile = Dir(SDirectory, SerchRuleFileandFolder) '検索対象はファイル及びフォルダ
  67.  
  68. While NextFile <> "" '親フォルダの中のファイル名一覧を取得する。
  69.  
  70. '"."は華麗にスルーする
  71. If NextFile = "." Then
  72. 'Dir関数の値を次々と読みこんでゆく。
  73. NextFile = Dir
  74.  
  75. '".."は華麗にスルーする
  76. ElseIf NextFile = ".." Then
  77. 'Dir関数の値を次々と読みこんでゆく。
  78. NextFile = Dir
  79. '"NextFile=SFile"なら終了
  80.  
  81. ElseIf NextFile = SFile Then
  82. MsgBox "処理回数" & FileNumber - 1
  83. FileNumber = FileNumber + 1
  84.  
  85. '↓ハイパーリンク(コピペ)
  86. .Hyperlinks.Add Anchor:=.Cells(2, 1), _
  87. Address:=SDirectory & NextFile, _
  88. TextToDisplay:=NextFile
  89. '↑ハイパーリンク(コピペ)
  90.  
  91. '.Cells(FileNumber, 1).Value = NextFile 'ファイル名の印字
  92. '.Cells(FileNumber, 2).Value = SDirectory & NextFile & "\" '絶対パスの印字←ハイパーリンクを貼る。
  93. '.Cells(FileNumber, 3).Value = FileNumber
  94. 'MsgBox "見つかったよ!"
  95. 'Debug.Print "見つかったよ!"
  96.  
  97. '値を戻す場合は、関数名に代入してください。(関数の終わりに戻り値として返却されます)
  98. 'SearchFileandFolder
  99.  
  100. Exit Function
  101.  
  102. Else
  103. MsgBox "処理回数" & FileNumber - 1 '"."".."以外はガッチリリストアップする。
  104. FileNumber = FileNumber + 1
  105. '.Cells(FileNumber, 1).Value = NextFile 'ファイル名の印字
  106. '.Cells(FileNumber, 2).Value = SDirectory & NextFile & "\" '絶対パスの印字
  107. '.Cells(FileNumber, 3).Value = FileNumber
  108. NextFile = Dir 'Dir関数の値を次々と読みこんでゆく。
  109.  
  110. End If
  111.  
  112. 'Cells -> Debug.Printに変更
  113. Debug.Print NextFile 'ファイル名の印字
  114. Debug.Print SDirectory & NextFile & "\" '絶対パスの印字←ハイパーリンクを貼る。
  115. Debug.Print FileNumber 'Dir関数の値を次々と読みこんでゆく。
  116.  
  117.  
  118. Wend
  119.  
  120. SearchFileandFolder = FileNumber
  121. '↑検索開始直下フォルダ・ファイルの洗い出し
  122. End With
  123.  
  124. MsgBox "Functionマクロを実行しました"
  125.  
  126. End Function
  127.  
  128. 'comment: サンプル用の関数を定義しましたので動きを確認される場合は、 SayHello内にカーソルを置いて
  129. 'comment: F5キーを押してください
  130.  
  131. ' Hello文字列を返す関数
  132. Function GetHello() As String
  133. GetHello = "Hello"
  134. End Function
  135.  
  136. ' GetHello()から文字列を取得し、発言する手続
  137. Sub SayHello()
  138. Dim HelloString As String
  139. HelloString = GetHello
  140. Debug.Print HelloString
  141. End Sub
  142.  
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/rWfWYN/prog.vb (2,4) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (4,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (5,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (6,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (7,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (9,15) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (10,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (12,9) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (14,19) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (17,11) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (28,15) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (30,23) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (32,16) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (34,17) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (36,15) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (38,13) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (40,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (45,9) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (47,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (50,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (52,8) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (55,10) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (57,10) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (60,11) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (64,23) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (65,19) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (66,21) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (68,18) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (71,19) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (73,29) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (76,23) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (78,29) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (81,23) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (82,27) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (83,31) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (86,22) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (100,25) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (102,21) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (103,27) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (104,31) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (108,29) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (110,23) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (113,22) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (114,22) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (115,22) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (118,17) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (120,32) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (122,13) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (124,11) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (126,13) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (132,9) : Error VBNC30203: Not valid as identifier.
/home/rWfWYN/prog.vb (132,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.5714980
stdout
Standard output is empty