• ベストアンサー

VBA 変数代入とループ処理について

エクセルにてループ処理をしたいと考えています。 sheet1には連番が振ってあるデータが格納してあります。 sheet2にはsheet1の連番をB1に入力すれば必要なデータだけが出るようにvlookupで表示されるようにしてあります。 sheet3にはフォーマットが作ってあり、sheet2で表示されたデータがsheet3の対応した場所にデータが入るように作ってあります。 sheet2のA1に5 A2に20と入力したら連番5から20までsheet3が印刷するVBAを組みたいです。 変数の代入が間違っていると思うのですが、何が間違っているのか わからないので、質問しました。 以下にためしで組んでみたものがありますので、ご教授お願いします。 Dim temp1 Dim temp2 Dim temp3 Sheets("sheet2").Select temp1 = Range(A1).Value temp2 = Range(A2).Value temp3 = temp2 - temp1 While temp3   Sheets("sheet2").Select   Range(B1).Value = temp1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True   temp1 + 1   Wend 初歩的なミスをしていると思うのですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

最後のtemp + 1の結果をtempに代入していませんね。 あと,temp3の値を変更していないために無限ループです。 こういう場合には,For文をつかうとよいです。 単純に書き直した物 (実際の動作確認無し) だと,こんな感じでしょうか。 Dim first Dim last Dim current Sheets("sheet2").Select first = Range(A1).Value last = Range(A2).Value For current = first To last   Sheets("sheet2").Select   Range(B1).Value = current   Sheets("sheet3").Select   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Next

suraima
質問者

お礼

rangeの書き方を直したら上のプログラムでうまく動きました。 無限ループは何回かハマって、四苦八苦してました。 的確な指摘ありがとうございました。

suraima
質問者

補足

ご回答ありがとうございます。 上記プログラムを走らせてみましたが、 first = Range(A1).Value の部分でエラーを起こして止まってしまいました。 Rangeメソッドは失敗しました 'Global'オブジェクト と出ます。 Dimの前でSub印刷()というものがあるだけなんですが、 まだ何か問題があるのでしょうか?

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> first = Range(A1).Value > の部分でエラーを起こして止まってしまいました。 そりゃ当然でしょう。 Range("A1")と、"" で囲むのを忘れてます。 他の部分もそうですね。 これではRangeメソッドは失敗します。

suraima
質問者

お礼

指摘されると、本当に単純なミスしてました。 VBAは初めてさわるので、指摘いただいたおかげで うまくいくようになりました。 ご回答ありがとうございました。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

While temp2 >= temp1 "変更箇所   Sheets("sheet2").Select   Range(B1).Value = temp1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True   temp = temp1 + 1   "変更箇所 これでどうでしょう。

suraima
質問者

お礼

お返事ありがとうございます。 上のRangeでのミスがあり、試したときはエラーで 動きませんでした。 しかし、作り方の勉強にはなりました。 ありがとうございます。