- ベストアンサー
マクロで表のデータをコピー・貼り付けする方法と注意点
- office2003を使用している場合、sheet1のデータをsheet2に貼り付けるマクロを作成する方法について説明します。sheet1とsheet2の表の構造が異なるため、注意が必要です。
- sheet1からsheet2への貼り付けは選択したデータのみ行われ、貼り付け先の列も変更されます。また、sheet2の表には数式が含まれるため、適切な書式設定が必要です。
- sheet1の表は可変データであり、セルの結合も存在します。sheet2の表の罫線もデータに応じて引かれます。マクロの作成は初心者向けの内容ですが、注意が必要な点もあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これも他人に丸投げで依頼している。ここはコード作成委託コーナーではなかろう。 ーー 初心者で在れば、シートにセル結合があれば、別シートにSheet1をコピー貼り付けし、手動でセル結合を 解いて それから考えることをお奨めする。(見出し行でのセル結合は関係ないと思うが)。 セル結合があるとするとVBAでは面倒になるのだ。私なら表設計段階から考えておく。 ーーー データ情況が読者側でシートに再現できない。 例示されたデータがわかりにくい。質問文で個別に説明が必要だろう。 VBAコードはセル位置や情況が正確にわからないとコードは作成できない。 回答のコードを読み解く質問者が初心者であれば、そっくりコピペのコードを期待していて、自分の場合に合わせて修正も出来るかどうか、わからないだろう。だったらなおさらだ。 A B C D E F G No. 名前 上)住所 年齢 商品 金額 担当者 ーー ーー 下)電話 1 アイウエオ 秋田 20 A 10,000 タナカ ーー ーー 123456 とでも書けばわかるかも。ーーは空白セルだが左寄せ表示防止のため要れッた。 秋田 123456の部分がよくわからない、セル結合か、セル内改行か。 何処のセルにセル結合があるのか。見出し行でのセル結合は関係なかろう。 Sheet2の方は、普通のリスト形式(テーブル形式のようだが) 上)下)は同一セル内の上下という意味か。セル結合してあるのか。 抜粋条件は質問に書いているか。 原価は何処から持ってくるのか。 >小数点第二位表示です。セルの書式は右寄せや中央、桁区切りがあります。 コンなのは初心者であれば、手動で表示形式を設定するので「我慢するのだ。 >sheet1は可変データです。 何の意味。こういう作業が今後もあって、その場合Sheet1の行数が増減するという意味なら、欠かなくても良いことだ。 ーーー Sheet1の1単位からSheet2の1行にデータを持って来れば良いようだ。 基本パターンは(ひとつのやり方だが) Sub test01() d = Worksheets("Sheet1").Range("A65536").End(exup).Row 'sheet1 の最下行 k = 2 'Sheet2の書き出しは代2行目からと仮定 For i = 2 To d Step X 'Sheet1では何行おきかで、処理するのかな? '(Sheet2の1行分の処理。各列=項目の代入) With Worksheets("Sheet2") .Cells(k, "A") = XXXX .Cells(k, "B") = YYYY .Cells(k, "C") = ZZZZ '・・・・・ k = k + 1 End With Next i End Sub のようなパターンで出来そうではないかな。 これを見て頭を整理してみて。 ーー 次の点は質問から不明で説明できない。 (1)この場合はXに当たる数はいくらか=Sheet1では1人分は何行使って居るか Sheet2では1人分は1行だよね。 (2)XXXX,YYYY・・はSheet1のセルの値から代入することになるだろうが、単純に =Worksheets(”Sheet1").cells(i,○)(○は列指定)と書けるのはどの項目か、考えて作ってみると良い。 (3)(2)以外で右辺の書き方で難しいと思った列があれば、その点に絞って質問のこと。 セル結合していても一番上や一番左のセルに値があると思えば仕舞いなんだが。
その他の回答 (1)
- mu2011
- ベストアンサー率38% (1910/4994)
>マクロは初心者同然で自動マクロ程度のレベルです。 >わかりにくい説明で申し訳ありませんがご教授ねがいます。 ⇒ご質問者のレベルではできないと判っていながら依頼を受ける事が問題です。 リードタイムに余裕があればVBAを学習してからです、ビジネスならばできない事はできないということも責任と思います。 因みにこの程度ならばワークシート関数でもできる(但し、罫線の自動設定はできない)のだから 関数での実現を考えては如何でしょうか。 例えば、A列からの抽出ならば、=IF(INDEX(Sheet1!A:A,(ROW()-1)*2,)<>"",INDEX(Sheet1!A:A,(ROW()-1)*2,),"")で可能ですので後は数式の列名を変更して下さい。
お礼
返事が遅くなり申し訳ないです。おっしゃる通りなんです。なんでも異動された前任者がよく出来た方らしく、上司が若い人はみな出来るもんだと断っても何とか頼むの一点張りで…ご迷惑おかけしました。説明不足だらけでお答えいただき感謝しています。
お礼
返事が遅くなり申し訳ないです。おっしゃる通りなんです。なんでも異動された前任者がよく出来た方らしく、上司が若い人はみな出来るもんだと断っても何とか頼むの一点張りで…ご迷惑おかけしました。でも今回の事で勉強しようと思います。説明不足だらけでお答えいただき感謝しています。