teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.30%
VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

4494閲覧

VBA リストから中央値を取得したい

ritsu0308

総合スコア1

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/02/28 22:01

編集2022/02/28 22:31

0

0

前提・実現したいこと

VBAで写真のような果物と価格の表(A、B列)があったとき、D、E列に被っている果物の中央値を出力したいです(被っていない果物はそのまま出力)。この表は11行ですが、実際には何千行もあります。 イメージ説明

該当のソースコード

作成したソースコードは以下の通りです。
6行目のThenとElseの間に中央値のコードを書きたいのですが、書き方がわからないです。
またコードを書くのが初めてなので、もし他にもおかしいところなどございましたら、お手数をおかけしますが、ご指摘いただけますと幸いです。

VBA

1Sub 重複データから中央値を取り出す() 2 3 Dim dData As New Dictionary 4 Dim data As Variant 5 6 data = Range("A1").CurrentRegion 7 8 For i = 1 To UBound(data) 9 If dData.Exists(data(i, 1)) Then 10 11 Else 12 dData.Add data(i, 1), data(i, 2) 13 End If 14 15Next i 16 17Dim key As Variant 18Keys = dData.Keys 19 20For i = 1 To UBound(Keys) 21 Cells(1 + i, "D").Value = Keys(i) 22 Cells(1 + i, "E").Value = dData(Keys(i)) 23Next i 24 25End Sub

試したこと

最大値の取得などと近いのかなと思い、調べたら出てきたのですがなかなかヒントが得られず、結局中央値の取得はできませんでした。

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

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

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

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

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

mdj

2022/03/01 00:33

果物・値段でソートして、「りんご」の総数を取得して、総数の半分の値になったところを値段を取得したらよいです。総数が偶数なら中央の2件の平均値を取得したらよいです。
guest

回答1

0

ベストアンサー

中央値は、データをソートして、その中央の値(偶数個なら中央2個の平均)を取得する必要がありますので、VBAだけでやろうとすると面倒ですし、重くなります。
MEDIANというワークシート関数がありますので、その式を埋め込むのが簡単でしょう。

vba

1Sub 重複データから中央値を取り出す() 2 3 Dim dData As New Dictionary 4 Dim data As Variant 5 data = Range("A1").CurrentRegion.Value 6 7 Dim i As Long 8 For i = 2 To UBound(data) 9 If dData.Exists(data(i, 1)) Then 10 dData(data(i, 1)) = dData(data(i, 1)) & "," & data(i, 2) 11 Else 12 dData.Add data(i, 1), data(i, 2) 13 End If 14 Next i 15 16 Dim keys As Variant 17 keys = dData.keys 18 19 For i = 0 To UBound(keys) 20 Cells(2 + i, "D").Value = keys(i) 21 Cells(2 + i, "E").Value = "=MEDIAN(" & dData(keys(i)) & ")" 22 Next i 23 24 '式を値に変換 25 With Range("D2").CurrentRegion 26 .Value = .Value 27 End With 28 29End Sub

投稿2022/03/01 04:35

hatena19

総合スコア34367

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

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

ritsu0308

2022/03/01 06:13

MEDIANの埋め込みをご教授いただきありがとうございます。 大変勉強になりました。 中央値を取得する方法がわからず、作成が止まってしまっていたため、本当に助かりました。 ご回答いただき、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問