• ベストアンサー

エクセルのVBAの記述に関する初歩的な質問です

エクセルのVBA初心者です。 アドバイスいただきたいのですが、 下記のソースは、E1のセルの値を1から20まで増加させながら印刷していくものです。 Dim 番号 As Integer For 番号 = 1 To 20 Sheets("宛名印刷").Range("E1").Value = 番号 Sheets("宛名印刷").PrintOut Next 番号 これだと20で終わってしまいますが、 例えばA8に開始番号、A11に終了番号を入力し、 For 番号 = [開始番号] To [終了番号] という印刷をさせるにはどのような記述にすればよいのでしょうか。 VBAを知っている方には初歩過ぎるかもしれませんがよろしくお願いします。

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

Dim 番号 As Integer Dim cnt_ini As Integer Dim cnt_end As Integer cnt_ini = Sheets("宛名印刷").Range("A8").Value cnt_end = Sheets("宛名印刷").Range("A11").Value For 番号 = cnt_ini To cnt_end Sheets("宛名印刷").Range("E1").Value = 番号 Sheets("宛名印刷").PrintOut Next 番号 で、いかがでしょうか??

ukichon
質問者

お礼

ありがとうございます。 私の環境にあわせてあるみたいで、よくわからないままそのままコピペしただけで動きました。 よく中身を見てみると cnt_ini cnt_end は変数のことですね? cntとiniの命名由来って教えていただけませんか。 cnt_start、cnt_endって使い方でもいいんですか?

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

(1)セルに直接入力された値 (2)数式計算されて結果、セルに見えている値 (3)どこかのセルから参照してきた値 どれも、セルA1の値の場合は、Range(”A1").Valueで取れます。 Value(値)という意味では、来歴は問題にする必要はありません。 ーー ある変数をAとして、A1セルが1である場合  A=1 とかくのと  A=Range("A1") とかくのと 同じなのです。 ーー ですから、 A8に開始番号、A11に終了番号を入力し、 であれば For i=Range("A8").Value To range("A11") と For i=2 to 18 (セルA8の値が2で、セルA11の値が18の場合) と同じです。 ーー 後者は、A8やA11の値を、他の数に、プログラムで、摩り替えると、その値で実行できる。 固定定数でプログラムを書くと、変える場合は、色々な場所(行)のプログラムの書き換えをしないといけない。だからできるだけ(熟達者は)その場所では、変数で値をセットしているが、それより前に、その変数に定数を代入したり、定数として名前をつけて定義したりしている。(2段構え法、これは私の自称) ーー セルの値の扱い方の理解がVBAの第1歩で、重要ですから、これを乗り切ること。ただ質問者は、まだ解説書などもあまり読んでいない感じを受ける。 本でなくとも、WEBにもVBAの記事はあふれている。時間を割いて、適したものを探し、まねること。

ukichon
質問者

お礼

詳しい解説ありがとうございます。 理解が更に深まりました。 プログラミング自体は昔かじったことがあるのですが、ソースをできるだけスマートに書かないと後々自分自身の書いたソースをいじるのも大変ですものね。 同じ結果でも色々な工夫ができますね。

ukichon
質問者

補足

私自身ももっと勉強しようと思います。 ありがとうございました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

cnt_ini:カウンターの初期値 cnt_end:カウンターの最終値 という意味で、使ってみました。 cnt_start/cnt_end でも、全く問題ありませんよ。

ukichon
質問者

お礼

なるほど、解説ありがとうございます。 理解できました。

回答No.1

こんにちは。 値をそのまま代入すればいいと思います。 ------------------------------------------------------------- Sub Sample() Dim NumStart As Long Dim NumEnd As Long Dim x As Long NumStart = ThisWorkbook.Sheets("宛名印刷").Range("A8").Value NumEnd = ThisWorkbook.Sheets("宛名印刷").Range("A11").Value For x = NumStart To NumEnd ThisWorkbook.Sheets("宛名印刷").Range("E1").Value = x ThisWorkbook.Sheets("宛名印刷").PrintOut Next End Sub -------------------------------------------------------------

ukichon
質問者

お礼

ありがとうございます。 しかし、値をそのまま代入する、、、という意味がよく分かっていないレベルで申し訳ありません。

関連するQ&A