• ベストアンサー

エクセルでアルファベット混在の日付とtoday関数

日付起算の表記で月がA~Lまでに割り付けてある表記で、例えば2022年1月なら22A????と表記してある文字列を2022年2月と比較したいのでが。 目的はセルの書式設定で、B2のセルの値が、today()関数との比較で今日の月と22A???が違っていたら赤太字等のアラートを出したいのです。 上記の場合なら入力作業を2022年1月以外の場合はB2のセルの 「22A???」が赤太字になるようにしたいのです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.5

=COUNTIF(B2,TEXT(TODAY(),"Y")&CHAR(MONTH(TODAY())+64)&"*")=0 の方が解りやすかったですかね。 CHARは文字コードを文字にする関数です。 文字コードは、A 65、B 66…なので、 CHAR(月+64)でアルファベットに変換できます。 D2: =TODAY() E2: =MONTH(D2)+64 F2: =TEXT(D2,"Y")&CHAR(E2)&"*" G2: =COUNTIF(B2,F2)=0 を入力してみてて下さい。 D2の日付をいじってみれば、動きが解ります。

akira0723
質問者

お礼

解説まで有難うございます。 解説が有った分、今回のご回答の方が分かる気がしてこちらを試してうまく行くことを確認しましたのでこちらを採用させてもらいます。 CHAR関数は理解できましたが、これ単独で使用するケースは無いと思うので当方には使いこなせそうにありませんが、非常に参考になりました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

もう回答は済んでいるのでしょうが、 条件付き書式の問題にして 例データ A1:A9 22Aaa 22Bbbaa 22CAaa 22Aaa 22Baa 22DAaa 22BAaa 22B9Aaa ーーー ホーム 条件付き書式 新しいルール 関数を利用する 関数を =AND(FIND("22B",A2)<>0,FIND("22B",A2)=1) フォントの書式を赤字に設定する 式の意味は、22Bが先頭にある場合、ということです。 結果 22Bbbaa 22Baa 22BAaa 22B9Aaa が赤字になります。 === 上記では、Today()とは関連付けで来てませんが、 人間が、例えば、2022年2月なら、22Bだと翻案して、上記式を設定すればよい。 TODAYから「22B」を割り出す関数も可能だと思うが略。 ーーーー 初め質問文を読んで置く意味が取れなかったが、核心は上記の問題ではないか?

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.3

現在、2022年 2月なので 22B??? 以外なら、赤太字にすればいいのですね。 B2を選択 条件付き書式、新しいルール、 数式を使用して、書式設定するセルを決定 =1-COUNTIF(B2,TEXT(TODAY(),"Y")&CHAR(MONTH(TODAY())+64)&"*") 書式。フォント、赤、太字、OK。OK。

akira0723
質問者

お礼

すみません。 式をコピペしたときに「1-」が抜けていました。 バッチリでした。

akira0723
質問者

補足

早々のご回答ありがとうございます。 当方には式を見ても、どうしてアルファベットがtoday()の月の1~12に置換されているのか理解できないのですが早速試してみました。 結果はどうも当月のみ赤太字になるのですが。 書式設定で「=」ではなく「<>」にする記述すらわかりません。 また、これは3月になれば「22C???」で判定されるのですよね? 式の意味が不明なので来月にならないと当方には確認できないので念のためい確認させてください。 お手数をおかけしますが何卒宜しくお願いします。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

今日を含む月かどうかを判断し、 含む場合は〇、含まない場合は×を返す関数(後記)を用意し、 C列に配置する。 更に、 セルの文字を赤くするかどうかは、条件付き書式で判断する というアイディアはいかがでしょうか。 以下、標準モジュールに配置するコードです。 Option Explicit Function isMonthHit(YMMoji As String) As String  Dim y As Integer  Dim m As Integer  Dim wkM As String    y = Val(Left(YMMoji, 2)) + 2000  wkM = Mid(YMMoji, 3, 1)    If wkM = "A" Then   m = 1  ElseIf wkM = "B" Then   m = 2  ElseIf wkM = "C" Then   m = 3  ElseIf wkM = "D" Then   m = 4  ElseIf wkM = "E" Then   m = 5  ElseIf wkM = "F" Then   m = 6  ElseIf wkM = "G" Then   m = 7  ElseIf wkM = "H" Then   m = 8  ElseIf wkM = "I" Then   m = 9  ElseIf wkM = "J" Then   m = 10  ElseIf wkM = "K" Then   m = 11  ElseIf wkM = "L" Then   m = 12  End If  If ((Year(Date) = y) And (Month(Date) = m)) Then   isMonthHit = "〇"  Else   isMonthHit = "×"  End If   End Function

akira0723
質問者

お礼

Hohopapa-さん 早々のご回答ありがとうございます。 今回は判定用の列を作るとするとVBAの関係でかなり離れた列にする必要があるので極力当該列(ロットNo)に仕掛けするのが良いので申し訳ありませんが#03さんのご回答を採用させていただきます。 ご回答ありがとうございました。

noname#252888
noname#252888
回答No.1

出来ないから回答が付かないのではなくて 何を言っているのか分からないから回答がつかないのだと思います。 始めの1文から疑問を挙げると 「日付起算」⇒ググってみてください。こんな言葉出てきませんから。起算日の事を言っていますか? 「月がA~Lまでに割り付けてある表記」⇒A1~L1セルに月数が書いてあるのですか?それとも見做しているだけで書いてはいないですか? 「例えば2022年1月なら22A????と表記してある文字列」⇒”22A????”これは値ですか?実際に"?"と書いてあるのですか?この文字列はどこのセルに出るのですか?文面上、出てくるセルがB2しかないのですが、そこが全てですか?全然イメージが付かないです。 などなど状況が全然把握できないです。 めんどうだったら画像を張り付けてくれれば伝わりやすいと思います。

akira0723
質問者

お礼

質問が分かりにくくて済みませんでした。