• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA初心者】検索して行頭移動後に行末までコピー)

【VBA初心者】ピポットテーブルを更新し、出席日数に基づいてデータをコピーしたい

このQ&Aのポイント
  • VBA初心者でRangeの使い方がよく分かっておらず、ピポットテーブルを更新し、出席日数に基づいてデータをコピーしたいと思っています。
  • 具体的には、ピポットテーブルの更新後に表全体を他のセルにコピーし、出席日数が20日以上の人と5日未満の人にフラグを付けて2次元テーブルを作成します。
  • そして、作成した2次元テーブルを元に、ユーザーの名前で該当者を検索し、該当者が見つかった場合は先頭列に移動して、出席日数が20日以上の人と5日未満の人それぞれの表にコピーします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kon555
  • ベストアンサー率51% (1845/3565)
回答No.1

 範囲選択にすることより、シートをSelectしたりセルをActivateにしている事が重くなる要因です。  そこを修正すればかなりの短縮になります。  まさにその事を解説しているページをご紹介しておきます。 http://officetanaka.net/excel/vba/speed/s2.htm

littleleo0527
質問者

補足

ありがとうございます。 「ActiveSheet.Cells(ActiveCell.Row, 1).Select」の次に、Activeなセルから表の最後の列まで選択して、別のシートにコピーしたいのですが、そこが分からなくて困っています。 ActiveSheet.Range ((ActiveCell) & Cells(ActiveCell.Row, Colum_a)) こんな感じで、今いるセルから、最後の列(colum_a)まで選択したいのですが、うまくいきません。 1セルごとではなく、範囲選択してシート間コピーすれば無駄は省けると思うのですが、分からなくてハマっています。

その他の回答 (1)

  • kon555
  • ベストアンサー率51% (1845/3565)
回答No.2

 まずは変数を用いたセルの範囲指定のやり方についてです。 http://www.dicre.com/vba/php-cells_range  またResizeを使うのも、範囲選択する一つの方法です。 https://sys-daddy.com/excel-vba-range-of-cells/amp/ https://www.moug.net/tech/exvba/0050058.html  ただ先だって回答したように、現状のコードを高速化する場合、『範囲指定する』という事以上に有効な方法は多々ありますので、その点はご注意下さい。

littleleo0527
質問者

お礼

いろいろ教えていただきありがとうございます。 以下の記述に変更して、80%以上処理時間を短縮できたので最高の気分です。 ActiveCell.Offset(0, -16).Activate Selection.Resize(1, Colum_End).Select Selection.Copy Sheets("20日以上の人").Select ActiveCell.PasteSpecial (xlPasteValues) ActiveCell.Offset(1, 0).Activate Sheets("メンバー一覧").Select ActiveSheet.Range("Q3").Select Row_a = Row_a - 3 ActiveCell.Offset(Row_a, 0).Activate 教えていただいた通りにできたら、もっと短縮できるんですよね。 今の私では難しいけど、今後チャレンジしてみたいと思います。ありがとうございました。

関連するQ&A