tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
VB2010 から Excel のセルに関する操作、1行 Tips 集その1(VB.NET) ( No.32 )  [親スレッドへ]
日時: 2012/06/06 19:29
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[エクセル][][]                                                      *
* キーワード:Excel VBA,Excel2010,セルに関する操作,行と列,セル参照,セル操作,範囲  *
***********************************************************************************
'===================================================================================================
'投 稿 日:2012.05.11
'投 稿 者:VBレスキュー(花ちゃん)
'タイトル:VB2010 から Excel のセルに関する操作、1行 Tips 集その1(VB.NET)
'========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
本来なら最初の方に書くべき事ですが、前後の処理を省略して書くと、誤解されプロセスが
解放されない等のトラブルが発生し兼ねないので、ここに書く事にしました。
ここでは、単純な使用方法で紹介しておりますので、詳しい(目的に合った)使い方等は
ご自分で調べるなり、試すなりして下さい。
尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解
されてから使用するようにして下さい。

Private Sub Button30_Click(sender As System.Object, e As System.EventArgs) Handles Button30.Click
   Call ExcelOpen("", "")     '新規ファイルをオープンして、Excel を起動
   '====================== セルに関する操作1行Tips集その1 =====================

   '1.単一セルを参照する場合
   'Worksheets("Sheet1").Range("A1").Value = 3.14159  'VBA の表記
   'xlSheet.Range("A1").Value = 3.14159   'VB6.0 用の表記(.NET 系では、使用しない事)

   '上記のコードだけなら.NET系でも解放はされますが、色々参照している内に
   '解放されない等トラブルを防ぐ意味でも下記のように一度、変数に受けて下さい。

   Dim xlRange As Excel.Range = xlSheet.Range("A1")      '.NET 系の表記
   xlRange.Value2 = 3.14159
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '2.離れた単一セルを参照する場合
   xlRange = xlSheet.Range("A3,D1,C2")
   xlRange.Value = 12345
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '3.セル範囲を参照する場合その1
   xlRange = xlSheet.Range("A1:C3")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '下記でも同じ事です。
   xlRange = xlSheet.Range("A1", "D4")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '4.離れたセル範囲を参照する場合その2
   xlRange = xlSheet.Range("A1:C3,A6:C9,E1:H4")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '5.1列全体を参照する場合
   xlRange = xlSheet.Range("C:C")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '6.複数列全体を参照する場合
   xlRange = xlSheet.Range("C:D, F:F, H:H")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '7.1行全体を参照する場合
   xlRange = xlSheet.Range("2:2")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '8.複数行全体を参照する場合
   xlRange = xlSheet.Range("4:6, 9:10, 12:12")
   xlRange.Select()
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '9.Worksheet.Cells プロパティを使って全セルを参照する
   Dim xlCells As Excel.Range = xlSheet.Cells()
   xlCells.Select()
   MRComObject(xlCells)

   '10.Range.Cells プロパティを使ってセルを参照する
   'Cells プロパティは、セルの指定方法が、Cells(行番号,列番号)のようになり、C5 等の通常の
   '指定方法と行と列の順序が逆になりますので注意して下さい。

   'シート 1 のセル範囲 A1:C5 のフォント スタイルを斜体に設定する VBA の使用例
   'Worksheets("Sheet1").Activate()                
   'Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
   '-------------------------------------------------------------------------------
   '上記操作をVB2010用に書き換えると
   '上記は、下記のようにした方が無難です。
   Dim xlRange1 As Excel.Range = xlSheet.Range(R1ToA1(1, 1) & ":" & R1ToA1(5, 3))
   'のようにして、Cellsプロパティを使わないようにして見て下さい。
   'xlRange1.Font.Italic = True  のような使い方は、しない事
   Dim xlFont As Excel.Font = xlRange1.Font
   xlFont.Italic = True
   MRComObject(xlFont)
   MRComObject(xlRange1)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '11.セルに値を設定する
   'Value プロパティとValue2 プロパティの違いは、通貨型及び日付型のデータを使用しない事です
   xlRange = xlSheet.Range("A1")
   xlRange.Value = System.DateTime.Now
   Dim xlOffsetRange As Excel.Range
   xlOffsetRange = xlRange.Offset(1)
   xlOffsetRange.Value2 = System.DateTime.Now
   MRComObject(xlOffsetRange)
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '12.セルの値を取得する
   xlRange = xlSheet.Range("A1")
   Debug.Print(xlRange.Value.ToString)             '2012/05/11 11:50:07
   xlOffsetRange = xlRange.Offset(1)
   xlOffsetRange.NumberFormatLocal = "yyyy/mm/dd hh:MM:ss"
   Debug.Print(xlOffsetRange.Value2.ToString)  '41040.4931328588
   Debug.Print(xlOffsetRange.Value.ToString)   '2012/05/11 11:50:06
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)
   MRComObject(xlOffsetRange)
   MRComObject(xlRange)

   '13.セルに数式を設定する
   'Range.Formula プロパティは、数式を、A1 参照形式で、取得、又は設定します。
   xlRange = xlSheet.Range("C1")
   xlRange.Value = 123
   xlOffsetRange = xlRange.Offset(ColumnOffset:=1)
   xlOffsetRange.Value = 321
   MRComObject(xlRange)          'ここも一旦デクリメントしておく事
   xlRange = xlSheet.Range("E1")
   xlRange.Formula = "=C1+D1"
   MRComObject(xlOffsetRange)
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '14.セルの数式を取得する
   xlRange = xlSheet.Range("E1")
   Debug.Print(xlRange.Value.ToString)             '444
   Debug.Print(xlRange.Formula.ToString)           '=C1+D1
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '15.AutoFill メソッドを使ってセルに連続してデータを入力する
   'AutoFill メソッド : 指定された対象セル範囲内のセルに対してオートフィルを実行します。
   xlRange = xlSheet.Range("A1")
   xlRange.Value = "1月"
   xlRange1 = xlSheet.Range("A1:L1")
   'セル A1 〜 L1 まで、1月 〜 12月 と入力します。
   '下記のように直接範囲(xlSheet.Range("A1:L1"))を指定しない事
   'xlRange.AutoFill(Destination:=xlSheet.Range("A1:L1"), Type:=Excel.XlAutoFill ...)
   xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillMonths)
   MRComObject(xlRange1)
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

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



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