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