ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのそれまでの3つの数字がすべて マイナスならば、

  • mixiチェック
  • このエントリーをはてなブックマークに追加
それまでの3つの数字がすべて マイナスならば、

(処理ルール)
J列の前の3つの数字がマイナスならば、
D列 に 1を換算する。それ以外のときは当初の10のまま。

J3とJ7とJ11の数字が 3つともマイナスなので、 D15に 10+1と 1加算する。
J7とJ11はマイナスだがJ15がプラスなので、加算はせずに D19には 当初のまま 10を入力
J11とJ15とJ19の数字を見るが、J19が空白なので、3つの数字にするためにさらなる前のJ7の数字を使う。J7・J11・J15の3つの数字では 3つともマイナスという条件に当てはまらないので、 D23には 10を入力する。
同様に、J15・J19・J23の数字を見るが、空白が1つあるので、J11・J15・J23の数字が条件に当てはまらないので、D27には 10を入力する。

(データ)

行番号  D列 J列 L列
3 10 -2440 sys2
7 10 -1510 sys2
11 10 -2410 sys2
15 11 800 sys2
19 10 空白 sys2
23 10 -100 sys2
27 10 -1510 sys2
31 10 -1650 sys2
35 11 空白 sys2




3つ前の数字の選び方
3行目・7行目・11行目と4行おきに見る。
すなわち、行番号を4で割ると 3余る行の数字のみを対象とする
なお、同行には L列に sys2 という文字があります。
空白セルの場合、さかのぼってその上のセルを検討します。
同様に、3つとも空白ならば、さらに数字が入っているセルまでさかのぼります。

結果は D列に、
条件に 真ならば、10+1と 1を加算して 11を入力。
偽ならば、10のまま入力します。


よろしくお願いします。

コメント(18)

空いている行を作業列として使用できるのかどうかわかりませんが
I列を作業列に使ったとして、I3に
=COUNT(J$3:J3) として下方向にフィル。
使用できる数値に連番をつけます。

次にD列ですが、上の範囲に、最低3つの数値が必要なので
3,7,11行には数値が入っていたとして、D15に
=10+IF(AND(VLOOKUP(I15-1+ISBLANK(J15),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-2+ISBLANK(J15),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-3+ISBLANK(J15),$I$3:$J$35,2,FALSE)<0),1,0)
として下方向にフィル

で出来ないでしょうか?
ただし、I列も、D列もフィルしたときに 3,7,11…行目の間の
行にも式の結果が出てしまうことは回避していませんので、必要あらば
その処理を加えてください。
takecさん、ありがとうございます。

連番をつけるアイデアは さすがですね。




2つ質問させてください。

