tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
VB2010 から Excel の表の縦横の合計を求める(VB.NET) ( No.22 )  [親スレッドへ]
日時: 2012/06/06 19:19
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[エクセル][][]                                                      *
* キーワード:Excel VBA,Excel2010,合計を求める,SUM 関数,計算式をコピー            *
***********************************************************************************
'===================================================================================================
'投 稿 日:2012.05.06
'投 稿 者:VBレスキュー(花ちゃん)
'タイトル:VB2010 から Excel の表の縦横の合計を求める
'========1=========2=========3=========4=========5=========6=========7=========8=========9=========0

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

   '========================== 表の縦横の合計を求める ===========================

   '-------------------- 下記のVB6.0用コードを移植 ---------------------------
   ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=10
   '--------------------------------------------------------------------------

   '仮データの入力
   Dim xlRange As Excel.Range = Nothing
   Dim retValue As Double = 0
   '範囲を変えて試して見て下さい。(セル C3 を含む範囲内で)
   For c As Integer = 1 To 5
      For r As Integer = 1 To 6
         xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c))
         retValue += 1
         xlRange.Value = retValue
         MRComObject(xlRange)
      Next r
   Next c
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   'Activateなセル("C1")があるActivateセル領域を選択します。
   '必ず、表内のセルを指定して下さい。
   xlRange = xlSheet.Range("C3")
   xlRange.Activate()
   Dim xlCurrentRegion As Excel.Range
   xlCurrentRegion = xlRange.CurrentRegion
   xlCurrentRegion.Select()
   'セル領域のアドレス(A1:E6)を取得しR1C1 形式のアドレス(1,1,6,5)に変換  
   'A1ToR1C1 関数の実使用例
   Dim r1c1() As Integer = A1ToR1C1(xlCurrentRegion.Address( _
                              False, False, Excel.XlReferenceStyle.xlA1))
   MRComObject(xlCurrentRegion)    '直ちに解放しておく事
   MRComObject(xlRange)

   '範囲の開始位置を整数で求める   A1 → 1,1
   Dim r1 As Integer = r1c1(0)    '1 行
   Dim C1 As Integer = r1c1(1)    '1 列
   '範囲の終了位置を整数で求める E6 → 6,5
   Dim r2 As Integer = r1c1(2)    '6 行
   Dim C2 As Integer = r1c1(3)    '5 列

   '行の合計を求めるセル位置を設定 1,5+1 → F1
   xlRange = xlSheet.Range(R1ToA1(r1, C2 + 1))
   '行の合計を求める
   xlRange.FormulaR1C1 = "=SUM(RC[-" & CInt(C2 - C1 + 1) & "]:RC[-1])"

   Dim xlRange1 As Excel.Range
   '計算式をコピーする範囲を求める(必ず、別の Range で受けて下さい。)
   xlRange1 = xlSheet.Range(R1ToA1(r1, C2 + 1) & ":" & R1ToA1(r2, C2 + 1))
   '計算式を下方向にコピー(xlRange と xlRange1 の使い分けに注目)
   xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillDefault)
   MRComObject(xlRange1)
   MRComObject(xlRange)

   '列の合計を求めるセル位置を設定 
   xlRange = xlSheet.Range(R1ToA1(r2 + 1, C1))
   '列の合計を求める
   xlRange.Formula = "=SUM(R[-" & CInt(r2 - r1 + 1) & "]C:R[-1]C)"
   '計算式をコピーする範囲を求める(必ず、別の Range で受けて下さい。)
   xlRange1 = xlSheet.Range(R1ToA1(r2 + 1, C1) & ":" & R1ToA1(r2 + 1, C2 + 1))
   '計算式を下方向にコピー(xlRange と xlRange1 の使い分けに注目)
   xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillDefault)
   MRComObject(xlRange)
   MRComObject(xlRange1)
   '確認のために、2秒間表示しておく
   System.Threading.Thread.Sleep(2000)

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



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