
おはようございます。
ExcelのVBAを独学しております。
いまさらな質問だとは思いますが、
そこで、色々調べていたところ
「Select」はあまり使うな!
ということが良く出てきました。
selectを使わず、上手くシート移動などができるのでしょうか?
私が組んでいるものは、色んなシートを切り替えなければならなく、
毎回Selectしています。
Activateを使ったこともありますが、
エラーが多発し、良く分からなかったためSelectを使用しています。
出来れば、シートをアクティブにすることなく
操作ができれば良いのですが・・・
例)「データ」「コピー」のシートがあります。
「データ」シートのAからD列を「コピー」シートにコピー
しようとするものです。
WorkSheets(データ).select
Range("A1").select
Range("A:D").select
selection.copy
Worksheets("コピー").select
Range("A1").select
ActiveSheet.Paste
どうしてもSelectを多様してしまいます。
●Selectを使わないデータの入力方法
●Selectを使わず、シートをアクティブにしなくても良い参照方法
●どうしてもSelectを使わないといけない場面
●Selectを使うのを回避するためには・・・
などなど、ご存知でしたら回答お願い致します。
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
-----------------
この回答への補足
回答ありがとうございます!
シート名まで変数にしてしまうと、
色んなシートがあるので変数迷子になってしまいそうなため
今まで変数に格納することは避けてきました。
他の人が見た際に分かりやすいプログラム
(他の人が見ても編集できるプログラム)を書きたいと
思ったのですが、やはり難しそうです・・・
回答ありがとうございました!
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)しなくとも、指定すれば動きます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excelの行をコピーして貼り付け...
-
Excel 関数を使ってデータと一...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルのユーザーフォームを...
-
VBA 先頭文字の0(ゼロ)...
-
EXCELのVBAでシートコピーをし...
-
エクセルのシートコピーした際...
-
EXCELで別のブックから式をコピ...
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
Excelシートを何も変えず他のBo...
-
エクセルのページをシートごと...
-
EXCEL2007でシートをコピーする...
-
シートをたくさんコピーするに...
-
Excel 複数 シートコピー 同...
-
Excel シートに別のExcelシート...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
標準モジュール、フォームを別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
Excelの行をコピーして貼り付け...
-
EXCELで別のブックから式をコピ...
-
エクセルでシートを「移動また...
-
【エクセル】プルダウン設定の...
-
エクセルの1シートの内容を複...
-
EXCEL2007でシートをコピーする...
-
Excel シートのコピーの際、ペ...
-
ページの設定を別シートにコピ...
-
CSVファイルについて質問です。
-
エクセルのワークシートをUSBメ...
-
PDFファイルをコピーしてエクセ...
-
エクセルシートを別のエクセル...
-
Excel 数式の保護をしたセルを...
-
ExcelVBAで、ユーザーフォーム...
-
【VBA】コピー&複数個所のペー...
-
エクセルのシートコピーした際...
-
VBA シートをコピー後、ボタン...
おすすめ情報