- ベストアンサー
シート間のコピー
最近私の質問が多くて恐縮ですが。。。 表題ですが、1つのExcelBOOKに2つのシートを持たせ ており、更に別BOOKの数値を集計して、片方のシートに に集計結果を出力しているのですが、1つ目のシート集 計が終了した後で、その結果のある範囲のみ、2つ目の シートにコピーしたいのですが。。。 同一BOOK内の複数シートの処理はどのように処理させれ ば良いでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> 最近私の質問が多くて恐縮ですが と本気で思っているのなら、たまには他人の質問にも答えてみましょう。 (1) 自分の理解やコミュニケーション能力の確認、向上につながる。 (2) 多くの人が疑問に思う(いわゆるひとつの「FAQ」ですネ)のはどんな問題なのか、把握できる。 → 類似する問題に直面したときに応用が利くので、似たような質問を繰り返さずに済む。 といったメリットがあります。 (というか、他人の発言を読まない人ほど、しょうもない質問を何度も繰り返す傾向が強いのが現実です) ・・・本題に戻りますが・・・。 > 同一BOOK内の複数シートの処理はどのように処理させれ ば良いでしょうか? 直接の答えではなく、問題解決の「考え方」ですが、Excelには「マクロ記録」という便利な機能がありますので、これを有効に活用しましょう。 (1) 「自分が実現したい動作」をマクロ記録する。 (2) 上記で記録したマクロ(VBA)コードを推敲して、完成品にする。 ポイント(ミソ)は(1)です。 これを知らないと、「自分が実現したい動作」が100あると、100回質問するハメになります。(^^; (「応用が利かない」の典型例) > 1つ目のシート集計が終了した後で、その結果のある範囲のみ、2つ目の > シートにコピーしたいのですが。。。 一例ですが、「Sheet1のC~F列、51~100行目をSheet2のE列31行目にペーストする」場合、下記の 要領です。 Public Sub Test() Sheets("Sheet1").Select ActiveSheet.Range("C51:F100").Copy Sheets("Sheet2").Select ActiveSheet.Range("E31").Select ActiveSheet.Paste End Sub 注意点ですが、「マクロ記録」ではプログラム作成者が必要としない動作まで記録されてしまいますので、適切な修正を加えないと完成度、品質の低いコードとなってしまいます。 極端な例ですが、「E列36行目のセルのフォントをMSゴシックの9ポイントに変更する」マクロをマクロ記録で自動生成すると、下記のコードになります。 1 Sub Macro1() 2 ActiveWindow.SmallScroll Down:=6 3 Range("E36").Select 4 With Selection.Font 5 .Name = "MS ゴシック" 6 .FontStyle = "標準" 7 .Size = 9 8 .Strikethrough = False 9 .Superscript = False 10 .Subscript = False 11 .OutlineFont = False 12 .Shadow = False 13 .Underline = xlUnderlineStyleNone 14 .ColorIndex = xlAutomatic 15 End With 16 End Sub このうち、2、6、8~14行目は不要(変更しないプロパティは定義する必要がないため)ですので、大幅に簡略化できます。↓ Public Sub Macro1() With ActiveSheet.Range("E36").Font .Name = "MS ゴシック" .Size = 9 End With End Sub ちょっと極端な例ですが、マクロ記録で生成したコードを利用する際はムダな箇所を省けないか、常に確認した方がよいでしょう。 長文、失礼しました。 m(_ _)m
その他の回答 (1)
- taisuke555
- ベストアンサー率55% (132/236)
nanashinogombeiさんの前半部分(1)、(2)、もっともだと思いました。 回答できずとも、質問に対して考えてみて、 他の回答者がどのような回答をするかを見ていくだけでも、 ずいぶん勉強になると思います。(一種の問題集ですね) 私も回答させて頂いてますが、かなり能力UPしてると思います? (上級者の方からすれば、まだまだでしょうが・・・) で、本題です。 Public Sub Test1() Sheets("Sheet1").Range("C1:F10").Copy Sheets("Sheet2").Range("E5") End Sub Public Sub Test2() Sheets("Sheet2").Range("E5:H14").Value = Sheets("Sheet1").Range("C1:F10").Value End Sub という書き方もできると思いますよ。 マクロの記録をしたら、その文をヘルプで確認し、 自分の物にする事が大切だと思います。 (#1さんの例でも何故必要ないか分からないと削除もできませんね)
お礼
ありがとうございました。
お礼
大変ご丁寧なご回答、ありがとうございました。 確かに。。。他の質問の中で似ているものがないか はじめに検索は行うようにはしていますが、習慣付 いてはおらず、ただ質問していることが多い気がし ます。実は投げかけておいて、自分の中だけで解決 できたことも何度かあります。(もちろんどうしよ うもない事柄の方が多いですが。。。汗) おっしゃるとおり、回答側にまわってみるのもいい かもしれませんね。いつも適切なご指摘、ありがと うございます。