アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのVBA初心者です。
アドバイスいただきたいのですが、
下記のソースは、E1のセルの値を1から20まで増加させながら印刷していくものです。

Dim 番号 As Integer
For 番号 = 1 To 20
Sheets("宛名印刷").Range("E1").Value = 番号
Sheets("宛名印刷").PrintOut
Next 番号

これだと20で終わってしまいますが、
例えばA8に開始番号、A11に終了番号を入力し、
For 番号 = [開始番号] To [終了番号]
という印刷をさせるにはどのような記述にすればよいのでしょうか。
VBAを知っている方には初歩過ぎるかもしれませんがよろしくお願いします。

A 回答 (4件)

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 番号

で、いかがでしょうか??
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/01 18:48

(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の記事はあふれている。時間を割いて、適したものを探し、まねること。

この回答への補足

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

補足日時:2007/08/03 12:02
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 12:02

cnt_ini:カウンターの初期値


cnt_end:カウンターの最終値
という意味で、使ってみました。
cnt_start/cnt_end でも、全く問題ありませんよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 11:59

こんにちは。



値をそのまま代入すればいいと思います。
-------------------------------------------------------------
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
-------------------------------------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/01 18:39

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