こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル VBA 集計方法

各シート毎に下記の内容にて集計をしたいのですが、A2のセルにデータがない場合集計をしない方法がわからないのでご存じの方宜しくお願い致します。

Sheets("Sheet1").Select
Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True

Sheets("Sheet2").Select
Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True

Sheets("Sheet3").Select
Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Sub

投稿日時 - 2009-04-30 10:15:56

QNo.4920177

困ってます

質問者が選んだベストアンサー

No1です。どういうエラーが出たか教えていただければ
対応できますが・・・。とりあえず、以下のように書いて実行した
ということですか?

If Range("A2").Value <> "" Then
Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End If

投稿日時 - 2009-04-30 12:10:16

お礼

今度はうまくいきました。
度々ご回答下さいまして有難う御座いました。

投稿日時 - 2009-04-30 13:30:22

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

各シートを処理するのに
Sheets("Sheet3").Selectなど
を繰り返すのでなく
Sub test01()
For Each sh In Worksheets
'除外するものがあればここに記述
If sh.Name <> "Sheet3" Then
MsgBox sh.Name
End If
Next
End Sub
(シート数が多いとき、重宝)
をやってみて、繰り返しの法を勉強のこと。
質問のコードは初心者的で(VBAの経験長いですか)、シートが多いとコード記述に無駄が多い。
この「sh.」をRangeオブジェクトの特定のため、つけることでシートをはっきり特定できる.
多分シートの特定にあいまいさが有ると思う。
Range("A1:P62").・・のようなところ。
#1ご回答に基づいてやってみたコードについて。
===
シート名列挙方式でもできる(有る程度のシート数以内が適当)
Sub test02()
Dim sharray()
sharray = Array("Sheet1", "Sheet2", "Sheet4")
For Each sh In sharray
MsgBox Worksheets(sh).Name
MsgBox Worksheets(sh).Range("A1")
Next
End Sub

投稿日時 - 2009-04-30 12:04:28

お礼

ご回答有難う御座います。
参考にさせて頂きます。

投稿日時 - 2009-04-30 13:31:17

ANo.1

A2セルに値がない場合はソートをしないということなので
各シートをselectしたあとに
if文で
if(Range("A2").value <> "")
としてみてはどうでしょうか?

投稿日時 - 2009-04-30 10:21:36

お礼

ご回答有難う御座います。
if(Range("A2").value <> "")をシートselect後に貼り付けてみましたが、エラーになってしまいうまくいきませんでした。
どの様にしたらよろしいでしょうか。

投稿日時 - 2009-04-30 11:13:11

あなたにオススメの質問