質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

398閲覧

5列で50まで文字をいれていきたい

L4zy

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/01/19 04:37

以下のコードは5列で50まで数値を入れたいと思い書いたのですが、何も変わりません。
どうすればいいですか?
*Excelにはデータは何も入っていません。

Option Explicit

Sub 演習4()

Dim s As Worksheet Set s = ThisWorkbook.Worksheets(2) Dim cnt As Integer: cnt = 1 Dim i As Integer: i = 0 Dim j As Integer: j = 1 With s Do While .Cells(i + 1, 1) = "" If cnt = 50 Then Exit Do i = i + 1 Do While j = 5 .Cells(i, j) = cnt cnt = cnt + 1 j = j + 1 Loop Loop End With

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/19 04:39

コードはマークダウンのcode機能を利用してご提示ください。 また、Debug.printなどでデバッグしてみましたか? 「何も変わりません」とはどういうことでしょう?
L4zy

2020/01/19 04:42

オーバーフローします。 cntをプラス1してるのに表示すると毎回1になります。 なぜでしょうか?
m.ts10806

2020/01/19 04:47 編集

外出先のため、後程回答はしますがマークダウンの対応だけ質問編集して、やっておいてください
tatsu99

2020/01/19 05:11

「5列で50まで数値を入れたい」とは、どういう結果になればよいのですか。 期待する結果を画像で提示してください。
guest

回答2

0

どうすればいいですか?

上手く行かない時は、ステップインで1行づつ実行し、
ローカルウィンドウで各変数の値を確認してみてください。

Do While j = 5

jの値が5の間はループ

だから、j=1 の時点ではじかれます。

5を越えたら次の行
50になったら終わり
ならば、
Loop Until cnt = 50
のように、Untilで表現した方が読みやすくないですか?

ExcelVBA

1Sub 演習4() 2 3 Dim s As Worksheet: Set s = ThisWorkbook.Worksheets(2) 4 Dim cnt As Integer 5 Dim i As Integer 6 Dim j As Integer 7 8 Do 9 i = i + 1 10 j = 1 11 Do 12 cnt = cnt + 1 13 s.Cells(i, j).Value = cnt 14 j = j + 1 15 Loop Until j > 5 16 Loop Until cnt = 50 17End Sub

終りが50とはっきりしてるので、
For~Nextの方がもっと読みやすくなると思います

ExcelVBA

1Sub test() 2 Dim i As Long 3 Dim r As Range 4 5 Set r = Worksheets("Sheet2").Cells.Resize(, 5) ’5列で 6 For i = 1 To 50                  ’1から50まで 7 r.Cells(i).Value = i 8 Next 9End Sub

投稿2020/01/20 06:59

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こういうことですか?

VBA

1Option Explicit 2 3Sub 演習4() 4 5 Dim s As Worksheet 6 Set s = ThisWorkbook.Worksheets(2) 7 Dim cnt As Integer: cnt = 1 8 Dim i As Integer: i = 0 9 Dim j As Integer: j = 1 10 11 With s 12 Do While .Cells(i + 1, 1) = "" 13 14 If cnt >= 50 Then Exit Do 15 i = i + 1 16 j = 1 17 Do While j <= 5 18 19 .Cells(i, j) = cnt 20 cnt = cnt + 1 21 j = j + 1 22 23 Loop 24 Loop 25 End With 26End Sub 27

投稿2020/01/19 05:17

tatsu99

総合スコア5470

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問