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

1.R1C1形式で個々のセルへの入力例
  (個々のセルへ値を入力するためのプロシージャ)
2.R1C1形式で範囲を指定してセルへの入力例
3.R1ToA1関数を使って個別のセルに入力する場合
  (A1形式のアドレスをR1C1形式に変換する関数)
4.Address プロパティを使っての入力例
5.Address プロパティを使って範囲入力
6.Rows / Columns プロパティの使用方法

.NETからExcelの基本的な操作方法 を見てからご覧下さい。
こちらでは、VB6.0の時のような入力をする場合に合わせて色々プロシージャや関数を使って試して見ました。
ご使用時は、ご自分の環境でテストしてからお使い下さい。
又、サンプル投稿用掲示板VB2010からExcelを操作するためのワンポイントテクニック集(VB.NET) も参考にして下さい。
使用コントロール Button1 〜 Button6
その他条件 WindowsVista VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86  Excel 2007/Excel 2010 
[Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定 
プロジェクト→参照の追加→COM→Microsoft Excel 12.0(14.0) ObjectLibrary を参照設定しておいてください。
Excel の起動・終了のコードは、.NETからExcelの基本的な操作方法 のExcel の起動・終了に関する設定(実装用)のコードかExcel の起動・終了に関する設定(テスト環境用)のコードを使用して下さい。
※ 下記コードの表示は、自作の【Excel Com オブジェクトの解放漏れチェックツール】の結果を自作のツールでリッチテキストをHTMLファイルに変換した結果を掲載しております。
標準のIDE上のコードのカラー化に加え、Excel Com オブジェクト等もカラー化しております。

1.R1C1形式で個々のセルへの入力例

Private Sub Button1_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button1.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'R1C1形式で個々のセルへの入力例
  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")

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

End Sub

Private Sub SetdataCell(ByVal r As Integer, ByVal c As Integer, ByVal d As Object)
'R1C1形式で個々のセルへ値を入力するためのプロシージャ
  Dim xlCells As Excel.Range
  Dim xlRange As Excel.Range
  xlCells = xlSheet.Cells
  xlRange = DirectCast(xlCells(r, c), Excel.Range)
  xlRange.Value = d
  MRComObject(xlCells)
  MRComObject(xlRange)
End Sub

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

Private Sub Button2_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button2.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'R1C1形式で範囲を指定してセルへの入力例
  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) & ":" & R1ToA1(16, 2) & ")" '計算式
  '            セル (B15,B17)
  xlRange = xlSheet.Range(R1ToA1(15, 2) & ":" & R1ToA1(17, 2))    'データの入力セル範囲
  xlRange.Value = strDat 'セルへデータの入力
  MRComObject(xlRange)

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

End Sub


Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer) As String
'R1C1形式のアドレスをA1形式に変換する関数
  Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Dim A1 As String = ""
  If c1 < 1 Or c1 > 16384 Then   'Excel のバージョンに合せて下さい。
   MessageBox.Show("指定が間違っています。")
   A1 = "A1"
   Return A1
  End If
  If c1 <= 26 Then
   A1 = s.Chars(c1 - 1) & CStr(r1)
  ElseIf c1 <= 702 Then
   A1 = s.Chars(((c1 - 1) \ 26) - 1) & s.Chars(((c1 - 1) Mod 26)) & CStr(r1)
  Else
   A1 = s.Chars(((c1 - 703) \ 676)) & s.Chars((((c1 - 703) \ 26) Mod 26)) & _
                     s.Chars(((c1 - 1) Mod 26)) & CStr(r1)
  End If
  Return A1
End Function

3.R1ToA1関数を使って個別のセルに入力する場合
 
Private Sub Button3_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button3.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'R1ToA1関数を使って個別のセルに入力する場合
  Dim i As Integer
  Dim xlRange As Excel.Range
  For i = 1 To 255
   'A1 〜 IU1 の範囲に連番を入力
   xlRange = xlSheet.Range(R1ToA1(1, i))
   xlRange.Value = i
   MRComObject(xlRange)  '使い終わった時点でデクリメントした方が無難です。
  Next i

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

