重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

VBA初心者です。
VBAで作成したプログラムがエラーで止まってしまい、先に進まないのです。
わかる方いらっしゃいましたら、ご教示頂けないでしょうか。

<やりたいこと>
同じ形式の複数のエクセルBOOKに入っている特定の列の特定の行範囲にあるデータを、
別の集計用エクセルBOOKの単一のシートの中に順々にコピーをしていきたいのです。
集計用BOOKの特定の行には、データBOOKのBOOK名が横にずらっと記載されて
おり、集計用BOOKに組んだVBAでBOOK名を読み取り、そのBOOK名のデータBOOKを
開き、特定セル範囲(A2:A5)の値をコピーし、集計用BOOKのBOOK名が記載されて
いる列に貼り付けしていく。同様に、集計用BOOKの右どなりの列に記載されている
BOOK名を読み取り、そのBOOKを開き...と継続し、集計用BOOKにデータ用BOOK
名が記載されていない列まできたら、Do Whileステートメントを終了する、ということ
をやりたいのです。

<問題点>
実行させると、「実行時エラー'1004' 'Range'メソッドは失敗しました
:'Global'オブジェクト」なるメッセージが出て、先に進まないのです。

<プログラム>
Sub W()
Dim ファイル名 As String
Dim 列番号 As String
列番号 = c
Do While Range(列番号 & "5").Value <> ""
ファイル名 = Range(列番号 & "5").Value
Workbooks.Open "D:\学校\データ\" & ファイル名 & ".xlsx"
Range("A2:A5").Copy
ActiveWorkbook.Close
ThisWorkbook.Activate
ActiveSheet.Paste Range(列番号 & "6")
列番号 = 列番号 + 1
Loop
End Sub

<エラー発生部分>
Do While Range(列番号 & "5").Value <> ""

<補足>
ちなみに、VBAの組んであるBOOKは「学校」フォルダの中、データが入っている
BOOKは「データ」フォルダの中に格納されています。

以上お手数をおかけしますが、よろしくお願いいたします。

A 回答 (1件)

1回目のループ終了時の「列番号=列番号+1」結果は「D」になりますか?おそらくならないと思います。

エラー発生時にデバッグを押した後、列番号のところにカーソルを合わせると値表示がされるので、確認出来ます。

これが原因ならば、以下のように対策すればOKです。

Sub W()
Dim ファイル名 As String
Dim 列番号 As Long
列番号 = 3
Do While Cells(5,列番号).Value <> ""
ファイル名 = Cells(5,列番号).Value
Workbooks.Open "D:\学校\データ\" & ファイル名 & ".xlsx"
Range("A2:A5").Copy
ActiveWorkbook.Close
ThisWorkbook.Activate
ActiveSheet.Paste Cells(6,列番号)
列番号 = 列番号 + 1
Loop
End Sub

要は列番号をアルファベットでなく整数に変更し、セル表現をRangeからCellsに変更します。
    • good
    • 0

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