複数回コピーしながら移動するマクロについて教えて下さい。
下のような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
よろしくお願い致します。
No.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
大変ありがとうございます!!
早速試させていただきましたところ、
果物が都道府県分ちゃんとコピーできました!
一瞬でした。
こんな短いコードでできるのですね。
本当に本当に助かりました!
ありがとうございます
No.4
- 回答日時:
こんにちは
説明文と例示の内容が食い違っている(特に個数、回数に関して)のでよくわかりませんが・・・
普通に考えれば、この手の処理は『「りんご、みかん、いちご」という項目(項目数可変)と「東京、大阪」という項目(項目数可変)を与えて、全ての組み合わせを列挙させる』といった感じの処理になるのではないかと思うのですが、ご質問ではシート2にすでに重複して「東京、大阪、東京、大阪・・・」のように記されているのが奇異に感じられます。
一方で、どうやら繰り返しの個数(=n)が与えられているらしいので、そちらの条件を正とするなら、シート2のB列の内容は無関係となって、『シート1の各項目をn回ずつシート2に記入する』という処理に帰結しそうだし・・・
どっちなんでしょうね?
ありがとうございます。
自分の中で整理できておらず、申し訳ないです。
皆様からご指摘いただきまして自分なりに再度整理してみました。
まず、下記リストが存在します。
・果物リスト(りんご、みかん、いちご)
・都道府県リスト(東京、大阪)
果物は りんご、みかん、いちごをそれぞれ都道府県分コピー(1列)
都道府県は 全都道府県を 果物分コピー(1列)
その2つの列を合わせて、最終的に最初の質問の<最終結果>のような形になればよいのではないかと思い至りました。
ありがとうございます!!
No.3
- 回答日時:
No.2です。
下記について再確認です。
>実際のデータは
>シート1 A列138個
>シート2 B列53個
質問文の例とは逆に、シート1 A列のほうが個数が多いのですか?
だったら、1個ずつ貼り付けていくのですよね?
>シート2 B列の個数をnとすると、
僕がA列の個数のn倍がB列の個数と回答したのに対して、『そうです』と返答されています。
一方で、シート2 B列の個数がn と書かれています。
どちらが正解でしょうか?
説明がおかしくて申し訳ありません。
シート1の数とシート2の数は時と場合により
増えたり減ったりするので、どちらが多いとは言えないリストになっています。
正しいのは、
シート2 B列の個数をnとすると、
A列1行目の文字をn回ずつ貼り付け、その下にA列2行目の文字をn回貼り付けです。
よろしくお願い致します。
No.2
- 回答日時:
法則性について確認させてください。
シート1 A列の個数のn倍がシート2 B列の個数になっているとして、シート1 A列の語句を上から順にn回ずつ貼り付けていけばよいということでしょうか?(シート2 B列の語句自体は影響しない?)
質問文の場合を例にとると、
シート1 A列の個数 = 3個
シート2 B列の個数 = 6個
n倍 = 2倍
なので、A列の語句を2回ずつ貼り付ける。
そうです!
シートAの語句を上から順にn回ずつ貼り付けていきたいのです。
質問文の場合は2倍ですが、実際のデータは
シート1 A列138個
シート2 B列53個
のように多数かつ中途半端な数字になっています。
シート2 B列の個数をnとすると、
A列1行目の文字をn回ずつ貼り付け、その下にA列2行目の文字をn回貼り付け・・としていきたいのです。
説明下手で本当に申し訳ないです。
ありがとうございます。
No.1
- 回答日時:
でもこれって前提がおかしくない?
シート2のB列に都道府県名があるのにも関わらず都道府県の数を指定するなら、余分になってしまうデータは上書きで消しちゃうの?
シート1のA・B列にデータがあってC・D列にそれぞれの指定数を入力し、結果をシート2に書き出すってならまだわかるのだけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
EXCELマクロで、シート間でのコピーペーストを繰り返す方法
Excel(エクセル)
-
-
4
VBA コピーして次の値まで貼り付けを繰り返す
Visual Basic(VBA)
-
5
エクセルVBA 指定範囲を指定回数繰り返しコピー
Excel(エクセル)
-
6
一行おきにコピーするマクロが知りたい
Excel(エクセル)
-
7
Excel で行を指定回数だけコピーしたい
Excel(エクセル)
-
8
VBA 連続行データを5行ずつ隣の列に貼り付ける
Excel(エクセル)
-
9
excelで任意のセルを指定回数コピーペーストする方法を教えてください
Excel(エクセル)
-
10
エクセルVBA 4行飛ばしで転記するループ処理
Excel(エクセル)
-
11
エクセルVBAでコピーして順番に張り付けをしたい!
Visual Basic(VBA)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
Excel VBA 複数行を数の分だけ挿入したい
Visual Basic(VBA)
-
14
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
15
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
16
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
17
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
一行おきに貼り付ける 可能でしょうか
Visual Basic(VBA)
-
20
VBA コピーを有効行までループをする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
エクセルの列の限界は255列以上...
-
エクセルVBAで、ある文字を含ん...
-
EXCELでシート1で作ったデータ...
-
Excel VBA ピボットテーブルに...
-
SUMIF関数で4万件以上だと計算...
-
【VBA】複数のシートの指定した...
-
Excelでの並べ替えを全シートま...
-
スプレッドシートでindexとIMPO...
-
条件付きのMEDIANとAVERAGEにつ...
-
文字の色も参照 VLOOKUP
-
Excelに自動で行の増減をしたい...
-
エクセル 複数シートのデータ...
-
Excel 2段組み
-
Excel VBAで項目ごとに別々の...
-
VBA 抽出後、別シートにコピー
-
【エクセル】数式だけコピーす...
-
日計累計の仕方
-
エクセルシートの名前変更を別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【条件付き書式】countifsで複...
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセルマクロを教えてほしい...
-
SUMPRODUCTにて別シートのデー...
-
Excel VBA ピボットテーブルに...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
-
excel 複数のシートの同じ場所...
-
Excelに自動で行の増減をしたい...
-
スプレッドシートでindexとIMPO...
-
エクセルで横並びの複数データ...
-
エクセル複数シートのデータを...
おすすめ情報
ありがとうございます!
都道府県の数を指定したのは、
果物の数を都道府県の数だけコピーしたいからなんです。
りんごをシート2のA列に下2回(2セル)コピーして、
次にみかんをシート2のりんごがコピーされている一番最後のセルの下からまた、下に2回(2セル)コピーしていく、、というイメージです。
説明下手で申し訳ないです。
ご指摘の通り、果物一覧と都道府県一覧があって、それぞれをそれぞれの回数コピーするのでも
やり方ご存知でしたら、教えていただけたら嬉しいです。
申し訳ないですか、よろしくお願い致します。