玄関へお回り下さい。
Excelのデータ入力例色々(12個)               (SNo.063)

1.R1C1形式で個々のセルへの入力例
  (個々のセルへ値を入力するためのプロシージャ)
2.R1C1形式で範囲を指定してセルへの入力例
3.R1ToA1関数を使って個別のセルに入力する場合
  (A1形式のアドレスをR1C1形式に変換する関数)
4.Address プロパティを使っての入力例
5.Address プロパティを使って範囲入力
6.Rows / Columns プロパティの使用方法
7.ExcelをPrivateな変数で宣言しての起動処理
8.Excelファイルを上書き保存して終了処理
.NETからExcelの基本的な操作方法 を見てからご覧下さい。
こちらでは、VB6.0の時のような入力をする場合に合わせて色々プロシージャや関数を使って試して見ました。
ご使用時は、ご自分の環境でテストしてからお使い下さい。又、このコードを使ってExcelのプロセスが終了しないかどうかのテストをされるのもいいかと思います。
私は、Excel の起動 → Commandボタンクリック→Excelの終了→プロセスが終了しているか確認 を繰り返してテストしております。
使用コントロール Button1 〜 Button8
その他条件 WindowsXP(Vista) Visual Basic 2005(VB2008)
参照の追加でMicrosoft Excel **.* Object Library を追加しておいて下さい。 
1.R1C1形式で個々のセルへの入力例

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
'R1C1形式で個々のセルへの入力例
    xlApp.Visible = True
    Dim i, j As Integer
    For i = 5 To 12         '5行目〜12行目
        For j = 3 To 8      'C列 〜  H列
            Call SetdataCell(i, j, i + j)
        Next j
    Next i
    'C13 に合計を表示
    Call SetdataCell(13, 3, "=SUM(C5:C12")
End Sub

Private Sub SetdataCell(ByVal r As IntegerByVal c As IntegerByVal d As Object)
'個々のセルへ値を入力するためのプロシージャ
    Dim xlCells1 As Excel.Range
    Dim xlRange1 As Excel.Range
    xlCells1 = xlSheet.Cells
    xlRange1 = xlCells1(r, c)
    xlRange1.Value = d
    MRComObject(xlCells1)
    MRComObject(xlRange1)
End Sub

2.R1C1形式で範囲を指定してセルへの入力例

Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button2.Click
'R1C1形式で範囲を指定してセルへの入力例
    xlApp.Visible = True
    Dim xlRange As Excel.Range
    Dim strDat(2, 0) As Object
    strDat(0, 0) = "10"                                 'データの作成
    strDat(1, 0) = "20"
    '                        セル  (B15,B16) 
    strDat(2, 0) = "=SUM(" & R1ToA1(15, 2, 16, 2) & ")" '計算式
    '                        セル  (B15,B17) 
    xlRange = xlSheet.Range(R1ToA1(15, 2, 17, 2))       'データの入力セル範囲
    xlRange.Value = strDat                              'セルへデータの入力
    MRComObject(xlRange)
End Sub

