[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別ブックに貼り付け』(531)
こんにちは。
「【原本】データ表.xlsm」と「基本リスト.xlsx」「マルチリスト.xlsx」「送信先リスト.xlsx」というエクセルがあり、
原本のエクセルから指定の商品コードを含む行を全シート調べてコピーし、3つのエクセルの中で同じシートがあるエクセルの最終行に貼り付ける処理を行いたいと思っています。
現在、原本のエクセルから指定の商品コードを含む行を全シート調べてコピーするところまでは出来ているのですが、その後の貼り付けの処理が分かりません。
原本のエクセルにはシートが20あり、シート2は基本リスト、シート3〜シート10はマルチリスト、シート11〜20は送信先リストに貼り付けると決まっているのですが、どうやって書けば良いか分からず、全てのシートを一つ一つ下記のように書いていると長くなってしまいました。
sh → 原本 sh1 → 基本リスト sh2 → マルチリスト sh3 → 送信先リスト
For Each sh In Worksheets If sh.Name = "シート2" Then MaxRow = Cells(Rows.Count, 3).End(xlUp).Row + 1 sh1.Cells(MaxRow, 3).Select With ActiveCell.EntireRow ActiveCell.PasteSpecial Paste:=xlPasteValues ActiveCell.PasteSpecial Paste:=xlPasteFormats End With ElseIf sh.Name = "シート3" Then MaxRow = Cells(Rows.Count, 3).End(xlUp).Row + 1 sh2.Cells(MaxRow, 3).Select With ActiveCell.EntireRow ActiveCell.PasteSpecial Paste:=xlPasteValues ActiveCell.PasteSpecial Paste:=xlPasteFormats End With ElseIf sh.Name = "シート4" Then MaxRow = Cells(Rows.Count, 3).End(xlUp).Row + 1 sh2.Cells(MaxRow, 3).Select With ActiveCell.EntireRow ActiveCell.PasteSpecial Paste:=xlPasteValues ActiveCell.PasteSpecial Paste:=xlPasteFormats End With ・・・
基本リストはC列から、他は全てD列から貼り付けです。
もう少し簡潔な書き方があるかもしれない思うのですが、どうすれば良いか分からず・・・
どうかご教示いただけないでしょうか。よろしくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>原本のエクセルにはシートが20あり、 >シート2は基本リスト、 >シート3〜シート10はマルチリスト、 >シート11〜20は送信先リストに
という部分だけ見ての発言となりますが、 条件分岐をsh.Nameではなくsh.Indexで判定するのはマズいでしょうか?
If sh.Index = 2 Then '[基本リスト]の場合の処理 ElseIf sh.Index >= 3 And sh.Index <= 10 Then '[マルチリスト]の場合の処理 ElseIf sh.Index >= 11 And sh.Index <= 20 Then '[送信先リスト]の場合の処理 End If
当然↑は、 原本各シート名とIndexの並び順が同期している (シート2のIndexは2、シート3のIndexは3...) 且つ、シートの並び順を今後も変動する事が無いのであれば、
という条件下での一例ですけど。。。
か、 Select Case で判定してしまっても多少は記述の簡素化ができると思います。
あと、 貼り付け処理の部分はサブルーチン化してしまえそうな気もしますね。何となく。 前後関係とか、With ActiveCell.EntireRowの存在がちょっと?なので 断言はできませんが。
(白茶) 2018/05/31(木) 18:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.