• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル VBAで関数)

Excel VBAでデータを加工する方法

このQ&Aのポイント
  • エクセルでデータを加工する際、関数を使用すると処理が遅くなることがあります。そこでVBAを使用して作業を行う方法を模索しています。
  • Sheet1とSheet2で取引先と支店名の情報が記載されています。Sheet1のC列に、Sheet1のA列のB列と一致する支店がSheet2に存在するかを確認したいです。
  • 現在はSUMPRODUCT関数を使用してSheet1のC列にカウントしていますが、処理が重いです。他のSheetでVBAを使用して関数のような処理を行っている部分があり、それと同様の方法でVBAを使用したいです。お力を貸してください。

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

  • ベストアンサー
  • soaikats
  • ベストアンサー率58% (14/24)
回答No.2

ではこんな方法はどうでしょう。 高速化が見込めるかは未確認です。 1.Sheet1と2両方に空白行を挿入。 2.両方のシートのA1を「=CountA(A2:A65536)」とする。 3.Alt+F11でVBE画面を表示する。 4.挿入、標準モジュールをクリックする。 5.以下のFunctionプロシージャを貼付け。 6.Sheet1のC2を「=KOUSIN(A2,B2,Row())」 Function KOUSIN(sHonten as String, sShiten As String, iRow as Integer) as Integer  Dim i As Integer  Dim j As Integer  j = Sheets("Sheet2").Range("A1").Value + 1  i = iRow  KOUSIN = Application.Evaluate("=sumproduct((Sheet2!A2:A" & j & "=""" & sHonten & """)*(Sheet2!B2:B" & j & "=""" & sShiten & """))") End Function

hyorono
質問者

お礼

アドバイスありがとうございます!! お礼が遅くなってしまい、申し訳ございませんでした とても勉強になります^^ このアドバイスを参考に、今後も頑張って勉強しますね!! またぜひお知恵を拝借させてください^^ 本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • soaikats
  • ベストアンサー率58% (14/24)
回答No.1

何かしらの更新がかかるたびに再計算がかかっていると 思われます。必要な時だけ更新処理を流すようにしては? 1.Sheet1と2両方に空白行を挿入。 2.両方のシートのA1を「=CountA(A2:A65536)」とする。 3.Sheet1に以下のSubプロシージャを貼付け。 Sub KOUSIN()  Dim i As Integer  Dim j As Integer  j = Sheets("Sheet2").Range("A1").Value + 1  For inti = 2 To Range("A1").Value   Range("C" & i).Value = Application.Evaluate("=sumproduct((Sheet2!A2:A" & j & "=""" & Range("A" & i).Value & """)*(Sheet2!B2:B" & j & "=""" & Range("B" & i).Value & """))")  Next inti End Sub いかがでしょうか。

hyorono
質問者

補足

アドバイスありがとうございます! なるほど、再計算ですね~ 参考になります!! ですが、ごめんなさい。 知りたいのは、マクロの中で計算させて、結果のみ表示なんです><。 せっかく時間を割いてくださったのに、本当にすみません もしよかったら、結果のみ表示させる方法をご教授願えないでしょうか・・・。 もうしばらく、このまま回答をお待ちしております。 ありがとうございました!

すると、全ての回答が全文表示されます。

専門家に質問してみよう