アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAでユークリッド距離を用いて1番近い物を表示

      表          裏
   縦  横  高さ  縦  横 高さ
名前
1 45 30 15 15 20 35
2 15 25 45 35 15 25
3 25 15 15 25 25 15
4 45 35 30 14 27 35
5 14 25 25 14 35 25

上記のようなExcelに名前ごとに寸法が記載されている。5の寸法と近いものをユークリッド距離を用いて表示させたい。
表示は表、裏別、近い順番(上位5個までとか)で上から表示させたいです。

伝わりにくいかも知れませんが
VBA初心者なので詳しい方、ご教示いただきたく。
よろしくお願い致します。

質問者からの補足コメント

  • 結果は別のExcelまたは、シートに表示させたいです。

      補足日時:2022/10/23 17:31
  • 名前の所はどんどん増えて行きますので、名前を入力したらそこの計算をするような感じにしたいです。

      補足日時:2022/10/23 18:24
  • 説明足らず申し訳ございません。

    ユークリッド距離計算方法
    1と5での計算式になります。
    倍率は重要な所だと数値を変えるイメージ。
    (1000とか100とか)

    =(((45-14)^2✳︎1000)+((30-25)^2✳︎100)+((15-25)^2✳︎100)

    =(((1の縦-5の縦)^2✳︎倍率)+((1の横-5の横)^2✳︎倍率)+((1の高さ-5の高さ)^2✳︎倍率)

      補足日時:2022/10/24 12:30
  • 表と裏は別々で計算を行いたいです。
    表は表の縦、横、高さ。
    裏は裏の縦、横、高さで計算し、
    今回は5に近いのを見つけるような例にしましたが3と近いのを見つけたり、名前の所は今後も増えていきますのでそこも考慮したVBAを作りたいです。

    5と3を計算する場合は
    (1の所が3の寸法になる感じになります)

    =(((1の縦-5の縦)^2✳︎倍率)+((1の横-5の横)^2✳︎倍率)+((1の高さ-5の高さ)^2✳︎倍率)


    倍率は表裏でも異なります。書いて頂きました例もありえます。

      補足日時:2022/10/24 14:21
  • >表同士の距離と裏同士の距離の和が、その名前の距離>となるのでしょうか。
    距離は和の計算はしなくても大丈夫です。表は表、裏は裏の距離を表示させたいです。


    >比較元の名前(今回の例では5)ですが
    >名前(A列)の最下行が比較元の名前と考えて良いで> すか。
    >それとも、途中の行の名前を比較元に使う場合もあり>ますか。
    >その場合は、どこかでその名前を指定する必要があり>ます。
    途中の名前を比較元になる場合もありますので、名前(A列)の指定をして、それとの比較を行えるような感じにしたいです。

      補足日時:2022/10/24 14:57
  • 右側のような感じでお願いいたします。
    比較元は表には入れずに、図のような感じにどこかに表示させたいです。

    「VBAでユークリッド距離を用いて1番近い」の補足画像6
      補足日時:2022/10/24 15:32
  • このような感じでお願いいたします。

    「VBAでユークリッド距離を用いて1番近い」の補足画像7
      補足日時:2022/10/24 15:35
  • 画像なんか黒くなってのせれませんでした。

      補足日時:2022/10/24 15:38
  • ご提示頂きました例の図とほぼ変わりませんが
    このような感じでお願い致します。

    「VBAでユークリッド距離を用いて1番近い」の補足画像9
      補足日時:2022/10/24 16:00
  • 基準となる名前はB1セルに入れていただければと思います。

    「VBAでユークリッド距離を用いて1番近い」の補足画像10
      補足日時:2022/10/24 16:18

A 回答 (9件)

こちらに投稿するとエラーになるので


下記URLにアップしました。
以下のマクロを標準モジュールに登録してください。
https://ideone.com/04Dvyp

Const BA1 As Long = 1000 '表縦の倍率
は、あなたの環境にあわせて適切に設定してください。
(BA2-BA6も同様)
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。
思っていたような結果がでました。
大変助かりました。ありがとうございました。

お礼日時:2022/10/25 08:56

最終確認です。


元データのレイアウトは、私がNo7で提示した画像で間違いないでしょうか。
(但し、I3には名前を入力しないので、I列は全て空白とする)
元データのシート名は、Sheet1とする。


結果を表示するレイアウトは、あなたが、補足日時:2022/10/24 16:18
で補足した画像とする。
マクロは、B1に設定された名前を読み込み、その名前を基準として、
距離を算出し、5行目以降に設定する。
(マクロが設定するのは5行目以降とし、最大5件まで表示する)
結果を表示するシート名はSheet2とする。


上記の仕様で間違いないでしょうか。
(シート名を変えたい場合も含め、問題があれば、その旨補足してください)
    • good
    • 0
この回答へのお礼

補足が上限に達しましたのでこちらからお答えさせていただきます。その認識で問題ございません。よろしくお願い致します。

お礼日時:2022/10/24 19:55

もとの表ですが、この画像でレイアウトはあってますか?


異なる場合は、画像で提示してください。
基準となる名前ですが、I3のセルに記述することを想定しています。(黄色のセル)
(都合が悪ければ他のセルを指定してください)
これから出かけます。返信は夜になります。
「VBAでユークリッド距離を用いて1番近い」の回答画像7
    • good
    • 0

>画像なんか黒くなってのせれませんでした。


アクセサリにsnipping toolがあります。それを利用されてはいかがでしょうか。私の提示した画像はsnipping toolを使ってます。
    • good
    • 0

提示された画像が真っ暗なので、再提示をお願いします。

    • good
    • 0

>表示は表、裏別、近い順番(上位5個までとか)で上から表示させたいです。


結果の表示はどのようなレイアウトを望んでますか。
添付図のような例を提示していただけるとありがたいです。
左側の画像は、表同士の差と裏同士の差を合計した値を小さい順に並べています。(距離の計算はでたらめです)
右側の画像は、表同士の差を小さい順にならべ、また、裏同士の差を小さい順に並べています。(距離の計算はでたらめです)

名前5は、基準なので距離は0になります。
(基準の名前を表に入れるのか、入れないのかが不明なのでとりあえず入れてあります)
「VBAでユークリッド距離を用いて1番近い」の回答画像4
    • good
    • 0

>表と裏は別々で計算を行いたいです。


>表は表の縦、横、高さ。
>裏は裏の縦、横、高さで計算し、
というのは、わかるのですが、

名前の距離は表と裏があるので、
表同士の距離と裏同士の距離の和が、その名前の距離となるのでしょうか。

表同士の距離=(((1の縦-5の縦)^2✳︎倍率)+((1の横-5の横)^2✳︎倍率)+((1の高さ-5の高さ)^2✳︎倍率)
裏同士の距離=(((1の縦-5の縦)^2✳︎倍率)+((1の横-5の横)^2✳︎倍率)+((1の高さ-5の高さ)^2✳︎倍率)

1と5の距離=表同士の距離+裏同士の距離
であってますか。
一般例:xと5の距離を求め、それを小さい順に表示する。(x=1,2,3,4)

比較元の名前(今回の例では5)ですが
名前(A列)の最下行が比較元の名前と考えて良いですか。
それとも、途中の行の名前を比較元に使う場合もありますか。
その場合は、どこかでその名前を指定する必要があります。
    • good
    • 0

補足ありがとうございました。


提示例では1の表と5の表の距離になっていますが、
裏はどうなるのでしょうか。
X=1の表と5の表の距離+1の裏と5の裏の距離
を計算し、Xを1と5の距離とすれば、良いのですか。
1000,100とかの倍率は、縦、横、高さで異なりますが、表と裏でも異なりますか。(表の縦=1000、裏の縦=100のようなこともあり得ますか)
    • good
    • 0

ユークリッド距離の求め方が判りません。


例えば、手作業で1のユークリッド距離を求める場合は、どのように計算すれば良いのでしょうか。
ユークリッド距離の求め方を提示していただければ、それをVBAで作成することは可能です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!