• ベストアンサー

入力セルが○○の時に計算される値を書き出す

お世話になります。以下、もし可能ならVBAを使わずにできる方法があれば(簡単ならVBAでも)、ご教示いただけると大変助かります。 47都道府県の各都道府県と他のどの都道府県が最も似ているかを見つけるに当たり、人口、面積の広さ、県民所得などいくつかの数値を基準に探します。たとえば、京都と似たものを探す時、他の46都道府県の人口、面積、所得と、京都の人口、面積、所得の差の二乗の和が最小になるものを類似都道府県とします。具体的には(人口差の2乗+面積差の2乗+所得差の2乗)÷3。数値はそれぞれ基準化しておきます。 一つの列(A列)で二乗和を求めて、最小値を探し出し、その値に該当する都道府県を表記するところまでは来ました。 47の都道府県に対し、47の答えを出すには47回インプットセルに入力して出てきた結果をコピペするか、47の列を作って解決するかのどちらかですが、できれば一つの列で計算をし、京都の場合に山口となるなら、都道府県を書いた別の列の「京都」の隣の列に「山口」が記入されるような形にしたいと思っています。 と言いますのは、本当にやりたい分析は、約1000のものに対して、それぞれ1000の答えが出てくるので、個別に列を作ってやる場合は1000列作る必要があるので、できれば避けたいと思っています。 「入力セルが○○の時に計算される値を書き出す」、というイメージで、もしWhen関数なるものが存在するなら、そういうイメージです。if関数、match関数などで何とかできないかと画策しましたが、うまく行っていません。 分かりにくくて恐縮ですが、よろしくお願いいたします。

  • hoda
  • お礼率50% (4/8)

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

 A列2行目から1000行目に「約1000のもの」の名称が、B・C・D列に比較したい数値が入っているものとします。  ちょっとまどろっこしい式ですが、E2セルに =INDEX($A$2:$A$1000,MATCH(SMALL((B2-B$2:B$1000)^2+(C2-C$2:C$1000)^2+(D2-D$2:D$1000)^2,2),(B2-B$2:B$1000)^2+(C2-C$2:C$1000)^2+(D2-D$2:D$1000)^2,0)) と入力し、[Shift] + [Ctrl] + [Enter] で確定します(配列数式)。  これをE列最終行までオートフィルしてください。  式の成り立ちは、「人口差の2乗+面積差の2乗+所得差の2乗」の部分に当たる「基準」が 基準 = (B2-B$2:B$1000)^2+(C2-C$2:C$1000)^2+(D2-D$2:D$1000)^2 で、この部分を「基準」に置き換えると =INDEX($A$2:$A$1000,MATCH(SMALL(基準,2),基準,0)) という式になります。  この式は、[Shift] + [Ctrl] + [Enter] で確定し配列数式となっておりますので、「基準」は「定数」ではなくて「配列」になっています。  従って、自分同士を比較したときの基準値が「0」になりますので、「最小値」が 最小値 = SMALL(基準,2) となり、配列である「基準」の中から「二乗和を求めて、最小値を探し出」すと、その「位置」は 位置 = MATCH(最小値,基準,0) となります。  次に、この最小値の対象(相手)である名称はA列から拾うことになりますので、 該当者 = INDEX($A$2:$A$1000,位置) となりました。

hoda
質問者

お礼

ありがとうございます! ビンゴで出ました!感激です。これで睡眠時間が確保できそうです。 しかも、分かりやすい関数のご説明、ありがとうございます。完全に構造を理解することができて助かります。今後、いろんなことに生かせそうです。 ちなみにですが、1,000行x4列の中に空白行が含まれている場合には#valueとなってしまいますが、空白行が含まれている場合でも計算できたりするものでしょうか?

その他の回答 (1)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.1

参考までに    A   B   C   D 1  秋田  2   3   7 2      人口  面積 所得 3  北海道 4   10   5 4  青森  1   2   3 5  秋田  2   3   7 6  岩手  3   7   4 7  山形  5   5   6 8  新潟  6   6   2 9 A1に調査地点を入力 B1=VLOOKUP($A$1,$A$3:$D$1000,COLUMN(),0) といれ D1 まででコピー =INDEX(A:A,MOD(SMALL(INDEX(((B3:B10-B1)^2+(C3:C10-C1)^2+(D3:D10-D1)^2)*10000+ROW(A3:A10),),2),10000)) こんな感じかな

hoda
質問者

お礼

ありがとうございます! このケースですと秋田に対して山形、という答えが出てきますが、もし可能であればEの列に北海道に対応する県、青森に対応する県、秋田に対応する県・・・と一度にダーッと並べられるといいなと思っているのですが、ここまで教えていただいたので、なんとか頑張ってみます。 Indexやmodなどの関数は初めて見ました。勉強になります。

関連するQ&A

  • EXCELで入力された式の値を求めて自動計算

    A B C D E 1|データNO |数値1| 数値2| 数値3| 2| 1| 0.3 | 0.2 | 0.5 | 3| 2| 0.3 | 0.2 | 0.5 | 4| 3| 0.3 | 0.2 | 0.5 | -------------------------------------------- 10| 2/1| 数式1| 数式2 | 数式3 | 11| 3/2| 数式4| 数式5 | 数式6 | 12| 【求めたい値】 数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2 数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3 B列の2/1というのをそのまま式にしたいです。 2/1、3/2などは規則性はありません。その都度変わります。 C列の式ではC列の値を、D列の式ではD列の値を用います。 関数で=MATCH(LEFT(D34,SEARCH("/",D34,1)-1),D1:D23,0))と入れ、C3の値を求めようと思いましたが この時点でエラーになりました。=MATCH(2,D1:D23,0)だと大丈夫なのですが・・・。 関数でやるととても式が長くなりそうなので、VBAの方が良いかとも思っています。 どのようにコード、もしくは式を書けば希望の値が得られるでしょうか? VBAの場合は2/1などの数値を入れた時点で自動計算できれば嬉しいです。 よろしくお願いします。

  • 入力した値をもとに線を引きたいのですが

    よろしくお願いいたします。 工程表を作りたいという前提で、線を引きたいのですが。 開始日と終了日の差を数値としてとらえることができると思うのですが、 その数値をもとに「何cm」という線を引くにはどうしたらよいでしょうか。 excel2010を使用いたします。 簡単な方法がよいですが、結果としてその集合体を作りたいわけで、 マクロを使う、関数を使う、VBAを使う、など方法は問いません。 また、Accssessや別のソフトを使用しての方法でも問題ございません。 よろしくお願いいたします。 どうぞよろしくお願いいたします。

  • 文字列で読み込んだ計算式で値を計算

    VBAで数値と式を文字列で受け取り、式に従って値を返す関数を作成したいと考えています。 ex KEISANという関数に対し、値と計算式を与え結果を求める A=50 B=80 C=10 SIKI="B+A-C" KEKKA = KEISAN(A,B,C,SIKI) KEKKAには、式に従い120が返る このA~C及びSIKI(式)は外部ファイルから読み込みます。式には加算か減算しかありません。 どなたか、良いアイデアありましたら、教えて下さい。

  • excelのセル参照

    vba初心者です。 excelのvbaでセル範囲(rangeなど)を指定して数値の入力や参照をしますが vbaを使わずに元のワークシート側で行・列の挿入、削除した場合 vbaにはその分反映されません。(当然ですが) Range("C3:D4")の場合、B列に列を挿入したらRange("D3:E4") となるような。 vbaの修正を最小限に抑える簡単で良い方法はありますか。

  • 香川県が合併されずに残った理由

    都道府県面積最小の香川県は人口も少ないのに隣県と合併されなかったのはなぜですか?中央の関心が薄かった?

  • エクセルの相関関数について

    ある地域の町名別(A列)の売上高(B列)と、女性人口割合(C列)、高齢者人口割合(D列)などなど・・・の相関を見るため、エクセルの相関関数(CORREL)を使用しました。 A列 B列 C列 D列・・・ あ町 100  43% 25% い町 500  49% 23% う町  30  44% 19% え町  80  48% 21% そうしたところ結果として「0.01811」「0.03617」「0.05229」「-0.0585」のような数値が導かれました。 相関関数は「1」に近づくほど相関がある、とされていますが、 (1)これらの数値の差「0.01」「0.02」の差をどのレベルとして受け止めればよいのでしょうか?「わずか差」なのか「大きな差」なのか? (2)また、マイナスの結果はどのような意味があるのでしょうか?反比例の相関なのでしょうか? どちらかというと統計学の範疇かもしれませんが、すみませんが、よろしくお願いします。

  • エクセルでセルの中身が漢字かどうか識別する方法は?

    セルの内容が、数値か、文字列か、空白かどうかは関数で出来るのですが、文字列の場合、それが漢字(ひらがな、かたかな含む)かそうではないのか識別できる関数またはVBAはないでしょうか?

  • 誤差の二乗を最小にする理由

    収集したデータをある関数でフィッティングする際、収集したデータと関数の差を二乗した合計が最小になるよう、関数を求める方法がありますが、なぜ二乗なのでしょうか。 統計的な根拠があるという話を聞いたのですが、WEBで検索しても手法の説明や実際の計算の仕方ばかり検索され、根拠がなかなかみつかりません。 なぜ、絶対値の合計や3乗、4乗、平方根ではなく、二乗の和を使用するのでしょうか。

  • 最小二乗法について

    最小二乗法では二乗和の誤差 Σ[i=1~n]{Yi-(α+βXi )}^2 (iは添え字です) を最小化するα,βを推定することを考えますが、 これは単純にα,βで偏微分してそれを0とおいて 連立方程式を解くだけでよいのですか? といいますのも、2変数関数の極値を求める場合、 Hessianを計算して判別しますよね? ただ一階偏導関数が0になるからといって、 そこで極値をとるとは限らない気がしたので… それとも最小二乗法の場合は必ずとるようになっているのでしょうか? 手元の本には、 「この二乗和は非負値なので、αとβで偏微分したものを0とするα,βが上式を最小にする値である」 とあるのですが、一般に非負値だとこの ようなことが言えるのでしょうか?

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

専門家に質問してみよう