アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロでの質問になります。
どなたか助けてくださいm_ _m

A列~N列 2~48行まで数字が入っているエクセルファイルに
シート名がバラバラの複数シートが入っています。
ここに下記作業を実行したいです!!


C列 2-19行の合計をC-20に反映 21-36行の合計をC-37に反映 38-48行の合計をC-49に反映 
C列 20,37,49の合計をC-51に反映 
C列と同じ作業をD,F,G,H,J,K,L,M列にも実行する

E列 2-19行の平均をE-20に反映 21-36行の合計をE-37に反映 38-48行の合計をE-49に反映
E列 20,37,49の平均をE-51に反映
E列と同じ作業をI,N列にも実行する


①0または0%の場合は空白(表示させない)
②エラー表示の場合は空白(表示させない)
③全セル3桁カンマ(,)表示で 20,37,49,51行目は太文字
④空白は無視して合計、平均は反映させる
⑤C列チームは数値 E列チームは%
⑥同ファイル内に名前がバラバラの複数シートがありこのシート全てに同じ作業を繰り返す

以上①~⑥の条件を盛り込み実行させる方法を
どなたか宜しくお願いいたします。

A 回答 (2件)

この程度の変更はご自分で出来るように頑張って下さい。



Sub goo_Sample()
Dim wb As Workbook
Dim sh As Worksheet
Dim i As Integer
Dim tmp As Variant
Application.ScreenUpdating = False
Set wb = Workbooks.Open("D:\Data\test.xlsx")
For Each sh In wb.Worksheets
With sh
.Range("C2:N51").NumberFormatLocal = "#,##0;-#,##0;"
With Range("C20:N20, C37:N37, C49:N49, C51:N51").Font
.FontStyle = "太字"
End With
For i = 3 To 14
'E,I,N列
If i = 5 Or i = 9 Or i = 14 Then
tmp = Application.Average(.Range(.Cells(2, i), .Cells(19, i)))
If IsError(tmp) Then
.Cells(20, i).Value = ""
Else
.Cells(20, i).Value = tmp
End If
tmp = Application.Average(.Range(.Cells(21, i), .Cells(36, i)))
If IsError(tmp) Then
.Cells(37, i).Value = ""
Else
.Cells(37, i).Value = tmp
End If
tmp = Application.Average(.Range(.Cells(38, i), .Cells(48, i)))
If IsError(tmp) Then
.Cells(49, i).Value = ""
Else
.Cells(49, i).Value = tmp
End If
.Cells(51, i).Value = (.Cells(20, i).Value + .Cells(37, i).Value + .Cells(49, i).Value) / 3
Else
'C,D,F,G,H,J,K,L,M列
.Cells(20, i).Value = Application.Sum(.Range(.Cells(2, i), .Cells(19, i)))
.Cells(37, i).Value = Application.Sum(.Range(.Cells(21, i), .Cells(36, i)))
.Cells(49, i).Value = Application.Sum(.Range(.Cells(38, i), .Cells(48, i)))
.Cells(51, i).Value = .Cells(20, i).Value + .Cells(37, i).Value + .Cells(49, i).Value
End If
Next i
End With
Next sh
wb.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございますm(_ _)m
本当ですね(>_<) 勉強して頑張ります‼️

お礼日時:2017/01/07 09:03

処理したいブックは下記で設定して下さい。


コード7行目
Set wb = Workbooks.Open("D:\Data\test.xlsx")

Sub goo_Sample()
Dim wb As Workbook
Dim sh As Worksheet
Dim i As Integer
Dim tmp As Variant
Application.ScreenUpdating = False
Set wb = Workbooks.Open("D:\Data\test.xlsx")
For Each sh In wb.Worksheets
With sh
.Range("C2:N51").NumberFormatLocal = "#,##0;-#,##0;"
With Range("C20:N20, C37:N37, C49:N49, C51:N51").Font
.FontStyle = "太字"
End With
For i = 3 To 14
.Cells(37, i).Value = Application.Sum(.Range(.Cells(21, i), .Cells(36, i)))
.Cells(49, i).Value = Application.Sum(.Range(.Cells(38, i), .Cells(48, i)))
'E,I,N列
If i = 5 Or i = 9 Or i = 14 Then
tmp = Application.Average(.Range(.Cells(2, i), .Cells(19, i)))
If IsError(tmp) Then
.Cells(20, i).Value = ""
Else
.Cells(20, i).Value = tmp
End If
.Cells(51, i).Value = (.Cells(20, i).Value + .Cells(37, i).Value + .Cells(49, i).Value) / 3
Else
'C,D,F,G,H,J,K,L,M列
.Cells(20, i).Value = Application.Sum(.Range(.Cells(2, i), .Cells(19, i)))
.Cells(51, i).Value = .Cells(20, i).Value + .Cells(37, i).Value + .Cells(49, i).Value
End If
Next i
End With
Next sh
wb.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
    • good
    • 1
この回答へのお礼

いつもありがとうございますm(_ _)m
こちら使わせて頂きました、 完璧でしたm(_ _)m ありがとうございます! 質問なのですが、I. N列の37,49行目を合計ではなく平均にしたい場合はどの様に変更したらよろしいでしょうか。 宜しくお願いいたします。

お礼日時:2017/01/06 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!