3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

エクセルのシートカットキー[Ctrl] + [End] に相当するマクロ – Excel VBA

2012年1月9日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルマクロ・VBA達人養成塾 小川です。

キューバ旅行記、その78です。

キューバ屈指の外人向けリゾート地、バラデロにて。
バラデロ3日目の朝。

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ

エクセルマクロ達人養成塾塾長ブログ
この日は、午前中、「Delfinario (デルフィナリオ)」という、イルカと遊べるテーマパークに行ってきました。

明日は、その写真を。
塾長のキューバ旅行記、最初から読みたい方はこちらから


エクセルのシートカットキー[Ctrl] + [End] に相当するマクロ – Excelマクロ・VBA

前回の続きです。

前回のブログ: 「テストに役立つショートカットキー [Ctrl] + [End] – Excelマクロ・VBA」

「使われたセル範囲内の最後のセル」を調べるのに使えるコードは、以下のとおり。

以下のどれでも同じ動作をします。

Range(“A1”).SpecialCells(xlLastCell).Select ‘[1]

Cells.SpecialCells(xlLastCell).Select     ‘[2]

ActiveCell.SpecialCells(xlLastCell).Select ‘[3]

[1] は、僕好み。

[2] は、Excel 2003のヘルプで紹介されている書き方。

[3] は、自動記録で作ると出てくるコード。

まず、ヘルプの SpecialCells メソッドについての解説から引用。

構文は、以下のとおりです。

expression.SpecialCells(Type, Value)

ここで、 expression のところは、「対象となるオブジェクトへの参照を返すオブジェクト式を指定します」とのこと。
てことで。

ヘルプで紹介されているサンプル [2] では、Cells が指定されています。

「Cells」という言葉が前置きなく出てきた場合、 Application.Cells と書いたのと同値です。

ということで、ヘルプの「Cells」について紹介されている箇所から、「Application.Cells」についての解説を引用すると

アクティブ シートがワークシートのとき、そのワークシートにあるすべてのセル (Range オブジェクト) を返します。アクティブ シートがワークシートでないとき、このプロパティは失敗します。値の取得のみ可能です。

とのこと。

つまり、セルの集合を返します。
ところが、自動記録で作ってみた [3] のコードを見てみると、「Cells」の代わりに、「ActiveCell」とある。

これは、どうも単体のセルを指定するのでもOKらしい。

ということで [1] のコードを試してみると、ちゃんと動く ヾ(´ー`)ノ

これでも動くなら、このほうがよいでしょう。

なぜかというと:

  1. Range(“A1”) の形だと、他のシートでの作業に応用しやすい。
  2. 「Cells」は参照されるセル範囲が広い。

    それにそもそも、「使われたセル範囲内の最後のセル」を調べるのに、シート上のすべてのセルをいったん参照する、というのも、仕事の流れとしてどうだか。

  3. 「ActiveCell」とかの文脈によって意味の変わる言葉は、コード内にむやみに置くのは好ましくない。

 

というところ。

特に、理由の最初に記載したことについて補足しておくと。

[1] の書き方の場合、アクティブでないシート上の「使われたセル範囲内の最後のセル」を調べるには、以下の書き方になる。直感的だ。

(アクティブでないシート上のセルに対して Select メソッドは使えないので、以下では、そのアドレスを取得)

Debug.Print Worksheets(“Sheet2”).Range(“A1”).SpecialCells(xlLastCell).Address ‘[4]

[2] の書き方の場合、以下のとおりになる。

Debug.Print Worksheets(“Sheet2”).Cells.SpecialCells(xlLastCell).Address     ‘[5]

しかし、これでも、上記の理由2番目に記載した差は残る。

[3] の書き方の場合、そもそも「ActiveCell」という言葉が別シート上のセルを指すことを前提としていない言葉なので、直しようがない。

上記[4]か[5]の形にするしかない。

ということで。

いろいろ検討してみたが、[1], [4] の形が、いちばんすっきりする。

もっとも、慣れないうちは、自動記録で[2]の方法を自ら導いたり、ヘルプから[3]の方法を拾ってきたりするのでも十分。

というか、まずはそこまでできるなら、そんなあなたはとってもステキ☆
参考にしてください。

お知らせが2つ。
人気のセミナー2つを、久しぶりに開催します。

「エクセルデータ分析7つの上級技」

「親指シフト達人養成塾」
受講受付開始しました。ふるってご参加ください☆
ではでは (^^)/~

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド