tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
Excelのセルに関する操作(Addressプロパティの使用例)(VB.NET) ( No.33 )  [親スレッドへ]
日時: 2012/06/10 10:14
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[エクセル][][]                                                      *
* キーワード:Excel VBA,Excel2010,セルに関する操作,行と列,セル参照,セル操作,範囲  *
***********************************************************************************
'===================================================================================================
'投 稿 日:2012.05.11
'投 稿 者:VBレスキュー(花ちゃん)
'タイトル:VB2010 から Excel のセルに関する操作(Address プロパティの使用例)(VB.NET)
'========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
まずは、>>32 VB2010 から Excel のセルに関する操作、1行 Tips 集その1 をご覧になってから
こちらをご覧下さい。
尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解
されてから使用するようにして下さい。
'-------------------------------------------------------------------------------

Private Sub Button35_Click(sender As System.Object, e As System.EventArgs) Handles Button35.Click
   Call ExcelOpen("", "")     '新規ファイルをオープンして、Excel を起動
   '========================= Address プロパティの使用例 ========================
   '-------------------------------------------------------------------------------
   '1.セル(範囲)のアドレスを取得する
   ' ここにきて、Address プロパティ を多用していて、Excel.exe が解放されなくなったので
   ' Tips 集を見直すにあたり、調べて解った事を書いておきます。
   ' Range.Address(プロパティ) をVBA のヘルプで見ると以下のようになっております。
   ' コード記述時の言語で参照範囲を表す文字列型 (String) の値を返します。
   ' 式.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
   ' 式   Range オブジェクトを表す変数です。

   ' 使用例()
    'mc = Worksheets("Sheet1").Cells(1, 1)
    'MsgBox(mc.Address())                              ' $A$1
    'MsgBox(mc.Address(RowAbsolute:=False))            ' $A1
    'MsgBox(mc.Address(ReferenceStyle:=xlR1C1))        ' R1C1
    'MsgBox(mc.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, _
    '        ColumnAbsolute:=False, RelativeTo:=Worksheets(1).Cells(3, 3))) ' R[-2]C[-2]

    'となっており、VB2010 用に書きかえるのもそう難しいことでもないかと思います。

   '通常は、下記のように書きかえて使用すれば問題はないのですが...。
   Dim xlRange As Excel.Range = Nothing
   xlRange = xlSheet.Range("A1:D5")
   Dim adrs1, adrs2, adrs3, adrs4 As String
   adrs1 = xlRange.Address                         ' $A$1:$D$5
   adrs2 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)     ' A1:D5
   adrs3 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _
                           ReferenceStyle:=Excel.XlReferenceStyle.xlA1)   ' A1:D5

   adrs4 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _
                           ReferenceStyle:=Excel.XlReferenceStyle.xlR1C1) ' RC:R[4]C[3]
   MRComObject(xlRange)
   MessageBox.Show(Me, String.Format( _
            "adrs1={0:} adrs2={1:} adrs3={2:} adrs4={3:}", adrs1, adrs2, adrs3, adrs4))

   '個々で使用する場合は、問題無いのですが、以下で紹介するコードと同じプロシージャ内で使用すると
   'Excel.exe が解放されず、プログラムを終了するまで、タスクマネージャに残ったままになったり
   'する場合があります。
   '-------------------------------------------------------------------------------

   'プロセスが解放され易くしたコード(逐次デクリメントを実施)
   xlRange = xlSheet.Range("B3:F7")
   adrs1 = xlRange.Address                         ' $B$3:$F$7
   MRComObject(xlRange)

   xlRange = xlSheet.Range("B3:F7")
   adrs2 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)     ' B3:F7
   MRComObject(xlRange)

   xlRange = xlSheet.Range("B3:F7")
   adrs3 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _
                           ReferenceStyle:=Excel.XlReferenceStyle.xlA1)   ' B3*F7
   MRComObject(xlRange)

   xlRange = xlSheet.Range("B3:F7")
   adrs4 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _
                           ReferenceStyle:=Excel.XlReferenceStyle.xlR1C1) ' R[2]C[1]:R[6]C[5]
   MRComObject(xlRange)

   MessageBox.Show(Me, String.Format( _
            "adrs1={0:} adrs2={1:} adrs3={2:} adrs4={3:}", adrs1, adrs2, adrs3, adrs4))

   '=============================================================================
   'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
   Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False)  'False の場合保存しないで終了
   'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし)
   Call ProcessCheck()
End Sub



 [スレッド一覧へ] [親スレッドへ]