- ベストアンサー
エクセルでのマクロを使ったデータコピーについて
- エクセルでのマクロを使って、複数のシート間でデータをコピーする方法について教えてください。
- 集計データが入力されているsheet1と、項目のリストが入力されているsheet2の間で、一致する項目名の値をコピーする方法について教えてください。
- sheet2からsheet1に項目名が一致するデータをコピーするマクロの作り方を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 やりたい事とシートの内容がようやく理解出来ました、、、たぶん。 一応サンプルを提示しますが、こういった所でやり取りしている以上は自分の環境に置き換える応用力が必須です。 いきなり自分の環境で試しても殆どの場合は上手く動きません。 まず、自分が提示した環境(相手が理解したと思われる環境)を作ってテストして下さい。 単純に「集計」シートの店舗と同じシート名が見つからない場合でも処理を継続するだけなら下記で良いかと思います。 '1)単純なシート分け Sub Test1() Dim r As Range On Error Resume Next With Worksheets("集計") For Each r In .Range("A2", .Range("A65536").End(xlUp)) r.EntireRow.Copy Destination:= _ Worksheets(r.Value).Range("A65536").End(xlUp).Offset(1, 0) Next r End With End Sub 各店舗によって転記したい内容が違うのであれば、それぞれを定義する必要があります。 やり方は様々でしょうが、例えば下記のような感じでも良いでしょう。 '2)シート毎にコピーする列が違う Sub Test2() Dim r As Range, tr As Range, buf Dim 新宿, 池袋, 渋谷 '**0****1****2*****3*****4*****5*****6** '店舗**日時**製品**値段**天気**性別**備考 新宿 = Array(0, 1, 2, 3) '店舗,日付,製品,値段 池袋 = Array(0, 2, 3, 5) '店舗,製品,値段,性別 渋谷 = Array(0, 1, 2, 3, 4) '店舗,日付,製品,値段,天気 On Error Resume Next With Worksheets("集計") For Each r In .Range("A2", .Range("A65536").End(xlUp)) Set tr = Worksheets(r.Value).Range("A65536").End(xlUp).Offset(1, 0) Select Case r.Value Case "新宿": buf = 新宿 Case "池袋": buf = 池袋 Case "渋谷": buf = 渋谷 Case Else: buf = Null End Select For i = 0 To UBound(buf) tr.Offset(0, i).Value = r.Offset(0, buf(i)).Value Next i Next r End With End Sub
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 補足を読んでもサッパリです。 Excelで列とは縦方向を指します。A列、B列・・ Excelで行とは横方向を指します。1行、2行・・ セルA1とはA列1行目、セルB10とはB列10行目 > A行には店舗名が並んでいます。渋谷・新宿・品川など多数です。 > 1列目には日付・店舗・値段・ポイント・人などの項目が多数並んでいます。 通常A行という使い方はしませんし、1列目とはA列を指します。 A行がA列を意味し、1列目が1行目を意味しているのかとも思って読み替えてもA1は日付項目なのか、店舗項目なのかが解らず、まるで構造が理解出来ません。 *******A******B*******C 1****店舗***日付*******金額 2****渋谷***2006/4/1***2000 3****川崎***2006/4/1***3500 4****新宿***2006/4/1***1800 こんな感じのデータが「集計」シートにあると仮定して、同じブック内に「渋谷」「新宿」シートしか無いとします。 Sub Test() Dim r As Range, ws As Worksheet, flg As Boolean With Worksheets("集計") For Each r In .Range(.Range("A2"), .Range("A65536").End(xlUp)) flg = False For Each ws In Worksheets If ws.Name = r.Value Then flg = True Exit For End If Next ws If Not flg Then MsgBox r.Value & "シートは無いよ" Next r End With End Sub これを実行すると「川崎シートは無いよ」とメッセージが出ます。 > 例えば集計表にはポイントという項目がありますが、渋谷sheetにはポイント項目はなく 可能ですが、集計シートに合わせられるなら合わせた方が簡単でしょうね。 印刷や見た目の問題なら、列をグループ化すれば済みますし。
補足
説明が分からなくてすいません。 図を書いて見ます。 A B C D E F ・・・ AZ 1 店舗 日時 製品 値段 天気 性別 備考 2 新宿 0401 P 10 晴 男 なし 3 新宿 0401 A 20 曇 女 ・ ・ 100 新宿 0430 B 20 雪 男 なし 101 渋谷 0401 102 渋谷 0401 ・ ・ 256 池袋 0401 257 池袋 0402 258 池袋 0403 : : 499 池袋 0430 500 柏 ・ ・ 5000 ・ ・ ・ 以上のようなリストが集計シートにあります。 これを、新宿シート・渋谷シート他があるので コピーしたいんです。 また、新宿シート・渋谷シート他の3行目から項目名が ありそこにあるようにコピーしたいんですが? この説明で分かっていただけますか。
関数ではダメ?
- papayuka
- ベストアンサー率45% (1388/3066)
出来るかって話なら出来ます、、、たぶん。 どこら辺までは自力で出来て、どこら辺が解らないのでしょう? > A列には集計の項目名がAZ列まであり > 1行目には店舗名が10種類あります。 私にはこの意味が良く解らず、データがどうなっているか見えません。 列と行がごっちゃになってません?
補足
補足させてもらいます。 間違えてました。 A行には店舗名が並んでいます。渋谷・新宿・品川など多数です。 1列目には日付・店舗・値段・ポイント・人などの項目が多数並んでいます。 ・自分でできること マクロでは集計のシートから店舗名のデーターごとに シート名が渋谷・新宿などに振り分けることはできま す。 ・マクロでしたいこと 集計sheetのA1のセルには店舗名が入っているのですが、その店舗名のsheet名も作らないとうまくマクロが作動しません。 また、集計sheetには川崎とありますが、sheetには 川崎sheetがありません。そうなるとマクロにエラーがでます。集計表sheetには店舗名として川崎がありますが 川崎sheetがなくてもコピーできるようにしたいんです。 また、例えば集計表sheetにある項目が全部ですが コピーする時、例えば集計表にはポイントという項目がありますが、渋谷sheetにはポイント項目はなく 新宿sheetにコピーする時、集計表sheet、渋谷sheetには色という項目がありますが新宿sheetにはありません。 というように、集計表sheetと各店舗の1列目の項目が違うので必要な項目だけを集計sheetからコピーできますか? 上記のようなことができますか? 回答よろしくお願いします。
お礼
どうもありがとうございました。 多々いたらないところがあったと思いますが、 お許しください。 また、なにかあったらよろしくお願いいたします。