おはようございます。
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(エクセル)
-
Application.ScreenUpdating=Falseを使うと・・・。
Access(アクセス)
-
-
4
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
5
Excelでのセル内容の高速消去方法
その他(プログラミング・Web制作)
-
6
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
7
VBA アクティブでないシートのセルを選択したり、クリアしたり
Excel(エクセル)
-
8
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
9
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
10
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
11
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
12
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
13
VBAコード記述に際して、コード全体を自動的にインデント付ける方法
Access(アクセス)
-
14
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
15
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
16
VBAで Set wb = Sheets(1).Copyができないわけ?
PowerPoint(パワーポイント)
-
17
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
18
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
19
VBAで配列の計算
Excel(エクセル)
-
20
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルのユーザーフォームを...
-
EXCELで別のブックから式をコピ...
-
Excel Selectは使わない? VBA
-
エクセルのページをシートごと...
-
エクセルのワークシートをUSBメ...
-
エクセルの1シートの内容を複...
-
JWWのショートカットキーが使え...
-
標準モジュール、フォームを別...
-
エクセルのシートコピーした際...
-
excelでシートのコピーが出来ない
-
【Excel】数式をそのまま他のシ...
-
EXCEL2007でシートをコピーする...
-
Excel シートのコピーの際、ペ...
-
エクセルVBA 1行飛ばしで転記す...
-
excl2013 縦の表を横にVBAです...
-
シートをたくさんコピーするに...
-
エクセルのワークシートがコピ...
-
シートが保護されていないのに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
【Excel】数式をそのまま他のシ...
-
エクセルの1シートの内容を複...
-
【VBA】コピー&複数個所のペー...
-
EXCELで別のブックから式をコピ...
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
エクセルVBA 1行飛ばしで転記す...
-
Excel 数式の保護をしたセルを...
-
Excelの行をコピーして貼り付け...
-
エクセルのワークシートをUSBメ...
-
シートが保護されていないのに...
-
エクセルシートを別のエクセル...
-
VBA シートをコピー後、ボタン...
-
【Excel VBA】シートコピー時、...
-
Excel シートに別のExcelシート...
-
【スプレッドシートで】xlsx形...
-
PDFファイルをコピーしてエクセ...
おすすめ情報