アプリ版:「スタンプのみでお礼する」機能のリリースについて

とある、フォルダのファイル名を書き出す記述を、とあるサイトを参考にしながら、
下記にて作成しましたが、
いつも、書き出すファイルが一つ不足してしまいます。
全てのファイルを書き出すためにどのように修正すればよいか、教えていただけないでしょうか。
よろしくお願いします。

Sub Sample()
Dim buf As String, n As Long
ReDim Files(0) ''動的配列を宣言します
buf = Dir("C:\test\*.xls")

Do While buf <> ""
n = UBound(Files) ''現在の大きさ(要素数)を調べます
ReDim Preserve Files(n + 1) ''動的配列の大きさを1つ増やします
Files(n + 1) = buf ''ファイル名を格納します
buf = Dir()
Loop

Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files))).Value = WorksheetFunction.Transpose(Files())

End Sub

A 回答 (1件)

>書き出すファイルが一つ不足してしまいます。



Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files))).Value
   ↓
Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files) + 1)).Value

配列は0スタートですから、一つ足りません。

ただ、書法そのものから言うと、私なら、以下のように書きます。
書き換えた理由はありますが、人の感性の問題で、レベルの低い議論に発展することがありますから、あえて説明は省いておきます。基本的なコンセプトは、コードの各行は短くするということです。

'//
Sub SampleR()
 'No. 9010573
 Dim buf As String, n As Long
 Dim Files() As Variant
 Const myPATH As String = "C:\test\*.xls"
 buf = Dir(myPATH, vbNormal)
 
 Do While buf <> ""
  ReDim Preserve Files(n)
  Files(n) = buf ''ファイル名を格納します
  n = n + 1
  buf = Dir()
 Loop
 With Worksheets("Sheet1")
  '1度でもループを通れば、n のカウントは上がりますから、チェックに使えます。
  If n > 0 Then
   .Range("A1", .Cells(UBound(Files()) + 1, 1)).Value = Application.Transpose(Files())
  End If
 End With
End Sub
'///
    • good
    • 0
この回答へのお礼

ありがとう

なるほど、大変勉強になりました。
参考例の記述を使わせていただきます。
有り難うございました。

お礼日時:2015/06/28 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!