セル選択を左右に移動する

Offsetを使用して、対象セルを左右に指定数値分移動させるコード

'アクティブセルを1つ右のセルに移動します
ActiveCell.Offset(0, 1).Select
'アクティブセルを3つ右のセルに移動します
ActiveCell.Offset(0, 3).Select
'アクティブセルを1つ左のセルに移動します
ActiveCell.Offset(0, -1).Select
アクティブセルの右方向への動き
ActiveCell.Offset(0, 1).Selectの動き

ワークシートに常に1つあるアクティブセルを1つ右に移動します
A1がアクティブであった場合は、B2がアクティブセルになります
どれだけ右方向に移動するかは、数値を変更すれば可能です

アクティブセルの右方向への大きな動き
ActiveCell.Offset(0, 3).Selectの動き

引数の数値を変更すれば大きく一気にセルを移動させることが出来ます

アクティブセルの左方向への動き
ActiveCell.Offset(0, -1).Selectの動き

また、数値をマイナスにすると左方向に進みます。D1がアクティブだった場合は、C1がアクティブセルになります
こちらも数値をマイナス方向に大きくすれば大きく移動できます

アクティブセルの左移動時のエラー発生

セルのA1から「ActiveCell.Offset(0, -1).Select」を実行すると画像のような実行時エラーが発生します
実行時エラーなので実行されないとエラーが発生しないので、Offsetをコードで使用する際はしっかりと処理終了までの動作テストは行いましょう
これは存在しないセルへの参照が行われた時点で発生します、当然最大列数を超える数値の参照も同じエラーが発生します

なおこの移動処理は、1ずつ移動させるより大きな数値で一気に移動させたほうが処理速度が圧倒的に向上します
ループ処理などで変数に移動する数値を計算してから、移動させるほうが1ずつ検証していくより速くなるのでセルの選択は工夫してみてください

セル選択を上下に移動する

Offsetを使用して、対象セルを上下に指定数値分移動させるコード

'アクティブセルを1つ下のセルに移動します
ActiveCell.Offset(1, 0).Select
'アクティブセルを100下のセルに移動します
ActiveCell.Offset(100, 0).Select
'アクティブセルを1つ上のセルに移動します
ActiveCell.Offset(-1, 0).Select
アクティブセルの下移動の動き
ActiveCell.Offset(1, 0).Select実行時

ワークシートに常に1つあるアクティブセルを1つ下に移動します
A1がアクティブであった場合は、A2がアクティブセルになります
どれだけ下方向に移動するかは、数値を変更すれば可能です

アクティブセルの下移動の大きな動き
ActiveCell.Offset(100, 0).Select実行時

数値を100とすれば、一気に100行分下に移動することが可能です

アクティブセルの上移動の動き
ActiveCell.Offset(-1, 0).Select実行時

また、数値をマイナスにすると上方向に進みます
A101がアクティブだった場合は、A100がアクティブセルになります
もちろんこちらも数値を大きくすればそれだけ移動行数も大きくなります

アクティブセルの上移動時のエラー発生

ただ、数値を大きくしすぎたりしてセルの存在しない方向への移動を行おうとするとエラーが発生します
A1から「ActiveCell.Offset(-1, 0).Select」を実行すると画像のエラーメッセージが表示されます
これは移動だけでなく、参照だけでエラーになるので入力やプロパティの取得などでも同様のエラーが発生しますのでOffset使用時はその数値が範囲を超えないかを注意して使用します

おすすめ書籍

サイト管理者の実際に持っているおすすめの書籍の紹介です

実際に購入して愛読している書籍を紹介していきます
順番に意図はありませんので、気になった書籍はリンクから確認してみてください
アフィリエイトではありませんし、今後するつもりも無いので本当に実際に読み続けていかにVBAの為になるかを実感した書籍ばかりです
この著者の方々に追いつくことは無理でも、少しでも近づきたいものです

Excel VBAパーフェクトマスター

書籍へのリンク 
https://www.shuwasystem.co.jp/book/9784798027098.html

著者 土屋和人氏

もはやこれ無しにVBAを語る言葉を持ちません
この書籍は入門から中級を抜けるまでの内容がオールカラーで非常に分かり易く書かれています
また引数や定数も載っているので、この本を開けば処理作成に困ることがありません
まさに、必須の1冊と言ってもええんちゃうかと思います
この書籍のおかげでこうして、人にVBAを教えることができるまでに成長したのは間違いありません
画像も多くオールカラーなので非常に見やすいです
非常に広い範囲の内容が書かれておりすぐに使える内容も多いのに解説がしっかりとされているので基礎勉強にもしっかり使えます
自分はこれを基本に後は特化書籍を手に入れるようにしています
それほどにこの書籍はベースに向いています
自分の持っているのがこの2010までの分なので、これは絶版になっていますが新しいExcelへの対応した分がありますのでそちらを検討ください

