重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

もし〜ならの関数を作るのですが
含むの「*」のワイルドカードをつかって、
尚且つ複数条件の分岐で関数を組むことは出来るのでしょうか?
出来るのであればその関数を教えて欲しいです。

例えば
=IF(COUNTIF(P1,"有り"),IF(COUNTIF(N1,"*月*"),EOMONTH(SUBSTITUTE(N1,".","年")&"1日",0),EOMONTH(N1,0)),IF(COUNTIF(N1,""),"",EOMONTH(N1,0)))

これだとエラーになる部分があり、どうすればいいかわかりますか?

P列が有りと書いている時とN列が○月と書いてあるときはN列のものをその月の末日の日付を出す(例えば7月と書いてたら7/31としたいです)、
あとはN列が空欄であれば空欄にする、それ以外は○/○(例えば6/25)の形式なのでそれはその月の末日の日付を出す(6/30)としたいのです。

他のやり方の関数でもいいのでわかれば教えていただきたいです。

ちなみにスプレットシートで行全てに反映したいのですが、
ARRAYFORMULAだとCOUNTIFがあると反映しないと調べたらでてきたのですが、
もし他のやり方でもあれば教えてほしいです。

質問者からの補足コメント

  • 日付データが〇/〇の形式(例えば5/25)と〇月(例えば7月)と〇〇〇〇.〇月(例えば2022.4月)の形があるのでそれを全てその月の末日に直す関数を作りたいということです。 列を分けて作るとできたのですが 他で聞くと1つの関数にできそうとの事ですが、記載した関数だと〇月の形式が反映しないのです。

      補足日時:2021/05/17 14:35

A 回答 (3件)

No1です。



>日付データが〇/〇の形式(例えば5/25)と〇月(例えば7月)と
>〇〇〇〇.〇月(例えば2022.4月)の形があるので~~
上記に限定してよければ、単純に、
 /(^\d{1,2}\/)|(\d{1,2}月$)/
で検索すれば、「5/」、「7月」、「4月」がヒットするので、最後の1文字を取り除けば月の数値になると思います。
(スプレッドシートの正規表現は先読みなどが使えないみたいなので、共通に1文字を後ろに残す形にしました)
https://support.google.com/docs/answer/3098244
厳密にやるなら、数字の最初は0、1、2のどれかに限定しておく方がよいかも。

両方に合致するような「10/12月」が入力値の場合は、(多分)「10/」がヒットするであろうと想像しますけれど、未検証なのでご確認ください。
(一応、あり得ない入力値なので考慮する必要はないのでしょうけれど…)

>他のやり方でもいいです
…とあったので、他の方法を回答してみたのですが、どうやら耳を貸す気はなさそうですね。
一応は、追加回答しておきますが、これ以上のフォローはしませんので。


No2様が既にご指摘なさっていますが、この後でも、同じ(曖昧な)内容の質問を繰り返しているようですが、お行儀が悪いとしか思えませんね。
https://oshiete.goo.ne.jp/qa/12364656.html
https://oshiete.goo.ne.jp/qa/12364691.html
    • good
    • 0

>=IF(COUNTIF(P1,"有り"),IF(COUNTIF(N1,"*月*"),EOMONTH(SUBSTI


>TUTE(N1,".","年")&"1日",0),EOMONTH(N1,0)),IF(COUNTIF(N1,""),"",E
>OMONTH(N1,0)))
>記載した関数だと〇月の形式が反映しないのです。

まず、P列に「有り」となっているのはどのようなときなのでしょうか?
ご質問者の数式ではP列に「有り」となっているとN列の値に拘らず、月末日を計算しようとします。もしN列の値に異常値があったらどうするのでしょう?
それともP列に「有り」と入力されいる場合はN列に想定している値が入力されていることをチェック済みという意味でしょうか?
チェック済みという意味なら、数式を

=IF(COUNTIF(P1,"有り")*(N1<>""),IF(ISNUMBER(N1),EOMONTH(N1,0),IF(COUNTIF(N1,"*.*"),EOMONTH(SUBSTITUTE(N1,".","年"),0),EOMONTH("2021年"&N1,0))),"")

に修正すれば、よいのではないかと思います。

余談
https://oshiete.goo.ne.jp/qa/12358894.html
https://oshiete.goo.ne.jp/qa/12358897.html
で本件関連のご質問をしておられるようです。
不明な点をご質問されるのはかまわないのですが、複数の質問を同時にされて、すべて解決するまで過去の質問を放置状態にするのは、マナーとして感心できません。
過去の回答者の回答を参考にして本件数式を組み立てられているようにみうけられますので、一件づつクローズするようにされたらいかがでしょうか?
    • good
    • 0

こんにちは



ご説明をよく理解できていませんが、まず、条件を整理してみた方がよさそうに感じられます。
なんとなく、「N1が日付ならその月末を求め、それ以外は空白」でよさそうに思えますけれど?
P列の値は(多分)関係なさそうに思われます。


>ちなみにスプレットシートで行全てに反映したいのですが
スプレッドシートとエクセルは完全互換ではないですし、スプレッドシートはよく知りませんけれど・・・
ですので、以下は、未検証ですが。

N1セルの値が取り得る範囲は、「hoge」のような完全な文字列もあり得るのでしょうか?
Date型か空白に限定できるのなら、ISDATE関数でチェックすればそれで済みそうに思われます。

あるいは「hoge」や「今年の6月から」みたいな文字列から、(後者の)「6月」を抜き出して月末を求めたいというようなケースも含まれるのでしょうか?
こちらの場合は、エクセルではかなり面倒ですが、スプレッドシートなら正規表現(=REGEXMATCH関数)が使えるようですので、/\d{1,2}月/などで簡単にマッチさせられるのではないかと思われます。

以上から、こちらの場合でも、
「N1に月の値が存在すれば月末を、それ以外は空白を」返す関数でよさそうに思われます。
月末に関しては、ご提示の通りEOMONTHで求められるので、省略します。
    • good
    • 0

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