おはようございます。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) エクセルVBA Msgboxでの変数の活用 4 2023/07/23 08:33
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- Visual Basic(VBA) excelVBAについて。 5 2022/11/27 18:48
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
VBAでの[]
Visual Basic(VBA)
-
-
4
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
5
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
6
Application.ScreenUpdating=Falseを使うと・・・。
Access(アクセス)
-
7
VBAで Set wb = Sheets(1).Copyができないわけ?
PowerPoint(パワーポイント)
-
8
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
9
Excelでのセル内容の高速消去方法
その他(プログラミング・Web制作)
-
10
screenupdatingが機能しなくて困ってます
Visual Basic(VBA)
-
11
MIN関数で空白セルを無視したいのですが
その他(Microsoft Office)
-
12
エクセル2010 グラフの軸の最大値最小値をセル参照する
Excel(エクセル)
-
13
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
14
【VBA】ワークブックを開く時にエラーが出る場合と出ない場合の違いは?
Excel(エクセル)
-
15
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
16
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
17
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
18
VBA 最終行まで数式をコピーする
Visual Basic(VBA)
-
19
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
Excel 関数を使ってデータと一...
-
Excelの行をコピーして貼り付け...
-
【VBA】コピー&複数個所のペー...
-
Excel シートのコピーの際、ペ...
-
【Excel VBA】シートコピー時、...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
ExcelVBAで、ユーザーフォーム...
-
EXCELで別のブックから式をコピ...
-
【Excel】数式をそのまま他のシ...
-
エクセルの1シートの内容を複...
-
エクセルでシートを「移動また...
-
【エクセル】プルダウン設定の...
-
PDFファイルをコピーしてエクセ...
-
VBAで任意のファイルを読み出し...
-
Excel シート複数 金額日計表と...
-
エクセルVBAですが教えてくださ...
-
エクセルVBA 1行飛ばしで転記す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
Excelの行をコピーして貼り付け...
-
【Excel】数式をそのまま他のシ...
-
EXCELで別のブックから式をコピ...
-
【VBA】コピー&複数個所のペー...
-
エクセルの1シートの内容を複...
-
エクセルシートを別のエクセル...
-
PDFファイルをコピーしてエクセ...
-
CSVファイルについて質問です。
-
Excel 数式の保護をしたセルを...
-
【エクセル】プルダウン設定の...
-
【Excel VBA】シートコピー時、...
-
VBA シートをコピー後、ボタン...
-
エクセルVBA 1行飛ばしで転記す...
-
Excel シートのコピーの際、ペ...
-
エクセルで、開くのに時間のか...
-
Excel シートに別のExcelシート...
-
エクセルでシートを「移動また...
おすすめ情報