Excel VBA ポケットリファレンス

書籍へのリンク
https://gihyo.jp/book/2010/978-4-7741-4440-5

著者 前田智美氏

初めて買ったVBAの書籍です
VBAを始めてネット情報やマクロの記録だけでやっていて限界を感じて、やっぱり本がいるんちゃうかと思って、とりあえずやりたいことがサクッと載ってるやつがええやろと思い購入しました
リファレンスとあるように、目次からやりたいことがすぐに調べて使用できます
ただ書式の書き方が独特で、オブジェクトや変数がある程度理解していないとよくわかりませんでした
今でこそ、まったく詰まることなく読めるしリファレンスとして無駄な説明は極力少なくする必要がある中、あ~そういうことか~と感じ入る内容がたくさんありました
この理解力に至る前に読むと、中に書いてある非常に素晴らしい情報をうまくキャッチできない可能性はあります
初心者は脱却して、とりあえずうろ覚えのコードを調べるための持ち歩き書籍として有用だと思います

Excel VBAでIEを思いのままに操作できるプログラミング術

書籍へのリンク
https://book.impress.co.jp/books/3384

著者 近田伸矢氏・植木悠二氏・上田寛氏

この本は本当に運命的なタイミングでした
この本を購入した当時、ちょうど初めてWebシステムの操作をできないかと依頼されIEの操作ができることは知ってはいたが、勉強したわけではなかったのであまり思ったように処理作成が進んでいませんでした
そんなときに、この作業のすすみの悪さはやはり知識不足が原因であり
それを補うのがWeb情報の断片的なものでは限界があるのでは?と感じ始め、体系立てて学習できる書籍を探すことに決めて大きな書店にいってすぐに発見しました
それまで書店にいけば必ずVBA本は確認するようにしていたので、だいたい見覚えてしまっていたので記憶の中にこの系統の本が無かったのに発見したのです
本屋さんで思わず「これやん!」と声を上げてしまいましたが、中をサラッと見てさらに思わず「いやいや!これやん!!」とまた声が出ました
少し前にほんのさわり程度のHTMLはやっていたのが幸いし、非常に分かり易かったです
さらにIE制御特有の考え方も初めにしっかり記載されているため、コードに入る前からの導入がすばらしいです
そして、HTMLの代表的なタグを実際の動きと使い方を1つ1つ丁寧に解説されていたので、HTMLに精通する必要無く処理を作成できることも分かりました
また、それまで言葉しか知らなかったWinAPIの使用方法も分かり易く載っていたのでこれでIE制御だけでなくWinAPIもなんとなく使えるようになりました
やはり特化書籍なので、この本1冊でIE制御における処理はカバーできます
仕事上でWebのクロールは無いので、ほとんどがWebシステムの操作性向上でしたが、おかげ様で貢献できたのは本当に良かったです

ひと目でわかるPower Apps ローコードで作成するビジネスアプリ入門

書籍へのリンク
https://www.amazon.co.jp/dp/482225397X/

著者 奥田 理恵氏

VBAに関係ない本の紹介になってしまいますが、業務効率化を行っている上で非常に有用な書籍になりますので紹介しておきます
この書籍は、PowerAppsというアプリの解説書になります
これはOffice365等で利用可能なWebアプリになり、Web上でアプリ開発を行うことが出来るアプリです
Web上で開発出来ることから開発環境をPCに依存せず行うことが出来ます
作成したアプリはスマートフォンでも利用可能です
また、作成する方法もある程度Officeソフトを操作したことがある人なら多少は直感的に作成することが出来ます
関数とプロパティ・イベントを使用することでボタンをクリックすることで処理を実行することが出来ます
また同じくOfficeアプリのPowerAutomateとも連携させることが出来るので、そちらも利用することでより広い範囲の処理を行うことが出来ます
PowerAutomateに関しては、この書籍では多く解説を割いていないので別途勉強する必要はありますが、連携に関しては十分な解説があります
そして、何よりこの書籍の最大のおすすめ点が、2020年7月時点では唯一の解説書である点です
上記にあるように、Webアプリのため更新が行われていることもあり、以前の解説書などではすでに情報が古くなっており操作画面に相違があったり、また使用できる関数に関してもアップグレードが随時行われており、古い関数がサポート終了していっているものもあります
2020年7月より大幅な変更点がない限りは購入して問題ありません
関数の一覧が地味に役に立ちます

