Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10381 / 13644 ツリー ←次へ | 前へ→

【22143】表の合計を計算 igusukei 05/2/9(水) 21:21 質問[未読]
【22144】Re:表の合計を計算 りすりす 05/2/9(水) 21:53 回答[未読]
【22145】Re:表の合計を計算 かみちゃん 05/2/9(水) 21:59 回答[未読]
【22159】Re:表の合計を計算 igusukei 05/2/10(木) 9:52 質問[未読]
【22163】Re:表の合計を計算 りすりす 05/2/10(木) 12:48 回答[未読]
【22180】Re:表の合計を計算 りすりす 05/2/10(木) 16:05 発言[未読]
【22164】Re:表の合計を計算 かみちゃん 05/2/10(木) 12:53 回答[未読]
【22187】Re:表の合計を計算 sa 05/2/10(木) 16:42 発言[未読]
【22191】Re:表の合計を計算 sa 05/2/10(木) 17:20 発言[未読]
【22202】Re:表の合計を計算 igusukei 05/2/10(木) 22:39 お礼[未読]

【22143】表の合計を計算
質問  igusukei  - 05/2/9(水) 21:21 -

引用なし
パスワード
   始めて投稿します。
VBAは殆ど解らずで、マクロの記録などをしながらカット&トライしていますが、なかなかうまく出来ません。
何行あるか判らない表があり、L列の一番下に合計を出したい

Sub Macro3()
  Dim endR As Long, endC As Long
  Sheets("Sheet1").Select
  endR = Range("A65536").End(xlUp).Row
  Range(endR + 1, L).Select
  ActiveCell.FormulaR1C1 = "sum(l2:l+endR)"
End Sub

L行のL2から最終行までの合計を最終行の下に表示したい。

この式で何をしようとしているのか、判るでしょうか?
説明が下手ですが、これを実行出来るようにしたいのですが、どなたかご教授お願いします。

【22144】Re:表の合計を計算
回答  りすりす  - 05/2/9(水) 21:53 -

引用なし
パスワード
   ▼igusukei さん:
>始めて投稿します。
>VBAは殆ど解らずで、マクロの記録などをしながらカット&トライしていますが、なかなかうまく出来ません。
>何行あるか判らない表があり、L列の一番下に合計を出したい
>
>Sub Macro3()
>  Dim endR As Long, endC As Long
>  Sheets("Sheet1").Select
>  endR = Range("A65536").End(xlUp).Row
>  Range(endR + 1, L).Select
>  ActiveCell.FormulaR1C1 = "sum(l2:l+endR)"
>End Sub
>
>L行のL2から最終行までの合計を最終行の下に表示したい。
>
>この式で何をしようとしているのか、判るでしょうか?
>説明が下手ですが、これを実行出来るようにしたいのですが、どなたかご教授お願いします。


Sub Macro3()
  Dim endR As Long, endC As Long
  endR = Sheets("Sheet1").Range("A65536").End(xlUp).Row
  Sheets("Sheet1").Range("L" & (endR + 1)).Value = "=sum(l2:l" + CStr(endR) + ")"
End Sub

【22145】Re:表の合計を計算
回答  かみちゃん  - 05/2/9(水) 21:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>  endR = Range("A65536").End(xlUp).Row

A列の最終行を取得しますが、よろしいですか?

> Range(endR + 1, L).Select

endRの値が3だった場合、
Range(3 + 1, L).Select
つまり
Range(4, L).Select
となって、できないことはわかりますか?

>  ActiveCell.FormulaR1C1 = "sum(l2:l+endR)"

FormulaR1C1プロパティのヘルプを確認してください。
「指定されたオブジェクトの数式を R1C1 形式で、〜」と書かれていると思います。

>L行のL2から最終行までの合計を最終行の下に表示したい。

ということで、添削させていただくと、
Sub Macro3()
  Dim endR As Long

  Sheets("Sheet1").Select
  endR = Range("L65536").End(xlUp).Row
  Range("L" & endR + 1).Select
  ActiveCell.Formula = "=SUM(L2:L" & endR & ")"
End Sub
となります。

【22159】Re:表の合計を計算
質問  igusukei  - 05/2/10(木) 9:52 -

引用なし
パスワード
   りすりすさん
