こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

excelのファイルとセル値を書き出したい

excel2003を利用しています。
とあるフォルダにある excelファイル名(自分自身のファイルを除く)
を全て書き出して、
且つ A1セルの値をB列に書き出すことを、やろうとvbaを作ってみましたが。
最後のファイルのA1セルを書きだすところで、エラーになっていまい
そこだけ空白になってしまいます。※写真参照

記述は以下の通りです。どのように修正すればよいか
教えていただけないでしょうか?
また他にもっと優れた記述があれば、そちらも教えて欲しいです。
よろしくお願いします。

Sub test()
Dim buf As String, cnt As Long
Dim Path As String
Path = ThisWorkbook.Path & "\"
buf = Dir(Path & "*.xls")
cnt = 2
Do While buf <> ""
If buf <> ThisWorkbook.Name Then
cnt = cnt + 1
Cells(cnt, 1) = buf
buf = Dir()
Workbooks.Open Filename:=Path & "\" & buf
MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value
Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value
Workbooks(buf).Close
End If
Loop
End Sub

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2014-06-20 18:24:39

QNo.8646257

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

buf = Dir() の場所が早すぎるのでフィル名とA1セルの内容が一個ずれていませんか?

最終までファイル名を探し終わってbufが""なのに
Workbooks.Open Filename:=Path & "\" & buf
とファイル名の無い構文でファイルを開こうとしてエラーになっています。

以下のように訂正してください。

Do While buf <> ""
If buf <> ThisWorkbook.Name Then
cnt = cnt + 1
Cells(cnt, 1) = buf
Workbooks.Open Filename:=Path & "\" & buf
MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value
Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value
Workbooks(buf).Close
End If
buf = Dir()
Loop

投稿日時 - 2014-06-20 19:40:38

お礼

回答ありがとうございます。
まさに buf = Dir() の記述の意味を理解しておりませんでした。
勉強になりました。

投稿日時 - 2014-06-24 20:40:54

ANo.1

そもそもあなたの今のマクロの結果で,各ブックに実際に記入されてるA1の値が正しく記録できてなくて,一つずつずれてることを確認して下さい。

sub macro1()
 dim myPath as string ’予約語Pathを変数名に使わない
 dim myFile as string
 dim cnt as long

 cnt = 2
 mypath = thisworkbook.path & "\"
 myfile = dir(mypath & "*.xls*")

 do until myfile = ""
  if myfile <> thisworkbook.name then
   cnt = cnt + 1
   cells(cnt, "A") = myfile
   workbooks.open filename:=mypath & myfile ’¥は既に付けてある
   cells(cnt, "B").value = workbooks(myfile).worksheets(1).range("A1").value
   workbooks(myfile).close false
  end if
  myfile = dir() ’次は一連の仕事を終えたあとに取得
 loop
end sub

投稿日時 - 2014-06-20 18:50:43

お礼

回答ありがとうございます。
なんとか自分で対処したかったのですが、
あともう少し、もう一歩まで、行き届きませんでした。
いつも、多くを勉強させていただき本当にありがとうございます。

投稿日時 - 2014-06-24 20:36:49

あなたにオススメの質問