• ベストアンサー

3ツの列にある数値の関連性を調べる数式はありますか

仮にABC列に、1から999の数字が入っている場合、各行毎に3ツの数値の加減乗除の関連を調べたいのですが、そんな数式はありますか? 例えば、ABCいずれかに4,576,144の3ツがある場合は乗除、576,144,432とある場合は加減、の関連になっている組合せを調べて抽出したいのですが。 やっかいなのは、4,576,144となっていたり144,4,576となっていることもあるのでIFでA*B=C,A/B=C・・・A=B+C,A=B-C・・・全ての組合せのいずれかに該当する場合とやってみたのですがダメでした。やむなく電卓で計算をしながら該当のものがあれば+とか×のマークを付けているのですが、あと約49,000行あるもので何か良い策はないでしょうか。

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

  • ベストアンサー
回答No.1

「乗除の関係」とか「加減の関係」をはっきり定義しましょう。 たとえば三つ組みの数値で、 乗除の関係 ・一番小さい数と二番目に小さい数を掛けると一番大きい数になる 加減の関係 ・一番小さい数と二番目に小さい数を足すと一番大きい数になる と考えます。すると、max関数やmin関数、それにsmall関数やlarge 関数あたりを使えばいいような気がしませんか。 =if(small(A1:C1,1)*small(A1:C1,2)=max(A1:C1),"乗除の関係", if (small(A1:C1,1)+small(A1:C1,2)=max(A1:C1),"加減の関係","")) という感じですかね。

enimy
質問者

お礼

たしかに、そのような気がします。 「減」や「除」までも考慮に入れたのがまずかったようです。 なるほど納得です。 ありがとうございました。

その他の回答 (2)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

すべと言っても、 A#B=C A#C=B B#C=A (# は演算子) の3通りしか有りません 例えば、A-B=C は B+C=A と同じです この様に、加算と減算は補完の関係にあります 乗算、除算についても同じです 従って、チェックするのは上記の3通りで良いと思います D1=IF(OR(A1+B1=C1,A1+C1=B1,B1+C1=A1),"加減",IF(OR(A1*B1=C1,A1*C1=B1,B1*C1=A1),"乗除","-")) で、どうでしょう さらに、必ず「加減」か「乗除」の関係になっているのであれば 「加減」だけをチェックして、それ以外は「乗除」と割り切る方法もあります D1=IF(OR(A1+B1=C1,A1+C1=B1,B1+C1=A1),"加減","乗除","-"))

enimy
質問者

お礼

算数でいうところの移行をしてみると、たしかに3通りですね。全く気が付きませんでした。 約8割は"-"の該当行と思われますので、前述の式にてやってみます。 ありがとうございました。

  • MRT1452
  • ベストアンサー率42% (1391/3293)
回答No.2

そのレベルになると数式では厳しいかと。 マクロを組んだ方が良いですね。 Private sub CalcCheck() Dim i As Integer for i=1 to 49000 if 解のセル = 値1のセル+値2のセル then '解と計算が一致すれば次の行のメッセージ表示を行う msgbox "これは加算です" elseif 解のセル = 値1のセル-値2のセル then msgbox "これは減算です" elseif 解のセル = 値1のセル×値2のセル then msgbox "これは乗算です" elseif 解のセル = 値1のセル÷値2のセル then msgbox "これは除算です" else msgbox "四則演算が成立する数値の組み合わせではありません" end if next i End Sub みたいな感じで。 ※ざくっとイメージのみ書いただけなので、  セルの指定とか結果の出力先とか、  その辺りはちゃんとした書き方をしてください。  また、値1・値2の順が逆になっている場合とか、  そういった部分に関しての考慮はしていないので、  そういったパターンはまた別に用意しなければいけません。

enimy
質問者

お礼

マクロはこれからの課題として学習準備をしているところです。 丁度よい機会となりそうなので色々と参考にさせていただきます。 ありがとうございました。