- ベストアンサー
VBAの変数 超入門
上司からVBAの宿題をだされました。 変数とFOR nextを使って 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 と出るようにしろ、とただこれだけのVBA。。。 基礎なんでしょうけど、いまいち理解しきれていません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なるべく内容を考えてみてくださいね。 VBAのウィンドウでF8キー押下によりステップ実行と機能があるので動作を確認ください。 Sub 課題() Dim n行 as Long Dim n列 as Long '行(1-5)に対するループ For n行 = 1 To 5 '列(A-E)に対するループ For n列 = 1 To 5 '対象とするセルに値を代入する 'OffsetでセルのA-Eを判断せずに済ませる Range("A" & n行).Offset(0, n列 - 1) = (n行 - 1) * 5 + n列 '次の列の処理 Next n列 '次の行の処理 Next n行 End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#1の回答に追加。 (1)For Nextは1つでも出来ます。 5の倍数の次になれば下の行のA列にデータをセッ ト する(復帰改行のイメージ) Sub test01() i = 0 For k = 1 To 40 x = k Mod 5 If x = 1 Then i = i + 1 j = 0 End If j = j + 1 Cells(i, j) = k Next k End Sub (2)For Nextを使わず、変数 i 1つだけでも出来ます。 i=i+1でセル毎に1を加え、5の倍数の次に なれば下の行のA列にデータをセットする (3)当然For Next以外の制御文も使えます。 (4)エクセル固有の操作を、VBA化することも出来ます。 例えばオートフィルを使う操作をVBA化するもの。 他にもあるかもしれない。 Sub Macro1() Range("A1") = 1 Range("B1") = 2 Range("A1:B1").AutoFill Destination:=Range("A1:E1"), Type:=xlFillDefault 'この行は上の行の右に続けること Range("A2") = 6 Range("B2") = 7 Range("A2:B2").AutoFill Destination:=Range("A2:E2"), Type:=xlFillDefault 'この行は上の行の右に続けること Range("A1:E2").AutoFill Destination:=Range("A1:E8"), Type:=xlFillDefault 'この行は上の行の右に続けること End Sub (5)常に(A)通常のロジックによる解答 (B)エクセル固有の操作を、VBA化する解 答(随分単純になることがあるので。 マクロの記録を活用。) のどちらが有利か考えてVBAを組むこと。
補足
マクロの記録は活用はちょっとしてます。 で、少し手直しをするとかまでなのです。基本的なことを 勉強しろと言われて、今必死でやってます。アドバイスありがとうございます。
- bin-chan
- ベストアンサー率33% (1403/4213)
宿題の答えを書いちゃまずいんでしょうから。 ヒントは「行列」ですね。 1.For~Nextループは「行」「列」二つが必要。 2.ループ制御変数は「行」「列」を示すもの二つが必要。 3.6=1+5、11=6+5、16=11+5のルール。2=1+1、3=2+1のルール。 と、いうことでがんばってみてください。
補足
はい、For Nextは2つ使うとヒントはもらいました。 一生懸命考えましたが、うまくいきません。。。 基本的に、考え方がいまいちわからないのです。これから本を買って勉強もしますが、 もうちょっとヒントなんかをお願いします。(^^;)
お礼
ありがとうございます!!offsetは使わないで Sub a() For N = 1 To 5 For I = 1 To 5 Cells(N, I) = (N - 1) * 5 + I Next I Next N End Sub でもできました!!こんなふうに考えるのかーー!とまだその段階ですが、 頑張ります!ありがとうございました。