VBA初心者です。ご教授ください。
会社で必要な集計表を作っています。
以下のVBAを使用しているのです。いろいろなネットの記載を見て何とかたどり着きました。
SUMIFSの関数を使い商品毎、店舗ごとに売上数を出しています。1万行くらいあるので時間がかかってしまい苦労しています。スピードをさらに速くすることは可能ですか?SUMIFSではなくVLOCKUPを使うと早くなるということがネットに書いてあったのですがVLOCKUPで複数条件を設定するのは可能ですか?
わかりにくい質問で申し訳ありません。
ご教授いただければと思います。
ちなみに
N列 商品コード
U1:AJ1とAL1:BA1 店舗コードそれぞれおなじもの
*************************************
Sub ⑫店別()
Sheets("home").Select Rows(1).Insert
Sheets("SYS").Select
Range("A1:P2").Copy Sheets("home").Range("U1")
Sheets("home").Select
Range("U1:AJ2").Copy Sheets("home").Range("AL1")
'****************************************
' 店別在庫
'****************************************
Dim LastRow As Long, wS As Worksheet
Set wS = Worksheets("zaiko")
With Worksheets("home")
LastRow = .Cells(Rows.Count, "N").End(xlUp).Row
With Range(.Cells(3, "AL"), .Cells(LastRow, "BA"))
.Formula = "=SUMIFS(zaiko!$G:$G,zaiko!$C:$C,$N3,zaiko!$A:$A,AL$1)"
.Value = .Value
End With
End With
'****************************************
' 店別売上 売上0なら空白
'***************************************
With Worksheets("home")
LastRow = .Cells(Rows.Count, "N").End(xlUp).Row
With Range(.Cells(3, "U"), .Cells(LastRow, "AJ"))
.Formula = "=IF((SUMIFS(uriage!$I:$I,uriage!$C:$C,$N3,uriage!$A:$A,U$1))=0," & """ """ & ",SUMIFS(uriage!$I:$I,uriage!$C:$C,$N3,uriage!$A:$A,U$1))"
.Value = .Value
End With
End With
'****************************************
' 在庫が0の場合はセルがグレー
'***************************************
Dim i As Integer, j As Integer
N = Sheets("home").Cells(Rows.Count, "N").End(xlUp).Row
For i = 3 To N
For j = 21 To 36
If Cells(i, j + 17).Value = 0 Then
Cells(i, j).Interior.ColorIndex = 15
Else
End If
Next j
Next i
End Sub
No.1
- 回答日時:
中を確認するのが面倒なのでとりあえず、自動計算を停止するだけでも早くなると思います。
お試し下さい。「Sub ⑫店別()」のすぐ後に「Application.Calculation = xlManual」
「End Sub」のすぐ前に「Calculate」「Application.Calculation = xlAutomatic」を追加してみてください
No.2ベストアンサー
- 回答日時:
こんにちは。
昨日
http://oshiete.goo.ne.jp/qa/9608002.html
でも書いたばかりの話ですが、
Microsoft に、このような話が出ています。
『Excel 2010 のパフォーマンス: 計算パフォーマンスの強化』
https://msdn.microsoft.com/ja-jp/library/office/ …
『Excel 2010 のパフォーマンス: パフォーマンスの問題を最適化するヒント』
https://msdn.microsoft.com/ja-jp/library/office/ …
話の流れは、揮発性関数の話から始まっていますが、昔のExcel(2003以前)の数式の書き方とは違うという趣旨で話が展開しています。リンクのサイトは専門的で、読んでいるだけでは、なんとも想像の付かない部分があります。
ただ、SumIf であろうが、VlookUp であろうが、VBAを専門としている人には、あまり大きく違うようには思えないのです。
そのコードは、長くここの常連でいる人の書き方に似ていますから、酷評は避けますが、その数式を貼り付けるというところで、もうひと工夫が必要だと思います。それ以上は、全面的な改変になってしまいます。
当面は、画面の切り替わりそうなところで、この*/** を入れてください。
Application.ScreenUpdating = False '*
With Range(.Cells(3, "AL"), .Cells(LastRow, "BA"))
.Formula = "=SUMIFS(zaiko!$G:$G,zaiko!$C:$C,$N3,zaiko!$A:$A,AL$1)"
.Value = .Value
End With
Application.ScreenUpdating = True '**
Application.ScreenUpdating = False '*
With Range(.Cells(3, "U"), .Cells(LastRow, "AJ"))
.Formula = "=IF((SUMIFS(uriage!$I:$I,uriage!$C:$C,$N3,uriage!$A:$A,U$1))=0," & """ """ & ",SUMIFS(uriage!$I:$I,uriage!$C:$C,$N3,uriage!$A:$A,U$1))"
.Value = .Value
End With
Application.ScreenUpdating = True '**
No.3
- 回答日時:
計算を効率的に行うために作業列を使ったりしますよね。
今回のケースでは、それと同じように作業ピボットテーブルを作ってみてはいかがでしょうか?集計自体は圧倒的に早くなります。後は、ピボットテーブルで集計した結果を目的のシートに表示するだけです(とは言っても、1万行×数十列の転記が必要なので、そこそこ時間はかかります)
目的シートへの表示は、GETPIVOTDATA関数を使います。マクロ内でセルに数式を設定していますが、そこをGETPIVOTDATAの式に変えるイメージです。
実際に手作業でやってみると、式のイメージが分かるを思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報