• ベストアンサー

エクセル 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

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

  • ベストアンサー
回答No.3

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

ooyasima
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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

ooyasima
質問者

お礼

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

回答No.1

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

ooyasima
質問者

お礼

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

関連するQ&A