Excel VBA質問箱 IV

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

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


1296 / 13645 ツリー ←次へ | 前へ→

【75222】助けてください。最終行に合計を求め書式設定 きおら 14/1/9(木) 2:07 質問[未読]
【75223】Re:助けてください。最終行に合計を求め書... γ 14/1/9(木) 7:44 発言[未読]
【75224】Re:助けてください。最終行に合計を求め書... γ 14/1/9(木) 7:49 発言[未読]
【75227】Re:助けてください。最終行に合計を求め書... きおら 14/1/9(木) 13:52 お礼[未読]
【75229】Re:助けてください。最終行に合計を求め書... γ 14/1/9(木) 22:31 発言[未読]
【75225】Re:助けてください。最終行に合計を求め書... ウッシ 14/1/9(木) 9:32 回答[未読]
【75226】Re:助けてください。最終行に合計を求め書... きおら 14/1/9(木) 13:51 お礼[未読]
【75228】Re:助けてください。最終行に合計を求め書... ウッシ 14/1/9(木) 14:11 回答[未読]

【75222】助けてください。最終行に合計を求め書式...
質問  きおら  - 14/1/9(木) 2:07 -

引用なし
パスワード
   VBA初心者ですが、合計を求めるマクロを調べて作ってみました。
下記のような表です。
1.行数は増減します。
2.A列最終行に合計と入力し、A列最終行セルからC列最終行セルの
3.範囲内で中央揃えに。合計を求めたい列はDとEとGです。
☆出来れば部分的指導ではなく、模範的なものを教えていただけると
うれしいです。


A   B    C    D    E   F    G
氏名 住所 生年月日 口数 寄付金額 入金日 入金金額


↓↓このように書いて動かしましたが、途中で止まります。
どうかご教授お願いします。


Sub 合計行()

Dim i As Integer
Dim j As Long

Worksheets("申請").Activate
For i = 4 To 7
j = Application.Max(j, Cells(1048576, i).End(xlUp).Row + 1)
Next

For i = 4 To 7
Cells(j, i).FormulaR1C1 = "=SUM(R2C[0]:R[-1]C[0])"
Next i

Cells(j, 1).FormulaR1C1 = "合計"
    '合計行
    With .Range("a1").Offset(dic.Count + 1)

    End With

End Sub

【75223】Re:助けてください。最終行に合計を求め...
発言  γ  - 14/1/9(木) 7:44 -

引用なし
パスワード
   模範でもないが、こうも書けますね。
Sub 合計行()
  Dim i As Long
  Dim totalRow As Long

  Worksheets("申請").Activate
  For i = 4 To 7
    totalRow = Application.Max(totalRow, Cells(1048576, i).End(xlUp).Row + 1)
  Next  'E列からG列でどれが最下行か不明ということですね?

  For i = 4 To 7
    Cells(totalRow, i).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
  Next i
  Cells(totalRow, "F").ClearContents   'F行には合計は不要?
  
  Cells(totalRow, 1).FormulaR1C1 = "合計"
  Cells(totalRow, 1).Resize(1, 3).HorizontalAlignment = xlCenter
End Sub

【75224】Re:助けてください。最終行に合計を求め...
発言  γ  - 14/1/9(木) 7:49 -

引用なし
パスワード
   totalRow = Application.Max(totalRow, Cells(1048576, i).End(xlUp).Row + 1)

totalRow = Application.Max(totalRow, Cells(Rows.Count, i).End(xlUp).Row + 1)
としたほうがよい。見過ごしていました。

【75225】Re:助けてください。最終行に合計を求め...
回答  ウッシ  - 14/1/9(木) 9:32 -

引用なし
パスワード
   ▼きおら さん:

こんにちは

>A列最終行セルからC列最終行セルの範囲内で中央揃えに

の意味が分かりません。
ひょっとしてセルを結合して中央揃えではないですか?

> For i = 4 To 7
> j = Application.Max(j, Cells(1048576, i).End(xlUp).Row + 1)
> Next

は何のために必要なのですか?
D〜G列の各列の最下行の一つ下の行数を求めているようですが
質問では「A列最終行セル」と言っているのでA列最終行セルの一つ下の行に
「合計」という文言と、「合計式」をセットすればよいのではないですか?

