プロが教えるわが家の防犯対策術!

こんにちは
わかりにくいタイトルですみません。

ある列に
以下の様な文字を入力し、






各文字に表示優先順があるものとして
一番優先度の高い文字を表示させたいのですが、
現状、IF文で各文字を数値に置き換えることにより
優先度を持たせMAXの結果をIF文で文字に戻すといった方法で取り組んでいます。
もっとシンプルな方法があるのではと思い調べてますが、
見つかりません。
良い方法があればご教示願います。
よろしくお願いします。

A 回答 (4件)

A列に文字があるとして、A1の先頭ならMID(A1,1,1)を2番目ならMID(A1,2,1)で1文字(この質問は1文字だけを問題にするとします)を取り出せます。

先頭の1文字だけを問題にして、1文字しか入っていないとします。
その文字を優先順位のコードを振るには、Find(A1,"文字列")として、その文字列に並べる文字の順を、調整します。
"$|#A+ "なら$は1、|は2、#は3、Aは4、+は5、スペースは6というコードを、=FIND(A1,"$|#A+ ")でB列に各対応コードを返えさせられます。(""は便宜上、スペースに置換しておかないと都合が悪い。)
そしてB列のMINを取ると一番優先度の高いコードが得られます。=CHOOSE(”コード","$|#A+ ")で復号できます。
コードのところかMIN(・・)が入ります。
(データ)質問と違う例ですが、A列に
a
d
f
g
j
(関数式)
B1セルに=FIND(A1,"acefgbdj")
B2以下に複写
a1
d7
f4
g5
j8
となる。
一番優先度の高い文字は
=CHOOSE(MIN(B1:B5),"a","c","e","f","g","b","d","j")
でaになる。
一番優先度の高いのはaと言うのは、自明(自分で決めている)のですが。
常例でaの行を削除するとfが先頭優先度となり、fが表示されます。
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。
あまり関数を知らなかったので
上記の内容を全てIF文でやっていたので大変でした。
ありがとうございます。

お礼日時:2004/02/29 15:42

対象範囲をA1:A10にしています。


途中に未入力セルがあれば無視します。(大きい値を割り当てています)
これも配列数式です。


=MID("$|#A+",MIN(IF(A1:A10="",99999,FIND(A1:A10,"$|#A+"))),1)

この回答への補足

上の件、勘違いで問題ありませんでした。
FINDだけを配列数式にしてもだめですよね。
ありがとうございました。

値無しと思っていたところが実は空白だったためおかしかった様です。ISBLANKに変更して対応しました。
お世話になりました。

補足日時:2004/02/29 15:38
    • good
    • 0
この回答へのお礼

ありがとうございます。
ためさせていただきましたが
おそらくFIND(A1:A10,"$|#A+")が正しく機能できていない様です。
配列数式で上記の処理を行うと複数入力時はどの様な
値が返ってくるのでしょうか?

お礼日時:2004/02/29 15:13

  A  B


1 |  式
2 #
3 A
4 A
5 |

A1:A5に対象文字列が入力されているとします。
$→|→#→A→+ の順に表示優先順があるとして、B1に最優先の文字を表示します。
 ※対象文字列は1文字としています。2文字以上ならユーザ定義関数を作ってしまいます。
 ※表示の優先度合いを定義した文字以外は入力されないとします
 

B1の式

 =MID("$|#A+",MIN(FIND(A1:A5,"$|#A+")),1)

上記は配列数式です。
数式バーに算式を入力し、Ctrl+Shift+Enter で登録します。これで配列数式として登録されます。Ctrl+Shift+EnterはCtrlキーとShiftキーを押しながらEnterキーを押すことです。配列数式として登録されれば、数式バー内で{算式}のように算式が{ }で囲まれます。
登録に失敗したら、そのセルでファンクションキーF2を押して編集モードにして、再度Ctrl+Shift+Enterとしてみて下さい。算式を修正した時も同様に登録します。

この回答への補足

ご返答ありがとうございます。
なるほど!っていう様な式です。

が、重ね重ね説明不足申し訳ないです。
何も入力されないセルもありまして・・
それは省きたいのです。すみません。
スペースを入れとけば教えていただいた式で
問題無いとは思うのですが・・・

補足日時:2004/02/28 20:46
    • good
    • 0

VBAでないとしての話ですが・・・


A列の1~5に「$、|、#、A、+」が入力されているとして、
B1に「=CHAR(MAX(CODE(A1),CODE(A2),CODE(A3),CODE(A4),CODE(A5)))」
勘違いしているかな?

この回答への補足

ご返答ありがとうございます。
言葉足らずでした。申し訳ないです。
入力される文字は5種類ほどですが、
入力可能なセルはそれ以上です。
また、優先順位も文字コードで決定されれば楽ですが、
別の取り決めにより決定されます。
上手くく説明できませんが、例えば
F(ファースト) > B(ビジネス) > Y(エコノミー)みたいな感じです。

よろしくお願いいたします。

補足日時:2004/02/28 20:05
    • good
    • 0

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