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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

3660閲覧

for nextの2重ループ

GytaAmies

総合スコア12

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/03/26 09:32

編集2020/03/26 11:37

前提・実現したいこと

VBA マクロです
for next において変数を2つ使用して、2重ループの構成を作成したのですが、うまくいきません

イメージ説明

この図の左側(sheet1)をマクロを使って右側(sheet2)のようになればOKです

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

イメージ説明

下のマクロを起動すると上図のような結果になります。
コード自体、どこが間違っているかが全然わかりません。

該当のソースコード

VBA

Sub test() ' ' test Macro ' ' #繰り返しができるようにまず、sheet1のブドウとイチゴを上にあげる Range("C4").Value = Range("C6").Value Range("C5").Value = Range("C7").Value #リンゴはシンプルにコピペ(この方法以外おもいつかない)   Range("C1").Select Selection.Copy   ActiveSheet.Next.Select Range("E1").Select ActiveSheet.Paste ActiveSheet.Previous.Select #変数作成 Dim i, j As Long For i = 2 To 5 For j = 3 To 9 Step 2 #(2、C)から(5,C)までコピーするループ Cells(i, "C").Select Selection.Copy ActiveSheet.Next.Select #(3、A)から(9,A)まで貼り付けするループ Cells(j, "A").Select ActiveSheet.Paste ActiveSheet.Previous.Select Next j  Next i End Sub

試したこと

For i = 2 To 5

For i = 2 To 4
にしたところ、
4行目のブドウがコピーされて、ブドウが4つ続きました。

この結果、恐らく「i」が先に繰り返して、
終わった後に、「j」が始まる
という構図になっているとわかりました。

「i」と「j」が同時に始まって、同時に終わるようなマクロを作りたいです。

補足情報(FW/ツールのバージョンなど)

上記以外に容量が少なく、もっとスマートなやり方などあれば、ご教授お願いします。
Excel2013です

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

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

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

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

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

meg_

2020/03/26 10:19

コードは「コードの挿入」で記入してください。
guest

回答2

0

ベストアンサー

ExcelVBA

1Sub test() 2 '#繰り返しができるようにまず、sheet1のブドウとイチゴを上にあげる 3 Range("C4:C5").Delete Shift:=xlShiftUp 4 5 '#変数作成 6 Dim i As Long, j As Long, k As Long 7 j = 1 8 9 '#コピーするループ 10 For i = 1 To 5 11 If i = 1 Then 12 k = 5 13 Else 14 k = 1 15 End If 16 17 ActiveSheet.Cells(i, 3).Copy ActiveSheet.Next.Cells(j, k) 18 19 j = j + 2 20 Next i 21End Sub

こんな感じでしょうか?

僕なら以下のように書くかなぁ。。。。

ExcelVBA

1Sub test2() 2 Dim rngValue As Range 3 Dim rngResults As Range 4 Dim c As Range 5 Dim ixRow As Long 6 Dim ixCol As Long 7 8 Set rngValue = ActiveSheet.Range("C:C").SpecialCells(xlCellTypeConstants) 9 Set rngResults = rngValue.Worksheet.Next.Cells(1, 1) 10 ixRow = 1 11 12 For Each c In rngValue 13 ixCol = IIf(ixRow = 1, 5, 1) 14 rngResults(ixRow, ixCol).Value = c.Value 15 ixRow = ixRow + 2 16 Next 17End Sub

投稿2020/03/26 11:35

mattuwan

総合スコア2163

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

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

GytaAmies

2020/03/26 11:55

初心者なのでわからないコードがいくつかありますが、頑張って理解して、業務効率化を働きます。 大変参考にさせていただきます。ありがとうございました。
guest

0

「i」と「j」が同時に始まって、同時に終わるようなマクロを作りたいです。

Forループを1つ(i)にして、そのループの中でjをインクリメントしてください。

質問のコードでは、「C2をコピー→3Aに張り付け」「C2をコピー→5Aに張り付け」「C2をコピー→7Aに張り付け」・・・「5Cをコピー→5Aに張り付け」「5Cをコピー→7Aに張り付け」「5Cをコピー→9Aに張り付け」となり、上書きされて最終的に5Cの値のみが残ります。

投稿2020/03/26 10:33

meg_

総合スコア10760

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

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

GytaAmies

2020/03/26 11:55

大変参考にさせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問