ますたあの遊び部屋

パソコンのソフト・ハード関連、写真、イラスト他のブログです。

関数式で苦戦する。

2012年03月02日 | パソコンソフト

以前参加していたExcel Maniacs 、しばらく覗かなかったんですが、、、

熱烈に参加要請されて(無理矢理にというか...^^;)、久しぶりにお邪魔しました。

与えられた問題は5問。

締め切りは3月3日土曜日午後8時。

 

問題を見ると、、、う~~~~ん、難しいな~。

ここ1年くらい、まともに関数式を作っていなかったから

かなりハードルは高いですね~。

昨日ちょっと時間が取れましたので一番とっつきやすそうなのをちょっとやってみました。

(もう時間も限られていますし、ここを見てExcel Maniacs 参加される方もいないでしょうから、、、

 まあ私自身まだ解けていないしね。ちょこっとくらいフライングで発表してもいいかな...。(^^ゞ)

 

問題の一つは、

3桁から10桁の数値から偶数の数字(偶数の数字は必ず一つとする)を抽出できる式を作りなさいという問題。

たとえば、135479だとすると、4が偶数なので4を抽出できる式が答えになります。

 

問題を解いていくのには、一つ一つの数値を切り出して偶数であるかどうかを検証する

その数値を抽出できるようにするっていうようになるのかな~。

 

たとえば、MID(H3,1,1) とすると先ほどの数値の左端の1が切り出せます。

これを、MOD(MID(H3,1,1),2)=0 とするとFalse となりますので偶数ではないと判定できます。

 

桁数が10桁までですので10桁分の検証ができるように配列数式で作ってみますと

{=MOD(MID(H3,ROW(1:10),1),2)=0}

数式を選択してF9キー押下で式の答えを疑似的に表示してくれます。

以下のような答えを返してきました。

{FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

これを見ると、左から4桁目にTRUEが返されていて、

これが偶数であると判定できます。

 

この式を発展させて

=MID(H3,ROW(1:10),1)*(MOD(MID(H3,ROW(1:10),1),2)=0)

として、F9キー押下すると

{0;0;0;4;0;0;VALUE!;#VALUE!;#VALUE!;#VALUE!}

となります。

この中の#VALUE!が無ければ簡単に抽出できるんですけどね...。^^;

では、6ケタ限定の式にしてみます。

{=SUM(MID(H3,ROW(1:6),1)*(MOD(MID(H3,ROW(1:6),1),2)=0))}

こうすると偶数の4が答えとして返されます。

 

エラーの処理をどうするか、ここが問題なんですね。

では、エラーが出ないように桁数を特定してしまえば、、、と早計に考えて...。^^;

 

LEN(H3) とすれば文字数6が返されます。

=MID(H3,ROW(1:LEN(H3)),1)*(MOD(MID(H3,ROW(1:LEN(H3)),1),2)=0)

と式を作って、Ctrl+Shift+Enter で確定させようとしても、、、

こんな式はダメだよってExcel君にダメ出しをされてしまいました。^^;

別のセルH20にLEN(H3)と作って、=TYPE(H20)として数値であるか文字であるか検証してみました。

すると1(数値)が返された、、、う~~~ん...。^^;

 

では、LOOKUP関数ではどうだろうかと式を作ってみました。

{0;0;0;4;0;0;VALUE!;#VALUE!;#VALUE!;#VALUE!}

この中の最大値を抽出できないかと...。

すると、、、0と答えを返してきた、、、あ、あれ~~~、おかしいな~。(^^ゞ

やはり頭の中がかなり錆びついていますね~。

 

残り時間も少ないですから、短めな式を目指すよりは、取りあえず答えを出せる式を作るように

方針を転換して行くことに...。

 

エラーを取り除くのではなく、エラーの出ない式にしてしまえば問題が解決しますよね。

入力されている数値の桁数(文字数)に合わせるのではなくて

すべてのセルを10桁に揃えてしまえば簡単に答えが出せる、、、かな...。(^^ゞ

 

H3&RPET("1",7) として10桁以上になった数値は切り捨ててしまえば

10桁に揃えられますよね。

ということで作ってみました。

{=SUM((MID(--LEFT(H3&REPT("1",7),10),ROW($1:$10),1)*(MOD(MID(--LEFT(H3&REPT("1",7),10),ROW($1:$10),1),2)=0)))}

 

答えの4が返されました。

$マークも付けておきましたので、オートフィルで式のコピーをすると

う~~~~ん、バッチリ。(^^)v

 

まあ、、、短くてかっちょ良い式とはかけ離れていますが

取りあえず答えの出せる式ができたのでメンツが保てました。^^;

奇数を抽出する式はMOD関数の答え=1 とすれば奇数の判定ができますから

問4の式もすぐにできますよね。^^

 

こんな感じ。

{=SUM((MID(--LEFT(K3&REPT("2",7),10),ROW($1:$10),1)*(MOD(MID(--LEFT(K3&REPT("2",7),10),ROW($1:$10),1),2)=1)))}


最新の画像もっと見る

7 コメント

コメント日が  古い順  |   新しい順
つ、、続きが、、 (jyo3)
2012-03-03 07:32:08
見たいです。
・・・・・
返信する
jyo3 さん (ますたあ)
2012-03-03 16:00:39
久方ぶりに関数式を作りました。

最初は苦痛でしたが、だんだんと楽しさが...。
お陰で関数式の面白さを再認識させてもらいました。
感謝です。^^
返信する
Unknown (jyo-3)
2012-03-03 16:54:55
では、、また、、、あちらで、、、、
感想でも、、、
8時以降にね、、、

ありがとうございました。
返信する
久々です。 (・_・)
2012-03-08 22:13:25
②の問題を解いてみました。
もちろん、あざやかという訳にはいきません。
配列数式も使えませんし。
なので、知ってる関数を使って、こつこつとです。
どうでしょ?!

=IF(VALUE(E3)-VALUE(MID(E3,8,1)&MID(E3,7,1)&MID(E3,6,1)&MID(E3,5,1)&MID(E3,4,1)&MID(E3,3,1)&MID(E3,2,1)&MID(E3,1,1))=0,"○","×")
返信する
頑張りましたね~。 (ますたあ)
2012-03-08 22:53:44
すごいじゃあないですか。

バッチリ答えが返されましたよ。
返信する
バッチリと思ったら... (ますたあ)
2012-03-09 19:57:23
8桁対応の式だったんですね。
後二つほどMIDを&で繋がないと
でした。^^;

今日、何気に検証ししてしまった。
返信する
凄すぎ (・_・)
2012-03-10 09:36:54
問2のところは、8桁の数字が並んでいたので、
8桁でいいかと思いました。

ますたあさんの式を見ても、何が何やら。
凄すぎです。
教えてもらうにしても、10時間くらいかかりそう・・・

でも、関数は楽しいですね。
また、ぼちぼち教えて下さい。



返信する

コメントを投稿