[[20090601214333]] 『条件付書式』(MIN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付書式』(MIN)

 お世話になります。下記の件 お願い致します。

 縦に長いレイアウトになるので、文章だけの説明とさせて頂きます。

 [A1セル] 2009/5/1と入力して、
 A2:=IF(A1="","",IF(MONTH(A1)=MONTH(A1+1),A1+1,""))を入力し
 A31セルまで フィルダウン。(★↑)ここの式をTEXT関数でやったら・・・。
 (上記数式:他サイトで ご馳走になった数式なのです。)

 条件付書式
 1:=WEEKDAY(A1,2)=6     (土曜日 青のフォント)
 2:=WEEKDAY(A1,2)=7     (日曜日 赤のフォント)
 3:=MATCH(A1,祝日,0)>0 (祝日  緑のフォント)

 ◆B2:B5(名前定義:祝日)で、設定しております。
 5月1日 5月4日 5月5日 5月6日の日付です。

 上記 ★印の箇所を「TEXT関数」を使用したらば どのような数式に
 なりますでしょうか?

 宜しくお願い致します。Excel2003 WindowsXP  (MIN)


 ご質問の意図が不明瞭なのですが、

 こんなことですか? (なーんか、これは分かり切っている様な気がしますね)
  ↓
  A2セル =IF(A1="","",IF(TEXT(A1,"m")=TEXT(A1+1,"m"),A1+1,""))

  もう少しご説明いただいた方がいいと思います。

 (半平太) 2009/06/01 23:54

 ★印の箇所 = MONTH(A1+1)のみ
 かもしれない。。。?
=IF(A1="","",IF(MONTH(A1)=TEXT(A1+1,"m")*1,A1+1,""))

 TEXT関数を使いたい意味が分かりませんが。

 何故「ここの式をTEXT関数で」
 やりたいと思ったのか、書いておかれるのが良いかもしれません。

 もしかして、IF関数の論理式の部分が
 数式=数式 になっていて、よくわからないから?

 (HANA)

 >半平太さん

 >A2セル =IF(A1="","",IF(TEXT(A1,"m")=TEXT(A1+1,"m"),A1+1,""))

 検証させて頂きました。ありがとうございます。

 >もう少しご説明いただいた方がいいと思います。

 私は エクセルの勉強を始めて約半年の者です。しかも、数式パレット
 入力しか出来ません。
 ◆A2の式を設定した際に [39935]という数値が入り(シリアル値?)
 これを 表示形式の設定 表示形式>日付>3月14日に設定後、フィルダウン
 しているのですが。TEXT関数を使用すれば、このセルの書式設定を
 省けるのかな?という甘い考えなのです。(MIN)


 HANAさん

 先日 色々と長期に渡り ありがとうございました。

 >TEXT関数を使いたい意味が分かりませんが

 すみません!上記に記載致しました。

 >もしかして、IF関数の論理式の部分が
 > 数式=数式 になっていて、よくわからないから?

 先日 あれだけ個人授業を受けたのですが・・・。
 まだ、完全では ございません。

 数式をフィルダウンした際に 仮に 32行以降
 月が変わる 変わるから逆に そこを削除するという考えでは
 HANAさんのご提案の数式が良いとも感じました。↓

 >=IF(A1="","",IF(MONTH(A1)=TEXT(A1+1,"m")*1,A1+1,""))

 余談:先日の件でピボットテーブルの基本をあれから
 少しづづ勉強を始めてます。(これは 報告のみです。)
 (MIN)


 >月が変わる 変わるから逆に そこを削除するという考えでは
 >HANAさんのご提案の数式が良いとも感じました。
 いや、良くないです。(笑)

 一番素直なのは、最初に載せて居られる式とか
 半平太さんが載せて居られる式だと思いますよ。

 >まだ、完全では ございません。
 どこが分解出来るのか分かるまでは難しいかもしれませんね。

 この式の仕組みは分かりますか?
 IF(MONTH(A1)=MONTH(A1+1),A1+1,"")
 最初のこの式も
 「月が変わる 変わるから逆に そこを削除するという考え」
 ですね。

 A1セルにシリアル値が入っている、それから月部分を取り出す MONTH(A1)・・・・(イ)
 今回のセルには、A1セルの次の日付を表示させる予定。
  だけどもしも次の月の場合は、表示させたくない。
  だから、次の日付の月が何月かを確認してみる MONTH(A1+1)・・・・・・・・・(ロ)
 (イ)と(ロ)が同じだったら、同じ月なのでその日付を表示 A1+1
         違っていたら、違う月なので、表示しない ""

 さて、この判定でTEXT関数を使用することを考えると
 A1セルの月は TEXT(A1,"m")  その一日後の日付の月は TEXT(A1+1,"m")
 判定して同じだった時に返される日付は 【A1+1】

 これって、A1セルに入っているシリアル値の次の値 って事です。
 A1セルに 2009/5/1 の日付が入っていたら、2009/5/2を表す[39935]という数値で
 セルの書式を設定しないと、この値[39935]がそのまま表示されることに変わり有りません。

 もしも、最終的に日付を表示させる所【A1+1】の部分で
 TEXT関数を使用して、日付として表示するなら
 セルの書式を設定する必要は有りません。
 しかし、後に問題になることが有ります。

 例えば、TEXT(A1+1,"m月d日")とした場合、確かに「5月2日」と表示されますが
 これは【文字列】です。

 実体が[39935]のシリアル値を表示形式で「5月2日」としている場合
 それは 2009年5月2日を表しますが
 「5月2日」と言う文字列には「○○年の」と言う隠れた情報は有りません。

 エクセルは、「足し算して」とお願いすると それっぽい物は
 それなりに計算して、答えを教えてくれます。

 例えば、A2セルに「A」と言う文字が入っているときに
 =A2+1 ←足し算して と言うと「#VALUE!(値じゃないから無理)」と答えますが
 A2セルに文字列で「5月2日」と言う文字が入っている時に
 =A2+1 ←足し算して と言うと
  A2セルって日付ね。分かった、次の日付にすれば良いんでしょ?
  えっと・・・何年の事か分からないから、取り敢えず今年の事ね。
  と考えて「2009年5月3日(39936)」
 と答えてくれます。

 年を挟まない場合は、おおよそ問題無いと思いますが
 年を挟むような時に「取り敢えず今年の事ね」ってされると困りますよね。
 「来年のことなのに〜!!」って言ってもエクセル君はそんなことは
 知ったことではありません。

 A1セルに入れた日付の年を継承して行きたいなら
 途中でTEXT関数を挟んで、その情報を欠落させないのが良いと思います。

  ・・・・まぁ、TEXT(A1+1,"yyyy年m月d日")とすると
  年情報も付いたまま文字列に出来ますが・・・・。

 その場合でも、「シリアル値でない」と言う事は不都合が有ります。

 簡単な所では
 日付がシリアル値で入っていれば、「曜日を表示させたい」
 と思った時に、表示形式を「aaa」等に変更するだけです。
 文字列に成っていたら、そうは行きません。

 シリアル値を文字列にすることが、常に悪い訳では有りません。
 それが必要な事も有ると思います。
 ですから「その後どうしたいのか」等を考えながら
 式を作成していく必要が有ると思います。

 今回の場合、同じ年のカレンダーしか作らないなら
 日付を返す部分を「TEXT(A1+1,"m月d日")」にすれば良いでしょう。 
 A3セルでは TEXT(A2+1,"m月d日") に成りますね。
 これは A2セルの文字列を一度シリアル値に変更して、再度文字列になおして居る
 事になります。
 なんだか手間な事に成っている気がします。

 (HANA)

 半平太さん

 お返事ありがとうございました。
 と共に 不愉快にとられてしまったら・・・ 本当に申し訳ございません!!!

 私は、勉強をスタートしたばかりの理解不足な人間です。^^

  HANAさんのご提案の数式が良いとも感じました。↓

 という表現をどうか お許しください。全くの悪気は ございません。。。
 私がこの学校へ入学したての頃にレスも頂いて感謝もしております。
 寝起きの頭がボケテ(いつもですが^^)の書き込みとご理解して
 いただけますでしょうか。。。本当に ごめんなさい!!(MIN)

 HANAさん

 今 昼休み中 なので 帰宅後に確認をとります。
 毎度 ご丁寧に 申し訳ございません。(MIN)


 HANAさん

 私の低レベルに合わせた解説にまずは 感謝です。

 >どこが分解出来るのか分かるまでは難しいかもしれませんね。

 残念な事に未知との遭遇な状況なんです。

 >この式の仕組みは分かりますか?

 たぶん・・・ こうなんだろうな〜?という疑問符付きの解釈なんです。

 >(イ)と(ロ)の解説

 たぶん・・・ こうなんだろうな〜?という疑問符付きの解釈なんです。

 >さて、この判定でTEXT関数を使用することを考えると・・・
 > 判定して同じだった時に返される日付は 【A1+1】
 >これって、A1セルに入っているシリアル値の次の値 って事です。

 あいかわらず 過去形ですが、理解出来ます。

 >セルの書式を設定しないと、この値[39935]がそのまま表示されることに変わり有りません。

 そうですね!ここを一番期待した箇所だったのですが・・・。

 >後に問題になることが有ります。・・・ これは【文字列】です。
 >「5月2日」と言う文字列には「○○年の」と言う隠れた情報は有りません。

 たぶん・・・ という想像? だけはしてました。

 ◆色々なサイトで拝見をしてたら TEXT関数の例があったので興味が出て質問
 をした流れがあるのです。

 >A2セルって日付ね。分かった、次の日付にすれば良いんでしょ?
 >何年の事か分からないから、取り敢えず今年の事ね。 

 解説付きで 非常に理解出来ます。

 >年を挟むような時に「取り敢えず今年の事ね」ってされると困りますよね。

 これについても 年を越した場合のお話が出るかな〜という想像で・・・。
 私の質問の内容に不備がありました。とりあえずは、年を越すことは考慮
 しなくても 良かったのですが・・・。まぁ〜 今後は どうなるかは ?のところです。

 >TEXT(A1+1,"yyyy年m月d日")とすると 年情報も付いたまま文字列に出来ますが・・・・。

 了解致しました。

 >その場合でも、「シリアル値でない」と言う事は不都合が有ります。
 >「その後どうしたいのか」等を考えながら 式を作成していく必要が有ると思います。

 ご説明を受けると なるほど と思うのですが・・・ 今の私は、先見力?がないんです。

 >今回の場合、同じ年のカレンダーしか作らないなら

 ↑の予定です。方針が急遽変わらない限り・・・ 。

 >日付を返す部分を「TEXT(A1+1,"m月d日")」にすれば良いでしょう。
 >A3セルでは TEXT(A2+1,"m月d日") に成りますね。
 >A2セルの文字列を一度シリアル値に変更して、再度文字列になおして居る
 事になります。
 >なんだか手間な事に成っている気がします。

 色々なご説明を受けて 「・・・」の数式でいこうとある程度 見極めが付きました。
 どの式なの? そして その根拠は ? それから 先の事も考慮して ?と追跡 ?
 されると 確信は ないのですが・・・ ザックリ案としてです。

 私が質問すると 非常に レベルを合わせて勉強になります。
 ○学生の○学年を持つ親の指導レベルですね。いつも 本当にすみません。

 言い訳:エクセルの他の勉強(基本レベル?)も 合わせてやっていると
 私の場合:一回で 「OK!」とは いきません。。。
 今回も色々勉強になりました。ありがとうございます。
 でも、また 来た時は お時間が空いていたら 宜しくお願い致します。(MIN)


 一つ言える事は
「どうしても有ってはいけない」
 と言う状況に成らない限り、なるべく多くの情報を
 引き連れて動いて於いた方が良いと思います。

 情報を減らすのは簡単です。
 しかし、前の段階で削った情報が
 矢っ張り今回必要だったから、再度付けたい
 と言うのは、結構手間です。
 (前の段階からのやり直しに成ることも有ると思います。)

 >私の質問の内容に不備がありました。とりあえずは、年を越すことは考慮
 >しなくても 良かったのですが・・・。
 でも、【わざわざ】そうする必要は無いと 思いますので
 その情報をもらっていても 戻り値にTEXT関数を噛ませる方法は
 お薦めしません。

 そうしなければ成らない(セルの書式設定では対応出来ない様な)
 問題があるなら別ですけどね。

 >そうですね!ここを一番期待した箇所だったのですが・・・。
 そうですね、最初から
 >TEXT関数を使用すれば、このセルの書式設定を省けるのかな?
 と思った事を、書いておいて頂ければ良かったですね。
  
  
 最初は
 >たぶん・・・ こうなんだろうな〜?という疑問符付きの解釈なんです。
 これだと思いますよ。
 この積み重ねが「うん。こうなんだよ!!」に変わっていくんだと思います。

 焦らなくても、実際に色々やっていけば 身に染みて
 分かる様になるんじゃないかと思います。

 刃物を使っている子供に「危ないよ、気を付けてね、切ると痛いよ」
 って何度も言うよりも、実際に怪我をした方が
 気を付けるようになるでしょ?(笑)

 「この道具はね、こうやって使うんだよ」って何度も言うよりも
 実際に使ってみるほうが 分かると思いますので。

 (HANA)

 >=IF(A1="","",IF(MONTH(A1)=MONTH(A1+1),A1+1,""))
 =TEXT()では、ありませんが、=MONTH()の代わりに=DAY()を使って、

 =IF(DAY(N(A1)+1)>1,A1+1,"") のようにするのもありますね。 (JOKEUP)

 HANAさん

 おはようございます!(重ねてのお返事に感謝です。)

 >なるべく多くの情報を ・・・ 前の段階からのやり直しに成ることも有ると思います。

 仰る通りですね。(質問をするのも 一つの勉強?、理解するのは もっと 大)
 なのですが ここは これから 注意しながら ご質問をさせて頂きます。

 >その情報をもらっていても 戻り値にTEXT関数を噛ませる方法は
 お薦めしません。

 ・・・ だんだん 徐々に確信に 「か・わ・り・つ・つ」になりました。(過去形)

 >思った事を、書いておいて頂ければ良かったですね。

 重複してしまうのですが 質問者として「最低!」と思いました。(反省)

 >この積み重ねが「うん。こうなんだよ!!」に変わっていくんだと思います。

 積み重ねに 【負けそう!】にいつも なってます。(^_^

 マイPC にも いつも 愚痴られている。(MIN)

 


 JOKEUPさん

 はじめまして・・・ お返事 ありがとうございます。

 >=IF(DAY(N(A1)+1)>1,A1+1,"") のようにするのもありますね。

 DAY ヘルプより 
 シリアル値に対する日を 【1から31】までの整数を返す。

 N ヘルプより
 値には 変化したい 値をしていします。

 と記載がありました。そして 回答の数式も検証してみました。
 出社前のため 詳細では ございませんが 本日帰宅後に
 詳細に確認してみます。お返事に感謝を致します。(MIN)

 JOKEUPさん

 超ビギナーですが、検証させていただきました。

 掲示しされた数式:4種類 (あくまでも ビギナーとして感じた事)

 >=IF(DAY(N(A1)+1)>1,A1+1,"") のようにするのもありますね。

 32行目から IFで分岐をしていないので、一目瞭然でフィルダウン
 し過ぎた 場合 目視で確認しやすいな〜と感じました。

 本当の数式の意味とは 大幅に異なるとおもいますが。

 N関数を故意に 省いて組んで見ましたら 「空白」でした。(2行目)
 3行目から #VALUE! が返り N関数のパワーを感じました。

 皆様がたのお陰で また 一つ勉強となりました。
 ありがとうございました! 本当に感謝致します。(MIN)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.