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