- 日時: 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
|