vba End・Endプロパティー

わずかな知識で VBA!

vba End
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