vba End・Endプロパティー |
||||
| わずかな知識で VBA! |
vba End
|
|||
最終行が分かるEndプロパティいよいよ、わずかな知識で VBA!講座もこの章で終わりです。 で、最後だけに、Endプロパティを実際の作業手順に沿って説明します。 マクロで、ある表に次々に登録していき、その表をソートしたいという時などに 表の終わりの行、又は、列を知りたいなどということがあります。 手作業では、表のどこかを選択した後に「Ctrl」+ 矢印キーで行えますが、 それをVBAで行うのがEndプロパティです。 |
わずかな知識で VBA! |
|||
手作業で行った場合は、Excelは、表の最終行などを選択しますが、VBAではどうなのでしょうか? この作業を「マクロの記録」で記録すると下記のようになります。 Selection.End(xlDown).Select 基準となるセル.End(引数).Selectとなっています。 Endプロパティの引数 → xlToRight ← xlToLeft ↑ xlUp ↓ xlDown 使用例に重要なヒントが載っていました。 使用例の日本語はちょっと変な日本語ですが、それでも意味はわかります。 下が、ヘルプの文面です。 「次の使用例は、行 4 のセル B4 から始まる範囲選択を、空白のセルに達するまで右方向へ延長します。」 Worksheets("Sheet1").Activate Range("B4", Range("B4").End(xlToRight)).Select ここまでわかってしまえば、あとは応用するだけということになります。 上の表を、表のあるシートがアクティブになっていない時に、 Setステートメントと、Offsetプロパティ、及び、Endプロパティ でソートするプロシージャの作成過程です。表のあるシート名は「表」にしています。 当然、このマクロも、手作業でのソート作業を「マクロの記録」で記録したものを編集して作成します。 まず、ソート操作のマクロの記録です。 Range("C6:E14").Select Range("C6:E14").Sort Key1:=Range("C6"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("F13").Select これの範囲選択部分「Range("C6:E14").Select」を SetステートメントとEndプロパティを使用したものに変更します。 ソートする範囲(列数)もOffsetプロパティの値を変更するだけで拡大、縮小することが可能です。 Set sethyou = Range("C6", Range("C6").End(xlDown).Offset(0, 2)) この場合の参照セル「sethyou」は、シート範囲を代入しています。 次に、アクティブになっていないシートに実行するため、コンテナの概念で「Worksheets("表").」を追加します。 Set sethyou = Worksheets("表").Range("C6", Worksheets("表").Range("C6").End(xlDown).Offset(0, 2)) sethyou.Sort Key1:=Worksheets("表").Range("C6"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers 表のあるブック、シート名と、表の始まるセルは当然わかっているはずなので、コンテナの概念で、 ブック名を繋げれば、他のブックにある表もソート可能です。 余分なものを消去して、sethyouをメモリーから開放すれば、とりあえずのできあがりです。 Sub Hyou3retusohto() ' Dim sethyou As Range Set sethyou = Worksheets("表").Range("C6", Worksheets("表").Range("C6").End(xlDown).Offset(0, 2)) sethyou.Sort Key1:=Worksheets("表").Range("C6"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers Set sethyou = Nothing End Sub 修正箇所を分かりやすくするために、Worksheets("表")をいくつも書きましたが、 これも Withステートメントで整理することができます。 Sub Hyou3retusohto() ' Dim sethyou As Range With Worksheets("表") Set sethyou = .Range("C6", .Range("C6").End(xlDown).Offset(0, 2)) sethyou.Sort Key1:=.Range("C6"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortTextAsNumbers End With Set sethyou = Nothing End Sub このような、同じ文字を消去する作業は、VBEのツールバーから、「編集(E)」→「置換」を使用すると便利です。 エクセルはバージョンによってソートするコードが異なります。2007以降のバージョンで記録したものは2003で使用 できなかったりします。 ソートのコードは自分の使用しているエクセルで記録したものに変更してください。 注意:アクティブになっていない他のブックへ、マクロを実行する場合は、 そのファイルが、Excel上に開いていることが必要です。 最小化されていてもかまいません。 |
||||
わずかな知識でVBA! TOP マクロで何ができる? ユーザーインターフェース マクロの記録 マクロの登録 イベントについて マクロの編集 ゲームで覚えるVBAプログラミング オブジェクトの操作 セルの操作 MsgBox関数・InputBox関数 変数の型 ヘルプの活用 イミディエイトウィンドウ Withステートメント Setステートメント 条件分岐のステートメント If Then Else,Select Case 繰り返しのステートメント Do Loop 繰り返しのステートメント For Next ダイアログボックスを作ってみよう1 ダイアログボックスを作ってみよう2 【実践編】 ActiveXコントロール 各コントロールのプロパティ 文字列の操作 Endプロパティ リンク・検索 相互リンク マイプロフィール YouTubeの部屋 |
||||
Copyright (C) わずかな知識でVBA! All Rights Reserved