🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

3回答

573閲覧

複数条件での数列を挿入

memem12

総合スコア12

VBA

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

0グッド

0クリップ

投稿2020/12/14 02:20

前提・実現したいこと

A-1-1,
A-1-2


A-2-1
A-2-2
:
:
B-1-1
B-1-2……というように特定の順番でできた文字列を順番にセルに挿入したい。
最後の番号が20になると、2番目の番号が変化し、また最後の番号が20になるまで繰り返S。

発生している問題・エラーメッセージ

挿入するセル行の変更がうまくゆかず、他の文字列に上書きされている。

該当のソースコード

言語はVBAです。
Dim i, j As Long
Dim c As String
For i = 1 To 7
For j = 1 To 20
c = Chr(i + 64)
Range("D" & i + j + 1).Value = c & "-" & i & "-" & j
Next j
Next i

試したこと

セル行をカウントする代数を入れたが、同じ文字列を繰り返すだけだった。

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

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

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

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

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

guest

回答3

0

行を指定するカウンター変数をループ変数とは別に用意してみました。

VBA

1Sub ABC() 2 'VBAの場合、変数ごとに型指定 3 Dim i As Long, j As Long, k As Long 'ループ変数 4 Dim Cnt As Long 'カウンター変数 5 Cnt = 3 6 For i = 1 To 26 7 For j = 1 To 20 8 For k = 1 To 20 9 Range("D" & Cnt).Value = Chr(i + 64) & "-" & j & "-" & k 10 Cnt = Cnt + 1 11 Next k 12 Next j 13 Next i 14End Sub

投稿2020/12/14 02:53

TanakaHiroaki

総合スコア1063

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

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

0

3つの値が必要なのにループが2つという時点でおかしいですね。
計算で挿入位置を求めてもよいですが、行カウンターを用意する方がわかりやすいでしょう。

VBA

1Dim i, j, k, r As Long 2Dim c As String 3r = 1 4For i = 1 To 7 5 c = Chr(Asc("A") + i - 1) 6 For j = 1 To 10 7 For k = 1 To 20 8 Cells(r, "D").Value = c & "-" & j & "-" & k 9 r = r + 1 10 Next k 11 Next j 12Next i

また余談ですがChr(i + 64)では可読性が悪いので、上記サンプルではAを基準として計算するように修正しています。

投稿2020/12/14 05:10

ttyp03

総合スコア17000

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

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

0

ベストアンサー

最後の番号は20までというのは分かったが、2番目の番号はいくつまでか不明です。
2番目の番号も20までとすると、下記のコードでどうでしょうか。

vba

1Sub Test() 2 Dim i As Long, j As Long, k As Long, r As Long 3 Dim c As String 4 5 r = 1 6 For i = 1 To 7 7 c = Chr(i + 64) 8 For j = 1 To 20 9 For k = 1 To 20 10 Range("D" & r).Value = c & "-" & j & "-" & k 11 r = r + 1 12 Next k 13 Next j 14 Next i 15 16End Sub

別案
変数は一つ、ループも1階層で。

vba

1Sub Test2() 2 Dim r As Long 3 4 For r = 0 To 7 * 20 * 20 - 1 5 Range("E" & r + 1).Value = Chr(r \ (20 * 20) + 65) & "-" & _ 6 (r \ 20) Mod 20 + 1 & "-" & r Mod 20 + 1 7 Next r 8 9End Sub

投稿2020/12/14 02:54

編集2020/12/14 03:12
hatena19

総合スコア34073

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問