アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数回コピーしながら移動するマクロについて教えて下さい。

下のようなVBAで指定回数コピーし別シートへペーストしながら、
下へ移動していくマクロを作ろうとしています。

例えば、

シート1のA列に
"りんご"
"みかん"
"いちご"

シート2のB列に 
"東京"
"大阪"
"東京"
"大阪"
"東京"
"大阪"

とすでに入力があって、
下記のようにシート2のA列に果物の名前を都道府県分コピーしていくマクロを作りたいと考えています。

<最終結果>
シート2
A列
"りんご" "東京"
"りんご" "大阪"
"みかん" "東京"
"みかん" "大阪"
"いちご" "東京"
"いちご" "大阪"

果物と都道府県の数は都度変わるのでそれぞれを変数にしたいのですが、
2つの変数を組み合わせて下記のように作ってみたのですが
うまく動きませんでした。

どこがまずくてどのようにすれば上記の<最終結果>ができあがるのか
ご教示いただけないでしょうか。

Sub test()

Dim f As Long
Dim p As Long
Dim i As Long
Dim j As Long
Dim LRow As Long

f = Sheets(1).Range("B1").Value '果物の数
p = Sheets(2).Range("C1").Value '都道府県の数

LRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row '果物をシート2へコピーする場所

Sheets(1).Cells(2, 1).Copy _
Sheets(2).Range(Cells(2, 1), Cells(1 + p, 1)) '1番目の果物だけコピペ

For i = 1 To f
For j = 1 To p

Sheets(1).Cells(2, 1).Offset(i, 0).Copy _
Sheets(2).Range(Cells(LRow, 1), Cells(LRow + j, 1))

Next
Next

End Sub

よろしくお願い致します。

質問者からの補足コメント

  • ありがとうございます!

    都道府県の数を指定したのは、
    果物の数を都道府県の数だけコピーしたいからなんです。
    りんごをシート2のA列に下2回(2セル)コピーして、
    次にみかんをシート2のりんごがコピーされている一番最後のセルの下からまた、下に2回(2セル)コピーしていく、、というイメージです。
    説明下手で申し訳ないです。
    ご指摘の通り、果物一覧と都道府県一覧があって、それぞれをそれぞれの回数コピーするのでも
    やり方ご存知でしたら、教えていただけたら嬉しいです。
    申し訳ないですか、よろしくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/03/24 21:14

A 回答 (5件)

こんな感じではいかがですか?



Sub test2()
 Dim f As Long
 Dim p As Long
 Dim i As Long
 Dim Target As Range

 f = Sheets(1).Range("B1").Value '果物の数
 p = Sheets(2).Range("C1").Value '都道府県の数

 Set Target = Sheets(2).Range("A2").Resize(p)

 For i = 1 To f
  Target.Offset(p * (i - 1)).Value = Sheets(1).Cells(i + 1, 1).Value
 Next
End Sub


最後の部分は、こちらの方が分かりやすいかな? 大差ないけど。
 For i = 0 To f - 1
  Target.Offset(p * i).Value = Sheets(1).Range("A2").Offset(i).Value
 Next
    • good
    • 0
この回答へのお礼

解決しました

大変ありがとうございます!!

早速試させていただきましたところ、
果物が都道府県分ちゃんとコピーできました!

一瞬でした。
こんな短いコードでできるのですね。

本当に本当に助かりました!
ありがとうございます

お礼日時:2020/03/25 13:22

こんにちは



説明文と例示の内容が食い違っている(特に個数、回数に関して)のでよくわかりませんが・・・

普通に考えれば、この手の処理は『「りんご、みかん、いちご」という項目(項目数可変)と「東京、大阪」という項目(項目数可変)を与えて、全ての組み合わせを列挙させる』といった感じの処理になるのではないかと思うのですが、ご質問ではシート2にすでに重複して「東京、大阪、東京、大阪・・・」のように記されているのが奇異に感じられます。

一方で、どうやら繰り返しの個数(=n)が与えられているらしいので、そちらの条件を正とするなら、シート2のB列の内容は無関係となって、『シート1の各項目をn回ずつシート2に記入する』という処理に帰結しそうだし・・・

どっちなんでしょうね?
    • good
    • 0
この回答へのお礼

ありがとうございます。
自分の中で整理できておらず、申し訳ないです。

皆様からご指摘いただきまして自分なりに再度整理してみました。

まず、下記リストが存在します。
・果物リスト(りんご、みかん、いちご)
・都道府県リスト(東京、大阪)

果物は りんご、みかん、いちごをそれぞれ都道府県分コピー(1列)
都道府県は 全都道府県を 果物分コピー(1列)

その2つの列を合わせて、最終的に最初の質問の<最終結果>のような形になればよいのではないかと思い至りました。

ありがとうございます!!

お礼日時:2020/03/25 13:20

No.2です。


下記について再確認です。

>実際のデータは
>シート1 A列138個
>シート2 B列53個

質問文の例とは逆に、シート1 A列のほうが個数が多いのですか?
だったら、1個ずつ貼り付けていくのですよね?


>シート2 B列の個数をnとすると、

僕がA列の個数のn倍がB列の個数と回答したのに対して、『そうです』と返答されています。
一方で、シート2 B列の個数がn と書かれています。
どちらが正解でしょうか?
    • good
    • 0
この回答へのお礼

説明がおかしくて申し訳ありません。
シート1の数とシート2の数は時と場合により
増えたり減ったりするので、どちらが多いとは言えないリストになっています。

正しいのは、

シート2 B列の個数をnとすると、
A列1行目の文字をn回ずつ貼り付け、その下にA列2行目の文字をn回貼り付けです。

よろしくお願い致します。

お礼日時:2020/03/25 08:14

法則性について確認させてください。



シート1 A列の個数のn倍がシート2 B列の個数になっているとして、シート1 A列の語句を上から順にn回ずつ貼り付けていけばよいということでしょうか?(シート2 B列の語句自体は影響しない?)

質問文の場合を例にとると、
 シート1 A列の個数 = 3個
 シート2 B列の個数 = 6個
 n倍 = 2倍
なので、A列の語句を2回ずつ貼り付ける。
    • good
    • 1
この回答へのお礼

そうです!
シートAの語句を上から順にn回ずつ貼り付けていきたいのです。

質問文の場合は2倍ですが、実際のデータは
シート1 A列138個
シート2 B列53個
のように多数かつ中途半端な数字になっています。
シート2 B列の個数をnとすると、
A列1行目の文字をn回ずつ貼り付け、その下にA列2行目の文字をn回貼り付け・・としていきたいのです。
説明下手で本当に申し訳ないです。
ありがとうございます。

お礼日時:2020/03/25 00:32

でもこれって前提がおかしくない?



シート2のB列に都道府県名があるのにも関わらず都道府県の数を指定するなら、余分になってしまうデータは上書きで消しちゃうの?
シート1のA・B列にデータがあってC・D列にそれぞれの指定数を入力し、結果をシート2に書き出すってならまだわかるのだけど。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A