勝手に判断してコード化すると、

Sub test()
  Dim sh As Worksheet
  Set sh = ThisWorkbook.Worksheets("申請")
  With sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
    .Resize(, 3).Merge
    .Value = "合計"
    .HorizontalAlignment = xlCenter
    With .Offset(, 1)
      .Resize(, 4).Formula _
        = "=SUM(" & _
          sh.Range(.EntireColumn.Cells(2, 1), _
            .Offset(-1, 0)).Address(0, 0) & ")"
      .Offset(, 2).ClearContents
    End With
  End With
End Sub

こんな感じになります。

【75226】Re:助けてください。最終行に合計を求め...
お礼  きおら  - 14/1/9(木) 13:51 -

引用なし
パスワード
   ありがとうございます。
下記の様にご指導いただいた通り、使わせていただき
うまくいきました。
セットした合計行の上だけ、二重罫線にしたくて
色々やってみましたが、どんどん混乱したので
あきらめて。普通の罫線にしました(笑)
ありがとうございました。

Sub 1.申請()
Application.ScreenUpdating = False
  ActiveWorkbook.Save
  With Worksheets("DB")
    .Range("d1").AutoFilter _
      Field:=6, Criteria1:="1"
      .Range("D1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
      Worksheets("申請").Range("a1")
      .AutoFilterMode = False
  End With
  Worksheets("申請").Activate
    Dim sh As Worksheet
  Set sh = ThisWorkbook.Worksheets("申請")
  With sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
    .Resize(, 5).Merge
    .Value = "合計"
    .HorizontalAlignment = xlCenter
    With .Offset(, 1)
      .Resize(, 6).Formula _
        = "=SUM(" & _
          sh.Range(.EntireColumn.Cells(2, 1), _
            .Offset(-1, 0)).Address(0, 0) & ")"
      .Offset(, 4).ClearContents
    End With
  End With
  ActiveSheet.UsedRange.Borders.LineStyle = False
  Range("D1", Range("a" & Rows.Count).End(xlUp)).Resize(, 11).Borders.LineStyle = True
  Columns("A:N").EntireColumn.AutoFit
 MsgBox "申請リスト完成"
End Sub

【75227】Re:助けてください。最終行に合計を求め...
お礼  きおら  - 14/1/9(木) 13:52 -

引用なし
パスワード
   ▼γ さん:
>totalRow = Application.Max(totalRow, Cells(1048576, i).End(xlUp).Row + 1)
>は
>totalRow = Application.Max(totalRow, Cells(Rows.Count, i).End(xlUp).Row + 1)
>としたほうがよい。見過ごしていました。

ありがとうございます。
この指定の仕方が前から分からなくって
勉強になりました。
ありがとうございました。

【75228】Re:助けてください。最終行に合計を求め...
回答  ウッシ  - 14/1/9(木) 14:11 -

引用なし
パスワード
   こんにちは


>Range("D1", Range("a" & Rows.Count).End(xlUp)).Resize(, 11).Borders.LineStyle = True

ですか?

これでは結局全てに罫線が引かれちゃわないですか?

  With sh.Range("A1").CurrentRegion
    .Resize(.Rows.Count - 1, 11).Borders.LineStyle = xlDouble
'    .Columns(4).Resize(.Rows.Count - 1, 11).Borders.LineStyle = xlDouble
  End With

D列以降ならコメントアウトした方のコードにしてみて下さい。

【75229】Re:助けてください。最終行に合計を求め...
発言  γ  - 14/1/9(木) 22:31 -

引用なし
パスワード
   For i = 4 To 7
  j = Application.Max(j, Cells(1048576, i).End(xlUp).Row + 1)
Next
ところで、このコードの意味は何だったのですか?
合計を取るわけでもないですしねえ。

普通は、
コードを書くほうが労力がかかるので、コードが正しく、
日本語の説明を漏らしてしまいました、ということが多いわけですが、
今回は、
間違って苦労してコードを書いてしまいました、
ということだったのでしょうか。
不思議です。

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