[解決済み】Excel VBAでSelectを使用しないようにする方法
質問
を使うのが嫌だという話はよく聞きます。
.Select
のExcel VBAで、これを使わないようにするにはどうしたらいいか迷っています。しかし、どうすれば使わないで済むのかがわかりません。
Select
関数を使用します。しかし、どのように参照すればよいのかがわかりません。
ActiveCell
を使用しない場合は
Select
.
を発見しました。 レンジに関するこの記事 と selectを使用しない場合の利点に関するこの例 に関するものは見当たりません。 どのように .
解決方法は?
セレクトを回避するためのいくつかの例
使用する
Dim
d変数
Dim rng as Range
Set
を必要な範囲に設定します。単一セルの範囲を参照する方法はたくさんあります。
Set rng = Range("A1")
Set rng = Cells(1, 1)
Set rng = Range("NamedRange")
または複数セルの範囲。
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1, 1), Cells(10, 2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10, 2)
あなた
できる
へのショートカットを使用します。
Evaluate
しかし、これはあまり効率的ではなく、一般に実運用コードでは避けるべきでしょう。
Set rng = [A1]
Set rng = [A1:B10]
上記の例はすべて
アクティブシート
. アクティブなシートのみで作業したい場合以外は、Dim
Worksheet
という変数もあります。
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Set rng = ws.Cells(1, 1)
With ws
Set rng = .Range(.Cells(1, 1), .Cells(2, 10))
End With
もし、あなたが
する
で作業したい。
ActiveSheet
というように、明示した方が分かりやすい。しかし、いくつかの
Worksheet
メソッドは、アクティブなシートを変更します。
Set rng = ActiveSheet.Range("A1")
ここでも
アクティブなワークブック
. 特に
ActiveWorkbook
または
ThisWorkbook
を使用したほうがよいでしょう。
Workbook
という変数もあります。
Dim wb As Workbook
Set wb = Application.Workbooks("Book1")
Set rng = wb.Worksheets("Sheet1").Range("A1")
もし、あなたが
する
で作業したい。
ActiveWorkbook
というように、明示した方が分かりやすい。しかし、多くの
WorkBook
メソッドは、アクティブなブックを変更します。
Set rng = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
を使用することもできます。
ThisWorkbook
オブジェクトを使用して、実行中のコードを含むブックを参照することができます。
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")
よくある(悪い)コードは、ブックを開いてデータを取得し、再び閉じるというものです。
これはまずい。
Sub foo()
Dim v as Variant
Workbooks("Book1.xlsx").Sheets(1).Range("A1").Clear
Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = ActiveWorkbook.Sheets(1).Range("A1").Value
Workbooks("SomeAlreadyOpenBook.xlsx").Activate
ActiveWorkbook.Sheets("SomeSheet").Range("A1").Value = v
Workbooks(2).Activate
ActiveWorkbook.Close()
End Sub
といった感じでいいのではないでしょうか。
Sub foo()
Dim v as Variant
Dim wb1 as Workbook
Dim wb2 as Workbook
Set wb1 = Workbooks("SomeAlreadyOpenBook.xlsx")
Set wb2 = Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = wb2.Sheets("SomeSheet").Range("A1").Value
wb1.Sheets("SomeOtherSheet").Range("A1").Value = v
wb2.Close()
End Sub
に範囲を渡します。
Sub
と
Function
をRange変数とする。
Sub ClearRange(r as Range)
r.ClearContents
'....
End Sub
Sub MyMacro()
Dim rng as Range
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:B10")
ClearRange rng
End Sub
また、Methods を適用する必要があります。
Find
と
Copy
) を変数に変換します。
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10")
Set rng2 = ThisWorkbook.Worksheets("SomeSheet").Range("B1:B10")
rng1.Copy rng2
セルの範囲をループする場合、まず範囲の値を変量配列にコピーして、それをループする方が良い(速い)ことが多い。
Dim dat As Variant
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10000")
dat = rng.Value ' dat is now array (1 to 10000, 1 to 1)
for i = LBound(dat, 1) to UBound(dat, 1)
dat(i,1) = dat(i, 1) * 10 ' Or whatever operation you need to perform
next
rng.Value = dat ' put new values back on sheet
これは、何が可能かを示す小さなテイスターです。
関連
-
[解決済み] ブレークモードでマクロを実行できない
-
[解決済み] Excelで列のすべてのセルに同じテキストを追加する
-
[解決済み] エクセルVBAで行を削除する
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Excel の相互運用オブジェクトを適切にクリーンアップするにはどうすればよいですか?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】VBAの関数から結果を返す方法
-
[解決済み】Excel 2013で.csvファイルを正しく表示する方法は?
-
[解決済み] エクセルで、ある変数を一定に保ち、他の変数を行によって変化させる方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Doエラーにならないループ
-
[解決済み] Excel VBA オートメーション エラー。呼び出されたオブジェクトは、そのクライアントから切断されました。
-
[解決済み] SSISのエラーコードです。0x80040E37
-
[解決済み] VB: タイプライブラリ/DLL の読み込みにエラーが発生しました。(HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY) からの例外)
-
[解決済み] VBAにはコメントブロックの構文がありますか?[重複しています]
-
[解決済み] スプレッドシートに無限大はあるのか?
-
[解決済み] Microsoft Excelで行数制限が残っているのはなぜですか?[クローズド]
-
[解決済み] VBA+エクセル+トライキャッチ
-
[解決済み】.text、.value、.value2の違いは何ですか?
-
[解決済み] データ列全体の先頭または末尾の空白を削除する