プロが教えるわが家の防犯対策術!

エクセルにてループ処理をしたいと考えています。

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

初歩的なミスをしていると思うのですが、よろしくお願いします。

A 回答 (3件)

最後の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

この回答への補足

ご回答ありがとうございます。

上記プログラムを走らせてみましたが、
first = Range(A1).Value
の部分でエラーを起こして止まってしまいました。

Rangeメソッドは失敗しました
'Global'オブジェクト

と出ます。
Dimの前でSub印刷()というものがあるだけなんですが、
まだ何か問題があるのでしょうか?

補足日時:2009/03/10 17:18
    • good
    • 0
この回答へのお礼

rangeの書き方を直したら上のプログラムでうまく動きました。

無限ループは何回かハマって、四苦八苦してました。
的確な指摘ありがとうございました。

お礼日時:2009/03/10 17:58

> first = Range(A1).Value


> の部分でエラーを起こして止まってしまいました。

そりゃ当然でしょう。
Range("A1")と、"" で囲むのを忘れてます。
他の部分もそうですね。
これではRangeメソッドは失敗します。
    • good
    • 0
この回答へのお礼

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

ご回答ありがとうございました。

お礼日時:2009/03/10 17:59

While temp2 >= temp1 "変更箇所


  Sheets("sheet2").Select
  Range(B1).Value = temp1
Sheets("sheet3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  temp = temp1 + 1   "変更箇所
これでどうでしょう。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

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

お礼日時:2009/03/10 17:56

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