- ベストアンサー
エクセル 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
- みんなの回答 (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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
各シートを処理するのに 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
お礼
ご回答有難う御座います。 参考にさせて頂きます。
- akirinchan
- ベストアンサー率29% (9/31)
A2セルに値がない場合はソートをしないということなので 各シートをselectしたあとに if文で if(Range("A2").value <> "") としてみてはどうでしょうか?
お礼
ご回答有難う御座います。 if(Range("A2").value <> "")をシートselect後に貼り付けてみましたが、エラーになってしまいうまくいきませんでした。 どの様にしたらよろしいでしょうか。
お礼
今度はうまくいきました。 度々ご回答下さいまして有難う御座いました。