1、VLOOKUP
D15ですが、 
VLOOKUP(I15-1+ISBLANK(J15)
を解説おねがいします。
関数の引数の窓を開けてみると、
検索値の I15-1+ISBLANK(J15) が 3となっていました。
I15-1 の連番4から1を引いて、現在地より上の連番を VLOOKUP 検索なのでしょうが、
ISBLANKは TRUE FALSEではなく、 1 0 を返すのでしょうか?

2、
ISBLANK と空白の TRUE FALSE
これは私の質問文が不十分だったのですが、
空白のセルにも 文字は入っているのです。
たとえば、 =IF(条件式、””、”数字”)のような真 で””ゆえに空白セル
というものです。
ISBLANKは セルに =""と書いても 空白とみなされずに FALSEになるようです。
このような 見かけは空白というものを判定する関数はあるのでしょうか?

なお、今回のJ列に入っているものは 数字と 上記のような見かけ空白のセルだけです。
日付・文字は 入っていません。

よろしくおねがいします。
マリ男さん、ありがとうございます。

>takecさん、すごいですね
同感です。
難しいことをやさしく書くというのは、高い技術を必要としますよね。

>NOT(ISNUMBER(J15))
なるほど。
NOTですね。

マリ男さんにも同じ質問ですみませんが、
NOT(ISNUMBER(J15))
も、結果は TRUE FALSE ですよね。
これを 
>1
のVLOOKUPの検索値として
VLOOKUP(I15-1+NOT(ISNUMBER(J15)),$I$3:$J$35,2,FALSE) とかいて、
NOT(ISNUMBER(J15)) の部分の結果は TRUE/FALSE で 正常に動くのでしょうか?
いまいろいろ試していますが、、、

なぜかうまくいきます。
理由はわからないのですが。。。




あっ。
空白のセルがあると
>1
> =COUNT(J$3:J3)
が 連番が自動的に変わるのですね。
でも、
NOT(ISNUMBER(J15))
は 、、、
よくわかりません。

取り急ぎ、お礼のみ書かせていただきました。
ありがとうございます。
(質問文の条件追加)
 
質問文をわかりやすくするために、
データを 3行・7行・11行・15行・のみをデータとして書きましたが、
データ自体はその間のJ列にも 数字 or見かけ上の空白セル が入っています。
操作自体は 行番号を4で割ると 3余る行の数字のみを対象とする ということに変わりはないです。

そうすると、
>1
>=COUNT(J$3:J3) として下方向にフィル
の連番式の数字が変わるのですよね。

連番式を今工夫していますが、、、
たとえば、
=IF(NOT(ISNUMBER(J31)),QUOTIENT(ROW(),4),"")
など。。。
でも、うまく連番式の改良がいきません。

私の説明不足ですみませんが、
よろしくお願いします。
取り急ぎ、TRUE、FALSEについて
ワークシート上、Trueの値は1、Falseの値は0です。
(VBAではTrueは-1ですが)
なので、数値としての演算ができるのです。
takecさん、ありがとうございます。

>Trueの値は1、Falseの値は0です。
>(VBAではTrueは-1ですが)
>数値としての演算ができる

なるほど。
ありがとうございます。
>2
1.
True, Falseの値の説明より
VLOOKUP(I15-1+ISBLANK(J15)
の意味はお分かりいただけましたでしょうか?
セルD15ではその行より上のJ列の3つの数値を
判定したいので、追加した作業列の値を検索値として
VLOOKUPで取得します。
その行の連番から -1、-2、-3とさかのぼった連番を検索
したいのですが、その行のJ列が「空白」の時は
連番をさかのぼらなくてもよいので、空白の場合は+1
することで補正しています。その補正部分がISBLANKの返す
値だったのですが…↓

2.の内容にもなりますが
>なお、今回のJ列に入っているものは 数字と 
>上記のような見かけ空白のセルだけです。
>日付・文字は 入っていません。
つまり、J列には数値か "" のいずれかが必ず入っている
ということでよいのですね。数「字」というのは数「値」で
よいのですね。
そうであれば、マリ男さんの NOT(ISNUMBER(J15)) か
ISBLANK(J15)の代わりに (J15="") とすることも可能かと。
式全体で書くとD15に
=10+IF(AND(VLOOKUP(I15-1+(J15=""),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-2+(J15=""),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-3+(J15=""),$I$3:$J$35,2,FALSE)<0),1,0)
として、下方向にフィル。

---

>でも、うまく連番式の改良がいきません。
3,7,11…行の間の行にも数値が存在しうるということですか?
そのような場合にも対応する連番の式は、I3に
=SUMPRODUCT((MOD(ROW($J$3:J3)+1,4)=0)*ISNUMBER($J$3:J3)*1)
として下方向にフィル。こんな感じでどうでしょう?
>行番号を4で割ると 3余る行
そうですね、I3の式訂正します
=SUMPRODUCT((MOD(ROW($J$3:J3),4)=3)*ISNUMBER($J$3:J3)*1)
として下方向にフィル。
takecさん、ありがとうございます。

>数「字」というのは数「値」
わたしは、勉強不足のために、数字と数値の違いがよくわからないのですが、
J列に もともと入っている式は
=IF(ISBLANK(BH6),"",BJ6*10000)
というものです。
よって、J列には
””という 見かけ上の空白か、
 −2000や0や50 という結果が入ります。
後者の場合、これを数値というか、数字というか、
EXCELの処理上、数値と数字が同違うかは 私にはよくわかりませんが。


連番式
教わった
> 9
> =SUMPRODUCT((MOD(ROW($J$3:J3),4)=3)*ISNUMBER($J$3:J3)*1)

処理式
>8
> =10+IF(AND(VLOOKUP(I15-1+(J15=""),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-2+(J15=""),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-3+(J15=""),$I$3:$J$35,2,FALSE)<0),1,0)

求めていた答えがでました。
ありがとうございました。


>VLOOKUP(I15-1+ISBLANK(J15)
の解説ありがとうございます。
よくわかりました。
お礼申し上げます。
マリ男さん、ありがとうございました。
おそわったNOT(ISNUMBER(J15))を式に代入したら
> =10+IF(AND(VLOOKUP(I15-1+NOT(ISNUMBER(J15)),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-2+NOT(ISNUMBER(J15)),$I$3:$J$35,2,FALSE)<0,VLOOKUP(I15-3+NOT(ISNUMBER(J15)),$I$3:$J$35,2,FALSE)<0),1,0)
こうなり、
求めていた答えが出ました。

数字をいろいろと試していますが、
今回は空白が1つでしたが、
2つ空白がある場合には
VLOOKUP(I15-1+NOT(ISNUMBER(J15))+NOT(ISNUMBER(J11)),
と、
検索値のNOTの項を2つに増やせばいいのですね。
NOTの項の意味がだんだんわかってきました。

勉強になりました。
お礼申し上げます。
>数字と数値の違いがよくわからないのですが、

>2で
>=IF(条件式、””、”数字”)のような
と、”数字” と書かれています。
見やすいようにダブルクォーテーションで括ったとは
思いますが、たとえば"1234"は数字で書いた文字列です。
>=IF(ISBLANK(BH6),"",BJ6*10000)
のBJ6*10000はBJ6が数字か数値なら数値になります。

COUNTを使った場合"1234"は文字列なので、カウントされません。
ISNUMBERの判定ではFALSEになります。

------------

>11 NOTの項の意味

>8で
>そうであれば、マリ男さんの NOT(ISNUMBER(J15)) か
>ISBLANK(J15)の代わりに (J15="") とすることも可能かと。
と書かせていただきました。
NOT(ISNUMBER(J15))と(J15="")は今回の状況では同意といえます。
NOTはTrue,Falseの反転です。

J15が""という条件で
(J15="") はJ15が""である→True=1
NOT(ISNUMBER(J15)) はNOT(J15が数値である)→NOT(FALSE)→TRUE=1

なので、
>検索値のNOTの項を2つに増やせばいいのですね。
これは必要でしょうか?
takecさん、ありがとうございます。

>数「字」は文字列
>"1234"は数字で書いた文字列
なるほど。
勉強になりました。
関数の判定に大きな影響があるのですね。

>>>検索値のNOTの項を2つに増やせばいいのですね。
>これは必要でしょうか?
私がした質問に対しては NOT項は1つでいいのですが、
本来の目的には空白が1つだけでなく、2つや、3つの空白の時があるんです。
空白が連続して2つあるときにはNOT項が2つ必要なのでは、、、と、
同様に3連続空白のときにはNOT項が3つ、、、と、
そこで、式をいろいろ書いてみたわけです。

わかりにくいことを書いてしまい失礼しました。

色々教わったおかげで、無事解決できました。

お礼申し上げます。

別の解法…

I列を作業列とすれば、

I3=0

I7=IF(L7="","",IF(J3="",I3,RIGHT(I3,2)*10+(J3<0)))
下にオートフィル

D3=IF(L3="","",10+(I3=111))
下にオートフィル
たつや.comさん、ありがとうございます。

別解までおしえていただき、恐縮です。

お礼申し上げます。
たつや.comさんへ

>14
の別解ですが、すごいですね。
3連敗を まるで2進数であるかのような 111 と表記したり、
空白セルがいくつ続いても大丈夫な式であったり、
しかも使っている関数はものすごくシンプルでEXCELへの負荷も少ないので助かりました。

この別解は 数学でいう エレガントな解法ですね。

重ねて、お礼申し上げます。
シンプルですが、残ながら簡単に思いついた訳では無いです。
先に完璧な解法を見てしまったら、その方法を応用する方法
しか思いつかなくて、かなり悩みました。
マイナスとプラスを何かの1文字に置き換え、繋げて判定すれば、
良いのでは?とふとひらめきました。
この問題も、悪い頭の良い体操になりました。

3連敗という意味ですか。

書き込んでから、
777
と7が揃った方が面白かったかな?
と思いました。
>777
おもしろいですね(笑

ありがとうございました(喜

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。