SQLの絵本 第2版 データベースが好きになる新しい9つの扉

書籍へのリンク
https://www.seshop.com/product/detail/21922

Accessデータベースを使いだした頃はWeb情報を参考にして、コピペなどで対応してきましたが、やはり基礎内容がはっきり理解していないため応用力に乏しく
なかなか思い通りにSQLを扱いきれていませんでした

そんな時にSQLの勉強をする必要性を感じて、最初は図書館でSQLの本を適当に数冊読んでみました
その中でも特に分かりやすく、また自分の求めているレベルの内容にベストマッチしたのがこの本でした

そして実際に購入して、この本を元に検証を行いながら処理を作成し始めました
SQLを極めたいわけではない自分にとって、それほど複雑なSQL文を作成する必要はありませんし、理解する必要もほぼありません
最低限の基礎内容を理解できれば手数は増えても思い通りの処理を作成できれば良いからです

そんな自分の欲求を見事に満たしてくれる、絵本という名の通りイラストによって分かりやすく解説が行われています
Accessが無い環境で実際のデータベースでテストが出来ない環境において、このイラストでイメージを分かりやすく伝えてもらえるのは、自分と同じ環境にある場合は重宝します

SQLの複雑な部分については特にそれほど記載は無いので、見本文を見ながらすぐに実践出来ます
この本を片手に構文作成しながら、着実に理解を進められます

ExcelVBAでAccessデータベースを操作するなら、この本にある内容を理解できれば十分です
まずはここから勉強してみてください

他の書籍もおいおい追記していきます

全てのセルを選択する

Selectメソッドを使用してワークシートの全体を範囲選択するコード

'ワークシートのセル全体を選択
Cells.Select
全てのセルを選択した状態

アクティブシート(表示されているシート)のセル全体を選択状態にします
このセル全体選択は、RangeではなくCellsというオブジェクトに対して行います
Rangeで全体選択は不可ではありませんが、無駄な使い方でややこしいので、ここではCellsを使ったほうが楽です

固定番地と相対番地

RangeとCellsはどちらも同じセルを扱うオブジェクトです
ですが、使い分けとしての考え方はRangeは固定番地を扱う場合
Cellsは相対番地を扱う場合に分けてもらうといいです

固定番地は、定まって動かない番地指定です
A1やB5などがそうです、これは動くことはありません
対して相対番地は、前に来るオブジェクトからの参照になります
例えば、「Range(”A1″)」と「Cells(1,1)」は同じ場所を指定しています
固定番地はいいとして、相対番地の場合の考え方はCellsがワークシート全てのセルと解説しました。
アクティブシートの全セル範囲の中で1行目1列目のセルという考え方です
アクティブシートは省略されているので、もともとは「ActiveSheet.Cells(1, 1)」が 「Cells(1,1)」 が同じ意味になります

全てのセルに対してのCells範囲

画像のような位置関係になります
A1が1,1でB2は2,2になっています
これはCellsの対象がこの範囲なので固定番地との差が分かりにくいかもしれません

選択範囲に対してのCells範囲

そこで対象範囲を変更してみます
この画像での対象範囲は「Selection.Cells(1, 1)」とします
上の範囲のCellsの位置数値と全く同じ個所が、別の固定番地に変わっています
Cells(1, 1) がA1だったのに対し、 Cells(1, 1) がC6に変わります
これが相対番地の考え方になります

この指定範囲でのセル番地指定はRangeでは当然行えないので、この場合にCellsを使用する必要があります
このRangeとCellsの使い分けがしっかり頭の中で行えるようになったら、セル指定に迷うことは無くなると思います

初心者のうちは、なんとなく小難しいので使い分けは基本はRangeで、全セル選択はCellsを使うって感じでええかな

離れた行・列を選択する

Selectメソッドを使用してワークシートの離れた行列を選択するコード

'ワークシートの1行目と3行目から5行目を選択
Range("1:1, 3:5").Select
'ワークシートのA列とC列からE列を選択
Range("A:A, C:E").Select
離れた行の範囲選択状態
Range(“1:1, 3:5”).Select実行時