かみちゃん
殆ど同じ時刻に回答頂いたのですね、お二方ご親切にありがとうございます。
両方とも試して見ました、バッチリです!!
かみちゃん、細かい指導ありがとうございます
ActiveCell.FormulaR1C1 = これはR1C1 形式で と言う意味なんですね(^^;
Range(endR + 1, L).Select ← これは恥ずかしいでした
勉強になりました (^_^)

そこで欲張って、さらに質問ですが…(図々しい ^^; )
実は合計を出す列がたくさんあるのです、L列〜Q列まで(7つ)
Sub Macro1()〜Sub Macro7() 作ればいいのですが、もっといい方法があるのではと…?
関数で
Function Totals(Col As Range)
Dim encR As Long
Sheets("Sheet1").Select
  endR = Range("A65536").End(xlUp).Row
  Range(Con & endR + 1).Select
  ActiveCell.Formula = "=SUM(Col&2:ol" & endR & ")"
End Function

この様にして、 Totals(L) で実行できないかと試しましたが、エラーでだめでした。
このできると、Totals(L)〜Totals(Q) までを順に実行すれば、簡単かなとも思いました。考えているうちに For 〜 next 文で出来そうな気がしますが、どうやっていいものか…?
その場合はたぶん R1C1形式にしないといけないのでしょうね?
済みません、だんだん欲が出てきて難しくなりました(←自分には)
また教えてください、よろしくお願いします。m(__)m

【22163】Re:表の合計を計算
回答  りすりす  - 05/2/10(木) 12:48 -

引用なし
パスワード
   ▼igusukei さん:
>りすりすさん
>かみちゃん
>殆ど同じ時刻に回答頂いたのですね、お二方ご親切にありがとうございます。
>両方とも試して見ました、バッチリです!!
>かみちゃん、細かい指導ありがとうございます
>ActiveCell.FormulaR1C1 = これはR1C1 形式で と言う意味なんですね(^^;
>Range(endR + 1, L).Select ← これは恥ずかしいでした
>勉強になりました (^_^)
>
>そこで欲張って、さらに質問ですが…(図々しい ^^; )
>実は合計を出す列がたくさんあるのです、L列〜Q列まで(7つ)
>Sub Macro1()〜Sub Macro7() 作ればいいのですが、もっといい方法があるのではと…?
>関数で
>Function Totals(Col As Range)
>Dim encR As Long
>Sheets("Sheet1").Select
>  endR = Range("A65536").End(xlUp).Row
>  Range(Con & endR + 1).Select
>  ActiveCell.Formula = "=SUM(Col&2:ol" & endR & ")"
>End Function
>
>この様にして、 Totals(L) で実行できないかと試しましたが、エラーでだめでした。
>このできると、Totals(L)〜Totals(Q) までを順に実行すれば、簡単かなとも思いました。考えているうちに For 〜 next 文で出来そうな気がしますが、どうやっていいものか…?
>その場合はたぶん R1C1形式にしないといけないのでしょうね?
>済みません、だんだん欲が出てきて難しくなりました(←自分には)
>また教えてください、よろしくお願いします。m(__)m

文字は ""の中が 文字になります
"=SUM(Col&2:ol"
とかいてあるものは
=SUM(Col&2:ol
になってしまいます

変数の前で 一度文字を 分離してあげるといいです

colが一箇所Conになっています

Totals(Col As Range)
は Rangeでなく
stringを使った方がいいと思います

ループはこんなのでいけると思います。

 Dim i As Long
 For i = UCase(Asc("l")) To UCase(Asc("q")) ' 小さい方を先に書く
  Totals (Chr(i))

UCase: 大文字に変換  大文字小文字混在しても誤動作しないように
Asc: 文字を文字コード(数字)に変換
Chr: 文字コードを 文字に変換

【22164】Re:表の合計を計算
回答  かみちゃん  - 05/2/10(木) 12:53 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>実は合計を出す列がたくさんあるのです、L列〜Q列まで(7つ)

ということで、以下のようにしてはどうでしょうか?
列番号をLやQではなく、12番目の列、16番目の列などと扱う方法です。
さらに、セルの指定は、RangeではなくCellsを使っています。

Sub Macro4()
  Dim endR As Long '最終行
  Dim Col As Integer '列番号

  Sheets("Sheet1").Select
  'L列(12列目)〜Q列(16列目)まで
  For Col = 12 To 16
   endR = Cells(65536, Col).End(xlUp).Row
   '計算式を設定(例)=SUM(L2:L10)
   Cells(endR + 1, Col).Formula = _
    "=SUM(" & Cells(2, Col).Address _
     (RowAbsolute:=False, ColumnAbsolute:=False) & ":" & _
     Cells(endR, Col).Address _
     (RowAbsolute:=False, ColumnAbsolute:=False) & ")"
  Next
  MsgBox "計算式を設定しました"
End Sub

> endR = Range("A65536").End(xlUp).Row

こうすると、A列の最終行が取得できますが、L〜Q列がその行よりも下に値が入っていると意図しない計算式が設定されますが、いいのでしょうか?

>  ActiveCell.Formula = "=SUM(Col&2:ol" & endR & ")"

変数と文字列の扱い方が混同されているようです。
Colは変数。2は文字列。olは何?(Colの打ち損じ?)

【22180】Re:表の合計を計算
発言  りすりす  - 05/2/10(木) 16:05 -

引用なし
パスワード
   >ループはこんなのでいけると思います。
>
> Dim i As Long
> For i = UCase(Asc("l")) To UCase(Asc("q")) ' 小さい方を先に書く
>  Totals (Chr(i))
>
AAとかになると
このループ問題があるので
こっちに修正します

列を番号で考えなくていいので楽にかけると思います。

Private Sub CommandButton1_Click()
 Dim i As Long
' For i = Range("l1").Column To Range("q1").Column
 For i = StrToColNum("l") To StrToColNum("q")
  Totals (ColNumToStr(i))
 ' MsgBox ColNumToStr(i)
 Next
End Sub

下の関数を定義しておくと
列の文字だけほしいときに便利です。

Public Function ColNumToStr(ByVal Value As Long) As String
' 数字を入れると 列の文字を返す
' 1 なら A が返ってきます
 ColNumToStr = Replace(Cells(1, Value).Address(0, 0), "1", "")
End Function

Public Function StrToColNum(ByVal Value As String) As Long
 ' aとかbとかいれると  列数を返す。
' a なら 1 が返ってきます
 StrToColNum = Range(Value & 1).Column
End Function

【22187】Re:表の合計を計算
発言  sa  - 05/2/10(木) 16:42 -

引用なし
パスワード
   合計を出すだけなら下記の方法で出来ます
式で入れたいのでしたらすみません

Sub 合計()
  Dim myRange As Range
 Dim 列 As Integer
 Dim 開始 As Integer
 Dim 終了 As Integer
 Dim endR As Integer
 
 開始 = 12 'L列目
 終了 = 17 'Q列目
 
 
 For 列 = 開始 To 終了
  endR = Cells(65536, 列).End(xlUp).Row
  Set myRange = Range(Cells(1, 列), Cells(endR, 列))
  Cells(endR + 1, 列) = Application.WorksheetFunction.Sum(myRange)
 Next 列

End Sub

【22191】Re:表の合計を計算
発言  sa  - 05/2/10(木) 17:20 -

引用なし
パスワード
   式で入れるんでしたら
R1C1方式の方がらくですね


Sub 合計2()
  Dim myRange As Range
 Dim 列 As Integer
 Dim 開始 As Integer
 Dim 終了 As Integer
 Dim endR As Integer
 
 開始 = 12 'L列目
 終了 = 17 'Q列目
 
 
 For 列 = 開始 To 終了
  endR = Cells(65536, 列).End(xlUp).Row
  Set myRange = Range(Cells(1, 列), Cells(endR, 列))
  Cells(endR + 1, 列).FormulaR1C1 = "=SUM(R1C" & 列 & ":R" & endR & "C" & 列 & ")"
 Next 列

End Sub


>合計を出すだけなら下記の方法で出来ます
>式で入れたいのでしたらすみません
>
>Sub 合計()
>  Dim myRange As Range
> Dim 列 As Integer
> Dim 開始 As Integer
> Dim 終了 As Integer
> Dim endR As Integer
> 
> 開始 = 12 'L列目
> 終了 = 17 'Q列目
> 
> 
> For 列 = 開始 To 終了
>  endR = Cells(65536, 列).End(xlUp).Row
>  Set myRange = Range(Cells(1, 列), Cells(endR, 列))
>  Cells(endR + 1, 列) = Application.WorksheetFunction.Sum(myRange)
> Next 列
>
>End Sub

【22202】Re:表の合計を計算
お礼  igusukei  - 05/2/10(木) 22:39 -

引用なし
パスワード
   りすりすさん
かみちゃん
saさん

素早く、素晴らしい回答を有り難うございました。
たくさんありましたので、それぞれ試しました。
バッチリです! (^^)v
これでほぼ目的のファイルが出来上がりました。
本当に助かりました。

これから勉強して解らないことがありましたら、お願いするかもしれませんので
その時はまたお願いします。

10381 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free