Private Function R1ToA1(ByVal r1 As IntegerByVal c1 As Integer, _
                        ByVal r2 As IntegerByVal c2 As IntegerAs String
'R1C1形式のアドレスをA1形式に変換する関数
    Dim i1, i2 As Integer
    Dim d1, d2 As String
    i1 = Math.Floor((c1 - 1) \ 26)
    d1 = IIf(c1 > 26, Strings.Chr(64 + i1), "")
    i1 = c1 - 26 * i1
    d1 &= Strings.Chr(64 + i1) & CStr(r1)

    i2 = Math.Floor((c2 - 1) \ 26)
    d2 = IIf(c2 > 26, Strings.Chr(64 + i2), "")
    i2 = c2 - 26 * i2
    d2 &= Strings.Chr(64 + i2) & CStr(r2)
    Return d1 & ":" & d2
End Function

注意
上記関数は、Excel 2007 で703列以上を指定すると正しい値を返さないようです。
Excel 2007 以前は、列数が255列までに制限されているので問題ありません。
サンプル投稿用掲示板の方に新しい関数が投稿してありますので、そちらをご使用下さい。
3.R1ToA1関数を使って個別のセルに入力する場合
 
Private Sub Button3_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button3.Click
'R1ToA1関数を使って個別のセルに入力する場合
    Dim i As Integer
    Dim xlRange As Excel.Range
    For i = 1 To 255
        'A1 〜 IU1 の範囲に連番を入力
        xlRange = xlSheet.Range(R1ToA1(1, i, 1, i))
        xlRange.Value = i
        MRComObject(xlRange)
    Next i
    xlApp.Visible = True
End Sub

Private Function R1ToA1(ByVal r1 As IntegerByVal c1 As Integer, _
                        ByVal r2 As IntegerByVal c2 As IntegerAs String
'R1C1形式のアドレスをA1形式に変換する関数
    Dim i1, i2 As Integer
    Dim d1, d2 As String
    i1 = Math.Floor((c1 - 1) \ 26)
    d1 = IIf(c1 > 26, Strings.Chr(64 + i1), "")
    i1 = c1 - 26 * i1
    d1 &= Strings.Chr(64 + i1) & CStr(r1)

    i2 = Math.Floor((c2 - 1) \ 26)
    d2 = IIf(c2 > 26, Strings.Chr(64 + i2), "")
    i2 = c2 - 26 * i2
    d2 &= Strings.Chr(64 + i2) & CStr(r2)
    Return d1 & ":" & d2
End Function

注意
上記関数は、Excel 2007 で703列以上を指定すると正しい値を返さないようです。
Excel 2007 以前は、列数が255列までに制限されているので問題ありません。
サンプル投稿用掲示板の方に新しい関数が投稿してありますので、そちらをご使用下さい。

4.Address プロパティを使っての入力例
 
Private Sub Button4_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button4.Click
'Address プロパティを使って個別入力
    Dim i As Integer
    Dim xlRange As Excel.Range
    Dim xlCells As Excel.Range
    Dim xlRange1 As Excel.Range
    xlCells = xlSheet.Cells

    Dim Col As String
    For i = 1 To 255
        'A2 〜 IU2 の範囲に連番を入力
        xlRange1 = xlCells(2, i)
        Col = xlRange1.Address(FalseFalse)
        xlRange = xlSheet.Range(Col)
        xlRange.Value = i
        MRComObject(xlRange1)
        MRComObject(xlRange)
    Next i
    MRComObject(xlCells)
    xlApp.Visible = True
End Sub

5.Address プロパティを使って範囲入力
 
Private Sub Button5_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button5.Click
'Address プロパティを使って範囲入力
    xlApp.Visible = True
    Dim xlRange As Excel.Range
    Dim strDat(2, 0) As Object
    strDat(0, 0) = "10"
    strDat(1, 0) = "20"
    strDat(2, 0) = "=SUM(A4:A5)"

    Dim Col1, Col2 As String
    Dim xlCells As Excel.Range
    Dim xlRange1 As Excel.Range
    xlCells = xlSheet.Cells
    xlRange1 = xlCells(4, 1)    'A4
    Col1 = xlRange1.Address(FalseFalse)
    MRComObject(xlRange1)
    xlRange1 = xlCells(6, 1)    'A6
    Col2 = xlRange1.Address(FalseFalse)
    'A4 〜 A6 の範囲に入力
    xlRange = xlSheet.Range(Col1 & ":" & Col2)
    xlRange.Value = strDat
    MRComObject(xlCells)
    MRComObject(xlRange1)
    MRComObject(xlRange)
End Sub

6.Rows / Columns プロパティの使用方法

Private Sub Button6_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button6.Click
'    xlSheet.Rows(6).Select()   'これではプロセスが終了しない
'-----------------------------------------------------------------
   
Dim xlRange As Excel.Range
   
Dim xlRows As Excel.Range
    xlRows = xlSheet.Rows
    xlRange = xlRows(6)
    xlRange.
Select()
    MRComObject(xlRows)
    MRComObject(xlRange)

'-----------------------------------------------------------------
'    xlSheet.Columns(6).Select()   'これではプロセスが終了しない
'-----------------------------------------------------------------
   
Dim xlRange1 As Excel.Range
   
Dim xlColumns As Excel.Range
    xlColumns = xlSheet.Columns
    xlRange1 = xlColumns(6)
    xlRange1.
Select()
    MRComObject(xlColumns)
    MRComObject(xlRange1)

'------------------------------------------------------------------------------
    'xlSheet.Rows(1).           'この時点で候補がでてこない 
    'xlSheet.Rows.Select()      'これなら候補も表示されるがプロセスは終了しない
'--------------------------------------------------------------------------------
   
Dim xlRows2 As Excel.Range
    xlRows2 = xlSheet.Rows
    xlRows2.
Select()
    MRComObject(xlRows2)
End Sub

7.ExcelをPrivateな変数で宣言しての起動処理

'---------- Private な変数の宣言 -----------------------------------
Private xlApp As Excel.Application
Private xlBooks As Excel.Workbooks
Private xlBook As Excel.Workbook
Private xlSheets As Excel.Sheets
Private xlSheet As Excel.Worksheet

'---------- Excel ファイルの Open 処理 ------------------------------

Private Sub Button7_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button7.Click
'Excelの既存ファイルのオープン
   
Call ExcelOpen(IO.Path.GetFullPath("..\..\Test.xls"), "Sheet1")
End Sub

Private Sub ExcelOpen(ByVal FilePath As StringByVal SheetName As String)
'既存のファイルのオープン処理用プロシージャ
    xlApp = 
New Excel.Application
    xlBooks = xlApp.Workbooks
    xlBook = xlBooks.Open(FilePath)
    xlSheets = xlBook.Worksheets
    xlSheet = xlSheets(SheetName)
    xlApp.Visible = 
True
End Sub

8.Excelファイルを上書き保存して終了処理

'---------- Excel ファイルの終了時の処理 ------------------------------
Private Sub Button8_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button8.Click
    'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
   
Call ExcelClose(IO.Path.GetFullPath("..\..\Test.xls"), False)  'False の場合保存しないで終了
End Sub

Private Sub ExcelClose(ByVal FilePath As StringOptional ByVal CancelSave As Boolean = True)
'Excelファイルを上書き保存して終了処理用プロシージャ   
    xlApp.DisplayAlerts = False     '保存時の問合せのダイアログを非表示に設定
    If CancelSave Then
        xlSheet.SaveAs(FilePath)    'ファイルに保存
    End If
    MRComObject(xlSheet)    'xlSheet の解放
    MRComObject(xlSheets)   'xlSheets の解放
    xlBook.Close()          'xlBook を閉じる
    MRComObject(xlBook)     'xlBook の解放
    MRComObject(xlBooks)    'xlBooks の解放
    xlApp.Quit()            'Excelを閉じる
    MRComObject(xlApp)      'xlApp を解放
End Sub

'今まで使っていた方法では、Option Strict On の時にエラーとなったので、下記の
'魔界の仮面弁士さんの投稿を使用させて頂きました。詳しくは、下記リンク参照願います。
'デクリメントするだけが目的なら、その場で、ReleaseComObject だけを実施して下さい。
'http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=6370#6374
Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
   If objCom Is Nothing Then
      Return
   End If
   Try
      If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
         If force Then
           
Dim count As Integer = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
            If count <> 0 Then      'この部分は、動作確認用コードです。(実使用では必要ありません)
               MessageBox.Show("COM オブジェクトが解放されていません。")
            End If
         Else
           
Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
            If count <> 0 Then      'この部分は、動作確認用コードです。(実使用では必要ありません)
               MessageBox.Show("COM オブジェクトが解放されていません。")
            End If
            '0 になる事を期待(使い終った)していたなら、force = True で試して見て下さい。
         End If
      End If
   Finally
      objCom = Nothing
   End Try
End Sub

Private Sub Form1_Closed(ByVal sender As Object, _
                         ByVal e As System.EventArgs) Handles MyBase.Closed
    'Excel が終了していない場合は Excel を終了
    If Not xlApp Is Nothing Then
        Call ExcelClose(IO.Path.GetFullPath("..\..\Test.xls"), False)
    End If
End Sub
 
あまりにも掲示板に質問が多いので、ReleaseComObject 処理の仕方やセルへのデータ入力方法のテスト結果を載せておきます。
各自の使用条件にあった方法でご利用下さい。







2005/04/02
2008/11/05

VBレスキュー(花ちゃん)
VB.NET2003  VB2005