アクティブシート(表示されているシート)の1行目と3行目から5行目を選択状態にします
「,」で区切れば、範囲選択を増やせます

離れた列の範囲選択状態
Range(“A:A, C:E”).Select実行時

列の範囲選択も同じように「,」で区切ることで指定範囲を増やしていくことができます
「,」で範囲の数を増やして、「:」で連続した範囲を指定することで自由に範囲選択を行えます

行を(範囲)選択する

Selectメソッドを使用してワークシートの行を選択するコード

'ワークシートの1行目を選択
Range("1:1").Select
'ワークシートの1~5行目を選択
Range("1:5").Select
1行目の選択状態
Range(“1:1”).Select実行時

アクティブシート(表示されているシート)の1行目を選択状態にします
引数は数字で指定を行います
数字(文字列)なので注意してください
「Range(1)」と数値として指定するとエラーになります
また結果としてセルの範囲選択となるので、1行であっても「1:1」と入力します

1行目から5行目までの選択状態
Range(“1:5”).Select実行時

複数範囲の行を選択する場合は「:」で開始と終了の行数を指定することで可能です
コードでは5行目までの範囲選択を行っています

列を(範囲)選択する

Selectメソッドを使用してワークシートの列を選択するコード

'ワークシートのA列を選択
Range("A:A").Select
'ワークシートのAからC列を選択
Range("A:C").Select
A列のみの選択状態
Range(“A:A”).Select実行時

アクティブシート(表示されているシート)のA列を選択状態にします
列の指定には、引数内のアルファベットを変更すれば指定列の選択ができます
また結果としてはセルの範囲選択が行われている状態なので、「A:A」と単独列であっても範囲選択のように「:」で接続して指定する必要があります
「Range(“A”)」とするとエラーになります

AからC列までの選択状態
Range(“A:C”).Select実行時

引数内のアルファベットを別の列で指定すると、範囲指定になります
コードではA列からC列の3列の範囲選択が行われています

Excel2007以降のワークシートなら指定アルファベットが3文字もあるので大変ですね

離れたセルを選択する

Selectメソッドを使用して連続していないセル選択をするコード

'ワークシートの連続していないセル範囲を選択
Range("A1,B3,C5").Select
離れたセルの選択状態

アクティブシート(表示されているシート)の連続していないセル範囲を選択状態にします
A1とB3とC5の3つのセルだけが選択範囲になります
引数のセルアドレスを「,」で区切ることで別の範囲として離れたセルの選択が可能になります

'ワークシートの連続していないセル範囲を選択
Range("A1,B3:C5").Select
離れたセルの範囲選択も可能になった状態

「,」で区切ることによって別の範囲となると解説したように、2つ目の「,」を「:」に変更することによって、B3からC5という範囲選択に変更することも可能です
ここでも左上の白いセルが存在し、これがアクティブセルになります

セルを範囲選択する

Selectメソッドを使用してセル範囲選択をするコード

'ワークシートの指定のセル範囲を選択
Range("A1:C5").Select
Range範囲選択時の実行結果

アクティブシート(表示されているシート)の指定のA1からC5までを選択状態にします
引数内のセル範囲は「”開始セル:終了セル”」の書式で指定します
開始から終了までの全てのセルが選択状態になります

また、このコードを実行すると左上のセルが白くなります
これはアクティブセルという常に単一のセルです
このアクティブセルと選択範囲はそれぞれ別に取得可能です

1つのセルを選択する

Selectメソッドを使用して、単一のセルを選択状態にするコード

'アクティブシートのA1セルを選択
Range("A1").Select
'アクティブシートのA1セルを選択
Range("A1").Activate
RangeSelectの動作説明
RangeSelect使用時の動き
Range("A1").Select

アクティブシート(表示されているシート)のA1セルを選択します
コード中のA1を任意のセルアドレスに変更すれば、そのセルだけが選択状態になります
このコードの前に、別のセルが選択されていたり、範囲選択がされていた場合はその範囲選択は解除されて、このA1セルだけが選択状態になります

RangeActivateの動作説明
RangeActivate使用時の動き
Range("A1").Activate

こちらは、マクロの記録の自動作成時にセルの選択時にでてくるメソッドです
Activateはアクティブセルのみを選択するコードのため、画像のように選択先が選択範囲内の場合は範囲選択が解除されずコードが実行されます
この点がSelectと大きく違う点になりますので、基本的にはセル選択はSelectを使用してください
Activateを使用する際は、この動きをしっかり頭に入れておきましょう