End Sub

4.Address プロパティを使っての入力例
 
Private Sub Button4_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button4.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'Address プロパティと Cells プロパティを使って個別入力
  ' Button3 と同じ事をしていてもコードが複雑になるだけ
  Dim i As Integer
  Dim xlRange As Excel.Range
  Dim xlCells As Excel.Range
  Dim xlRange1 As Excel.Range
  Dim Col As String
  For i = 1 To 255
   'A2 〜 IU2 の範囲に連番を入力
   xlCells = xlSheet.Cells
   xlRange1 = DirectCast(xlCells(2, i), Excel.Range)
   Col = xlRange1.Address()   '引数を使用しない方が解放されやすい
   xlRange = xlSheet.Range(Col)
   xlRange.Value = i
   MRComObject(xlRange)     '使い終わった時点又は、参照先が変わった時点で直ちに
   MRComObject(xlRange1)     'デクリメントを必ずして下さい。
   MRComObject(xlCells)
  Next i

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

End Sub
 
5.Address プロパティを使って範囲入力
 
Private Sub Button5_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button5.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'Address プロパティを使って範囲入力
  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 = DirectCast(xlCells(4, 1), Excel.Range)   'A4
  Col1 = xlRange1.Address()
  MRComObject(xlRange1)   'ここも使い終ったら直ぐデクリメントしておく事

  'ここで新たに受けているので、それまでの xlRange1 は、使用済みとなる
  xlRange1 = DirectCast(xlCells(6, 1), Excel.Range)  'A6
  Col2 = xlRange1.Address()
  'A4 〜 A6 の範囲に入力
  xlRange = xlSheet.Range(Col1 & ":" & Col2)
  xlRange.Value = strDat
  MRComObject(xlCells)
  MRComObject(xlRange1)
  MRComObject(xlRange)

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

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

Private Sub Button6_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button6.Click
  Call ExcelOpen("", "")   '新規ファイルをオープンして、Excel を起動
'===================================================================================================

'  xlSheet.Rows(6).Select()  'これではプロセスが終了しない
'-----------------------------------------------------------------
  'Excel をアクティブにする(エクセルにフォーカスを移す。)
  AppActivate(xlApp.Caption)  '必要ありませんが、見た目にわかりやすくする為に

  Dim xlRange As Excel.Range
  Dim xlRows As Excel.Range
  'Cellsプロパティと同様に一旦 Range に受ける必要がある
  xlRows = xlSheet.Rows
  xlRange = DirectCast(xlRows(6), Excel.Range)
  xlRange.Select()
  MRComObject(xlRows)
  MRComObject(xlRange)
  System.Threading.Thread.Sleep(1000)
'-----------------------------------------------------------------
'  xlSheet.Columns(6).Select()  'これではプロセスが終了しない
'-----------------------------------------------------------------
  Dim xlRange1 As Excel.Range
  Dim xlColumns As Excel.Range
  'Cellsプロパティと同様に一旦 Range に受ける必要がある
  xlColumns = xlSheet.Columns
  xlRange1 = DirectCast(xlColumns(6), Excel.Range)
  xlRange1.Select()
  MRComObject(xlColumns)
  MRComObject(xlRange1)
  System.Threading.Thread.Sleep(1000)

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

  '上記よりも直接Rangeオブジェクトを使って下記のようにした方が解放されやすく簡単かと。
  Dim xlRange3 As Excel.Range
  xlRange3 = xlSheet.Range("4:10")  '4行目から10行目までを選択
  xlRange3.Select()
  MRComObject(xlRange3)

  '動作確認の為、2秒間表示しておく
  System.Threading.Thread.Sleep(2000)

'===================================================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了

  'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい)
  Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。

End Sub



2005/04/02
2008/11/05
2012/07/01

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

VB.NET2003/VB2005/VB2008/VB2010
Excel 2007/Excel 2010/Excel VBA