【関数・プロパティ設定をつかう】

 5 文字列の指定位置から1文字を取得

 6 文字列の文字数を取得

 7 文字列のループで1文字ずつ分解

 8 文字が入っているセルの最大行を取得

 9 文字が入っているセルの最大列を取得

10 行のループで複数の文字列を連続分解

11 列のループで複数の文字列を連続分解

文字が入っているセルの最大行を取得

パイさん

「今回は、Excel VBA/マクロによってExcelシートの中で文字が入っているセルの最大行を取得してみましょう。

 Excel VBA/マクロには文字が入っているセルの終端セルを一瞬で検索してくれる便利なプロパティがあります。

 それが、Endプロパティです。Endプロパティの構文は、次のようになります。」

Img7_3_31

パイさん

「この表のキーボード操作を実際にやってみましょう。

 予め、次のようなExcelシートを用意します。

 ExcelシートのセルA12を選択してください。」

Img7_3_32_1

パイさん

「ExcelシートのセルA12が選択されている状態で、キーボードのCtrlを同時に打ってみてください。」

Img7_3_32_2

ソンくん

「セルA1048576が選択されました。」

パイさん

「これは、セルA12から下方向に文字が入っているセルの終端セルを探そうとしたことによるものです。

 セルA12から下方向には文字が入っているセルが無かったため、A列・1048576行(Excelの最大行)の

 セルA1048576が選択されています。

 それでは、次に、ExcelでセルA1048576が選択されている状態で、キーボードのCtrl

 同時に打ってみてください。」

Img7_3_32_3

ソンくん

「セルA12が選択されました。」

パイさん

「これは、セルA1048576から上方向に文字が入っているセルの終端セルを探し当てたことによるものです。

 セルA1048576から上方向に文字が入っているセルを検索したとき最初にヒットしたため

 セルA12が選択されています。」


パイさん

「それでは、ExcelシートのセルA1を選択してください。」

Img7_3_33_1

パイさん

「ExcelシートのセルA1が選択されている状態で、キーボードのCtrlを同時に打ってみてください。」

Img7_3_33_2

ソンくん

「セルXFD1が選択されました。」

パイさん

「これは、セルA1から右方向に文字が入っているセルの終端セルを探そうとしたことによるものです。

 セルA1から右方向には文字が入っているセルが無かったため、XFD列(Excelの最大列)・1行のセルXFD1が

 選択されています。

 次に、ExcelシートのセルXFD1が選択されている状態で、キーボードのCtrlを同時に打ってみてください。」

Img7_3_33_3

ソンくん

「セルA1が選択されました。」

パイさん

「これは、セルXFD1から左方向に文字が入っているセルの終端セルを探し当てたことによるものです。

 セルXFD1から左方向に文字が入っているセルを検索したとき、A1が最初にヒットしたため、

 セルA1が選択されています。」


パイさん

「さっきは、最後の行を調べるために、キーボード操作で行番号を検索しましたが、

 毎回キーボード操作で行番号を検索していては手間がかかるし時間もかかるので、

 コンピュータに計算してもらうようにしましょう。

 Endプロパティをつかうことで、文字が入っているセルの終端セルを一瞬で検索してくれます。

 Endプロパティの構文は、次のようになります。」

Img7_3_34

パイさん

Endプロパティでは、引数:Directionに、検索方向を示す定数として、

 xlUp』を入れると上方向へ検索しながら、

 xlDown』を入れると下方向へ検索しながら、

 xlToLeft』を入れると左方向へ検索しながら、

 xlToRight』を入れると右方向へ検索しながら、終端セルを取得します。

 先ず、ExcelでセルC14を選択してください。」

Img7_3_35

パイさん

End(xlUp)プロパティをつかって

 A列の終端のセルを選択してみましょう。

 Range("A65536").End(xlUp).Select

 と記述します。」

Sub 最大行選択_Endプロパティ_Selectメソッド()

 Range("A65536").End(xlUp).Select

End Sub

ソンくん

「始点のセルが『A65536』となっています。

 A列はわかるのですが、65,536となっているのはなぜですか?」

パイさん

「この行数は、Excel2003までの最大行数である65,536をつかっているだけです。

 通常は、65,536を最大行数としても問題ないのですが、

 もしもこれを超えるデータ行をマクロで扱うときは、1,048,576行を最大行数としてください。

 それでは、このマクロを実行してみましょう。」

Img7_3_37

ソンくん

「セルA12が選択されました。」

パイさん

「これは、セルA65536から上方向に文字が入っているセルの終端セルを探し当てたことによるものです。

 セルA65536から上方向に文字が入っているセルを検索したとき、A12が最初にヒットしたため、

 セルA12が選択されています。」


パイさん

「それでは、End(xlUp)プロパティRowプロパティを組み合わせて、

 A列の文字が入っているセルの最大行を取得してみましょう。」

Img7_3_38_1

パイさん

Rowプロパティとは、対象セルの行番号を取得するプロパティです。

 Range(セル番地).End(xlUp)プロパティとRowプロパティを組み合わせることで、

 対象列の文字が入っているセルの最大行を取得することができます。

Img7_3_38_2

 ExcelのA列の終端セルの行番号を取得して、セルB1に格納してみましょう。」

ソンくん

「早速、End(xlUp)プロパティRowプロパティを組み合わせてつかってみます。

 A列の終端セルの行番号を取得して、セルB1に格納するのだから、

 Range("B1").Value = Range("A65536").End(xlUp).Row

 これで良いのでしょうか。」

Sub 最大行取得_End_Rowプロパティ()

 Range("B1").Value = Range("A65536").End(xlUp).Row

End Sub

パイさん

「それでは、そのマクロを実行してみましょう。」

Img7_3_39

ソンくん

「ExcelのA列の文字が入っているセルの最大行番号が取得され、セルB1に『12』と書きこまれました。」

パイさん

「これはExcelのA列の文字が入っているセルの最大行は、『12』行目ということです。」

演習:ExcelのB列の終端セルの行番号を取得して、セルC1に格納

Sub 最大行取得_End_Rowプロパティ()

 Range("C1").Value = Range("B65536").End(xlUp).Row

End Sub

 

パイさん

「このように、Range(セル番地).End(xlUp)プロパティとRowプロパティを組み合わせることで、

 対象列の文字が入っているセルの最大行を取得することができます。」



目 次

1. セルに文字を書きこむ
セルに文字を書きこむ

2. RangeとCellsでセルの位置を指定する
RangeとCellsでセルの位置を指定する

3. ループ処理でセルに値を書きこむ
ループ処理でセルに値を書きこむ

4. ループ処理でセルの値を読みとる
ループ処理でセルの値を読みとる

5. ループ処理でセルからセルへ値を代入する
ループ処理でセルからセルへ値を代入する

6. 条件分岐処理でセルの操作を分ける
条件分岐処理でセルの操作を分ける

7. 関数・プロパティ設定をつかう
関数・プロパティ設定をつかう

8. 他のレンジ/シート/ブックを更新する
他のレンジ/シート/ブックを更新する




YouTube

Excelマクロの実用版とデモ版


ブログ