お世話になります。
表題のとおり、F5:H35の範囲で、通し番号を入力したいのですが、VBAコードのヒントを教えていただけませんでしょうか?
番号を振る規則は「5行が1・2・3」「6行が4・5・6」といった具合に、横に昇順に並べたいのです。
最後に「35行が103・104・105」としたいです。
下記のようにコードを書いてみました。
5行(1行目)まで走るんですが、6行(2行目)に改行してくれませんでした。
For構文の原理がいまひとつ理解できてないからでしょうか?
---------------------------------------
Sub 通し番号()
1) Dim i As Integer, j As Integer, n As Integer
2) i = 5
3) j = 6
4) n = 1
5)For i = i To 35
6)For j = j To 8
7)Cells(i, j) = n
8)n = n + 1
9)Next
10)Next
End Sub
--------------------------------------
以上です。
よろしくお願いいたいます。
No.1
- 回答日時:
jのループで最初の一回はj=6で始まりますが2回目からはjが8のままですのでjのループが実行されません。
このような場合、変数をループ用と初期値用と別にしたほうがいいと思われます。
同じにするのでしたら以下のように変更してください。
i = 5
n = 1
For i = i To 35
j = 6
For j = j To 8
Cells(i, j) = n
' Debug.Print i; " "; j
n = n + 1
Next
Next
ちなみにうまくいかない場合
Debug.Print i; " "; j
と記載して実行すると、変数の値がイミディエイトウインドウに表示されますので、問題の原因が分かることが多々あります。
> 最後に「35行が103・104・105」としたいです。
91,92,93
となります。
早速の回答ありがとうございます。
なるほどループ用の変数ですかぁ。
j=6の置き位置の意味を理解していませんでした。
おかげさまでうまく走りました。
デバッグの一文もありがとうございます。
大変参考になります。
No.2
- 回答日時:
i=5
j=6
というようは指定はfor~nextでは行いません。
for i= 5 to 39
開始、終了を数値又は変数で指定すれば良いのです。
for~nextを繰り返す2次配列的使用の場合は、どちらを先にループさせるのか考えましょう。
今回は行を5行目~39行目まで回す間に列を3列数値変更したいのですから、最初のfor~nextは行から始めないといけない事が解りますよね。
基本的は構文ですので、覚えましょうね。
最祖は色々あるでしょうが、頑張って勉強して下さい。
VBAはネット上にサンプルコードはいくらでもあります。分からないことはネット検索する方が早く自己解決する事も多いですよ。
修正案です。最終数値が105にしたいのであればF5:H35ではなくF5:H39になります。(35行までではなく、賞味35行必要)
Sub 通し番号()
Dim i As Integer, j As Integer, n As Integer
n = 1
For i = 5 To 39
For j = 6 To 8
Cells(i, j) = n
n = n + 1
Next
Next
End Sub
回答ありがとうございます。
ご指摘のとおりインターネットを活用させていただいております。
なかなか簡単に覚えられないところに、力のなさを感じております。
コード大変参考になりました。
ありがとうございます。
No.3
- 回答日時:
No1です
初期値を別の変数にする例を忘れてました。
以下のような感じにしておけば、表のレイアウトの変更で行の指定や列の指定を変更する場合、分かりやすいと思います。
また、後々何かの機能を追加してコードが増えても、最初や最後の行や列などの指定を数値でするのではなく変数で指定しておけば、レイアウト変更になっても最初の変数の代入値を変更するだけで済みますのでメンテナンスがしやすいと思います。
Sub Example()
Dim i As Integer, j As Integer, n As Integer
Dim FirstRow As Integer, LastRow As Integer
Dim FirstColumn As Integer, LastColumn As Integer
FirstRow = 5
LastRow = FirstRow + 34 '実質35行いるのでしたら最終行は左の計算になります。
FirstColumn = 6
LastColumn = 8
n = 1
For i = FirstRow To LastRow
For j = FirstColumn To LastColumn
Cells(i, j) = n
n = n + 1
Next
Next
End Sub
ありがとうございます。
いずれは「メンテしやすい分に書き換えよう」と思っていましたので、大変助かります。
Row・Columnオブジェクトが発想できるほど、脳ミソが出来上がっていないので、勉強させていただきます!
No.4
- 回答日時:
No3の訂正です。
LastColumn = 8
も
LastColumn = FirstColumn + 2
のほうがいいかもしれません。
No.5
- 回答日時:
Tablet手書き入力なので字下げできてないけど
Sub 通し番号()
Dim n As Integer
Dim objRanges as range
Dim objRange as range
n = 0
Set objRanges = Range("F5:H35")
For each objRange in objRanges
n = n + 1
objRange = n
Next objRange
Set objRange= nothing
Set objRanges =nothing
End Sub
なんとForEachっすか!
むむ・・・精進せねば・・・
そして最後のSetステートメントも、じつはさっぱりで・・・
いえいえ、教わってばっかりではいけませんので、意味を考えます!
標準モジュールに書きまくって、試しまくります。
大変参考になります。
ありがとうございます。
No.6
- 回答日時:
こんにちは!
>F5:H35の範囲で
となると最終行は
91・92・93 になると思いますが・・・
一例です。
Sub Sample1()
Dim cnt As Long, c As Range
For Each c In Range("F5:H35")
cnt = cnt + 1
c = cnt
Next c
End Sub
こんな感じでも大丈夫だと思います。m(_ _)m
おお!こちらもForEach!
しかも短い・・・
最後の行の数字は、私の暗算違いでした。
すいません。
勉強させていただきます!
No.7ベストアンサー
- 回答日時:
5行目から始まるなら、終わりは39行ですね? For 2個もいりません。
F5:H39の範囲を選んで、For Eachすればそれでいいです。Sub renban()
Dim i As Range, x As Long
x = 0
For Each i In [F5:H39]
x = x + 1: i.Value = x
Next
End Sub
なんとForEachでこんなにサッパリするとは><
結果は同じなのに・・・
4行目が私にはなじみがないのですが、実際走りましたので、勉強させていただきます。
(若輩者がこんなこと言ってすいません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
繰り返し文の利点について
-
入力した文字列から母音だけを...
-
for文while文の無限ループの違...
-
ループの特定入力終了
-
C言語forループが完結した場合...
-
if文を使わずに奇数・偶数を判断
-
階層型ニューラルネットに準ニ...
-
アルゴリズムです!四つの数字...
-
C言語のfor文です。 繰り返しの...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
*をユーザーが入力した数字の数...
-
fgetsなどのときのstdinのバッ...
-
C言語で%を使わない余りの出し方
-
C言語
-
プログラムでの数字につく”f”の...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
エクセルでC言語のfor文と同じ...
-
Excel VBAで年度をまたぐ期間の...
-
For文の終了値を関数にしても問...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
PAD図の書き方
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
C言語のプログラムみてください...
-
ループの特定入力終了
-
COBOLのEVALUATE文
-
for文while文の無限ループの違...
おすすめ情報