• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel Selectは使わない? VBA)

Excel VBAで使わない!?Selectを回避する方法とは?

このQ&Aのポイント
  • ExcelのVBAを独学している方にとって、Selectの使用について疑問が浮かぶことがあるかもしれません。本記事では、Selectを使わずにシートの操作を行う方法や、Selectの回避が必要な場面について解説します。
  • Excel VBAでデータの入力やシートの切り替えを行う際、Selectを使用する方法が一般的ですが、実はSelectを使わない方法も存在します。本記事では、Selectを使わずにデータを入力する方法や、シートをアクティブにしなくても良い参照方法について詳しく説明します。
  • Excel VBAでシートの操作を行う際、Selectを使わない方法を探している方も多いかもしれません。本記事では、Selectを回避するための具体的な方法や、Selectを使わないといけない場面について解説します。また、Selectを使わないことによるメリットや注意点についても触れます。Excel VBAの学習を進める上で、Selectの使い方に悩んでいる方は必見の内容です。

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

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

ご提示のコードは、VBAというよりマクロですね。やりたいことを直接やるのではなく、人間がコピーするのだったらこうするなという操作を忠実に再現しようとしているように見えます。 ●どうしてもSelectを使わないといけない場面 通常はありません。強いて言うなら、処理中シートを切り替えながらいろいろやっている様子をみせ、「なんかいろいろやっているんだな」という印象を与えたい時ですね。もしくは、結果だけが同じになればいいというわけではなく、完全に人間と同じ操作をさせたい場合。そんな場合があるのかわかりませんが。 通常はコピーさえできればいいので、人間と同じ方法を忠実に再現させるなどということはしません。そんなことをすると処理が遅くなりますし。 select ActiveSheet copy Paste この辺は普通は使用しません。遅いし、素人っぽく思われます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●Selectを使うのを回避するためには・・・ 例0の書き方から、例1や例2の書き方に変えればOKです。例0や例2の場合には、それだけだと1つのシート内の操作しかできません。あるシートの内容を別のシートに書き込むという場合には例1のような書き方が必要になります。 複数のシートを扱う場合には「どのシート」という指定を省略してしまうとあいまいになりバグを埋め込む原因にもなりかねません。『「どのシート」の「どの部分」』を両方明示した方がいいです。 ご提示のコードを丸ごと書き換えると、例3のような感じにするといいと思います。Dまで選択する必要があるのか、値以外の書式などをコピーする必要があるのかわかりませんので、「A1の値のみをコピーする」という内容で書いています。 いくつかの値をコピーすると言う場合には、詳しくは書きませんが、RangeではなくCellsを使いFor文などで繰り返し処理をするといいでしょう。わからなければ最初は s2.Range("A1").Value = s1.Range("A1").Value s2.Range("B1").Value = s1.Range("B1").Value などと複数行書いていくのがいいと思います。 例0 ------------- WorkSheets("データ").select Range("A1").select ----------------- 例1 ------------- Dim s As Worksheet Set s = Worksheets("データ") s.Range("A1").select ----------------- 例2 ------------- With ThisWorkbook.Sheets("データ") Range("A1").select End With ----------------- 例3 ------------- Dim s1 As Worksheet Dim s2 As Worksheet Set s1 = Worksheets(データ) Set s2 = Worksheets(コピー) s2.Range("A1").Value = s1.Range("A1").Value -----------------

satoron666
質問者

補足

回答ありがとうございます! シート名まで変数にしてしまうと、 色んなシートがあるので変数迷子になってしまいそうなため 今まで変数に格納することは避けてきました。 他の人が見た際に分かりやすいプログラム (他の人が見ても編集できるプログラム)を書きたいと 思ったのですが、やはり難しそうです・・・ 回答ありがとうございました!

その他の回答 (1)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy ↓ ↓ WorkSheets("データ").Range("A:D").copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste ↓ ↓ Worksheets("コピー").Range("A1").PasteSpecial つまりは Sub Macro1() Worksheets("データ").Range("A:D").Copy Worksheets("コピー").Range("A1").PasteSpecial End Sub 選択(Select)しなくとも、指定すれば動きます

satoron666
質問者

お礼

回答ありがとうございます。 1つにまとめれば大丈夫!という感じでしょうか? ありがとうございました!

関連するQ&A