🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

332閲覧

複数列のWorksheetFunctionの結果を計算する方法

tokita.

総合スコア61

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/11/20 02:14

VBAで重複のある情報を一意に集計しようとしています。
必要なのは集計結果だけで、セルに計算式は残らないようにしたいです。
現在、次のようにして計算式を一度入れてから文字にしているのですが、
このために2回同じ範囲に書き込みをするのが無駄だと感じています。

VBA

1[データ重複あり!A:A].Copy [a1] 2[a:a].RemoveDuplicates 3Range(Cells(Rows.Count, 1).End(xlUp).Offset(, 4), [b1]) = Array( _ 4 "=VLOOKUP(A1,データ重複あり!A:B,2,FALSE)", _ 5 "=SUMIF(データ重複あり!A:A,A1,データ重複あり!C:C)", _ 6 "=SUMIF(データ重複あり!A:A,A1,データ重複あり!d:d)", _ 7 "=VLOOKUP(A1,データ重複あり!A:e,5,FALSE)" _ 8) 9[a1].CurrentRegion = [a1].CurrentRegion.Value

計算式が1列だけであれば

VBA

1[データ重複あり!A:A].Copy [A1] 2[a:a].RemoveDuplicates 3計算結果 = WorksheetFunction.VLookup(Range([A1], [A1].End(xlDown)), [データ重複あり!A:B], 2, False) 4Range([b1], [A1].End(xlDown).Offset(, 1)) = 計算結果

とできると思うのですが、
複数列だと結果を入れる配列をうまく作れず(大きさを確保しておいてforで入れる?)、
却って遅くなりそうに思っています。

これを解決する良い方法があれば、ご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答になっていませんが。。。
実に簡潔に処理されていて発想が素晴らしいなと思いました。
反面、VBAを用いながら実質ワークシート側の数式に頼っているのはあまり良い作りとはいえないとも思います(役割分担が明確ではない)。
数式を使わずに行うのであれば、行数x列数(4)の配列を用意しておいて、そこに計算結果を放り込み、最後に対象Rangeに代入すれば良いでしょう。
速度の違いがどうなるかは行数次第ですし、実際にやってみないとわからないと思います。
こんなところで質問している間に作れたのでは?と思います。
結論としては質問者さまが何を優先させたいのかによると思います。

  • VBAとしての処理らしさを優先したい

→ 数式は使わない実装に置き換える

  • 処理としての簡潔さを優先したい

→ 現状維持

  • 処理速度を優先したい

→ 配列を用いた(または別の方法)ものを作成し処理速度を比較する

投稿2019/11/20 05:58

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokita.

2019/11/21 01:20

ありがとうございます。 個人用に即興で作ったものが思わず数年間使い続けるという話になり処理速度が気になり始めた次第です。 worksheetfunctionを使わない場合配列に入れることは確かに簡単だと思うので、実際に作って試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問