• ベストアンサー

EXCEL:特定の文字が入力された日付を表示する方法

D列に"完了"と入力されたらその日付をE列に自動で入力されるようにしたいと考えています。 現在、E2列に =IF(D2="完了",TODAY(),"") を入力して出来ると考えていたのですが、 そうすると日付が毎回変わってしまいます。 どのようにすれば可能でしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • argument
  • ベストアンサー率63% (21/33)
回答No.5

こんばんわ a04sa026 さん 締め切っていないということはまだ何か解決していないのでしょうか? 解決したなら閉めておいてくださいね。 hallo-2007さんが20分も後に全く同じ回答とするとは思いませんでしたがまぁそれはおいて置いて。 実は前回の処理には致命的バグがあります。きっともう少し使えば分かることですが、複数行の処理に対応していません。二行以上のドラッグ(オートフィル)や二行以上選択した状態での"完了"などのペーストもしくは削除のたびにエラーします(使い物になりません)。 暇だったので対応版を作っておきました。どうぞお使いください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If Cells(Target.Row, 4).Value = "完了" Then Status = Date Else Status = "" If TypeName(Target.Value) <> "Variant()" Then Cells(Target.Row, 5).Value = Status Else _ For i = 0 To UBound(Target.Value) - 1: Cells(Target.Row + i, 5).Value = Status: Next End If End Sub 最初の記述とはもう別物に成ってしまいましたがよりベストな処理になっています。 追加処理・処理違い・補足等あればいってください。

a04sa026
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 改良版まで教えていただいてありがとうございます。 まだまだ初心者で、argumentさんのソースを読むことが難しいですが、一歩ずつ勉強していきたいと思っておりますので今後ともよろしくお願いいたします。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

完了から・・・ではありませんが 完了なら日付、以外の場合は空白 です Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If Target.Value = "完了" Then Cells(Target.Row, 5).Value = Date Else Cells(Target.Row, 5).Value = "" End If End If End Sub

a04sa026
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 hallo-2007のおかげでタスク管理が速くなり、仕事の効率を上げることができました。 お二方ともに20ptとしたかったのですが、できないようでしたのでお許しください。 本当にありがとうございました。 今後ともよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • argument
  • ベストアンサー率63% (21/33)
回答No.3

こんばんわ a04sa026 さん 補足へ回答となります。 データを以下に書き換えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If Target.Value = "完了" Then Cells(Target.Row, 5).Value = Date Else Cells(Target.Row, 5).Value = "" End If End If End Sub どうでしょうか?貴方のお望みの結果になったはずです。 完了後日付が入り別な言葉にすれば削除されます。 今後のメンテナンスを考えるあなた自身がこの処理をもう少し理解しようとする必要があります。 この最初の宣言はワークブックの変更を監視します Private Sub Worksheet_Change(ByVal Target As Range) もしも変更位置(セル)がColumnが左から4(つまりD列)ならば処理する If Target.Column = 4 Then もしもその値が「完了」ならばColumn 5(つまりE列) にdate(つまり今の日付)をいれる If Target.Value = "完了" Then Cells(Target.Row, 5).Value = Date もしもそうでないならば現在の行のColumn 5(つまりE列) の値を削除する。(Target.Rowには変更されたセルの行が格納されている) Else Cells(Target.Row, 5).Value = "" End If End If End Sub という処理です。これはかなり初歩的な構文です。 きっと検索したほうが早かったかも知れません。

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

D列に 完了 と言う文字が入力されたら E列に 日付を入れる。 VBAの力を借りるしか方法はないと思います。 シートの名前のタブを右クリックして コードの表示をクリック VBエディターが起動しますので Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then If Target.Value = "完了" Then   Cells(Target.Row, 5).Value = Date End If End If End Sub をコピィして閉じる。試してみてください。

a04sa026
質問者

補足

ありがとうございます。 無事実行できました!! VBAすごいですね。 これから、勉強していきたいと思います。 あと一点お願いがあるのですが、完了から、違う言葉に変更されると日付が消去されることは可能でしょうか? お手数をおかけし申し訳ありませんがよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

関数では、常時またはいずれ再計算のようなことをするので、そのブックを開いた日がいつも出てくるという理屈で、質問者の二ーズにあわない。 もうひとつTODAY()関数が常時当日日付をシステムから採るということがある。 ーー だから質問者にはなじみが無いかもしれないが、エクセルVBAのD2セルの変更時を捉えて、(E列のセルに日付をセットする)処理を実行する イベントという仕組みを勉強してください。その中のイワークシートのChangeのベントです。 WEBで「Change イベント VBA」照会すれば、記事が沢山出る。 http://oshiete.nikkeibp.co.jp/qa2932094.html

a04sa026
質問者

お礼

ご指摘ありがとうございます。 imogasiのご指摘で勉強不足を痛感しました。 これから勉強をしていきたいと思います。 ありがとうございました。 今後ともよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ☆Excelエクセルで入力した日の日付を表示したいです☆

    こんばんは!エクセルで、なにかデータを入力した横のセルに、その日の日付が自動的に入るような方法があれば、是非教えてくださいm(__)m横の列に手動で日付を入力すればよいといえばよいのですが^^;その列には、また別の日に、追加でデータを入力していきたいですので、前の日の日付もその日の日付も残るようにしたいんです。today関数とかじゃ全部その日になってしまいますよね。。。もし、データを入力しただけで、そのようなことができる方法があれば、是非教えてください。よろしくお願いしますm(__)m

  • 日付を自動入力する方法

    入力フォームと言うシートの日付列A8からA22(A8からD8まで結合して、このパターンでA22まであります)まで日付を入れるようにしています。右隣の列E8からE22は商品名が入る列です。 今は、下記のVBAで日付のセルを選択して、日付が自動で入るボタンを押して、本日の日付を入力しています。K28には=today()の関数が入っています。 Sub 日付入力()  ActiveSheet.Unprotect  Range("K28").Copy  ActiveSheet.Paste  Application.CutCopyMode = False  ActiveSheet.Protect End Sub これを日付のマクロボタンを押す毎に、A8からA22まで順番に入力できるようにするにはどうすればよいでしょうか? 尚、入力フォームの作成・保存が終わるとA8からA22まですべて、セルの値を消去するマクロボタンを作っています。

  • あるセルにデータが入力された日を表示

    A列(A1)のセルにデータが入った場合、D列(D1)にそのセルに データが入力された日付を表示させたいのですが、どのように やったらいいでしょうか?TODAY関数を使うと毎回更新されて しまいます。 TEXT関数+TODAY関数で出来るかな?と思ったのですが、 =TODAY()を使うとセルに入力された日でなくて、ファイルを開いた 日付に毎回更新されてしまいます。 A列のセルにデータが入った時にD列にその入力日を表示させたい のです。こういう事は簡単に関数を使って出来ませんか?わかる方 がいれば教えてください。

  • excel2010 その日付により特定の文字を入力

    A列セルには、2022/01/01~2022/03/31期間を連番で記載しています。 B列セルには、土曜日、日曜日、月曜日と連番で曜日を記載しています。  E列セルには、祭日や会社の定休日を2022/01/01、2022/3/21などと記載しています。 F列セルには、祭日や会社の定休日を年末年始休、春分の日などと記載しています。 土日については、=IF(WEEKDAY(A2,2)>=6,"休日","")でC列セルに『休日 』の文字を入れる事が出来ました。 祭日や会社の定休日についても、C列セルに『休日』の文字を入れたいのでですが、出し方が分かりませんでした、ご教示頂けると大変助かります。 データは下記の通りです。  A    B      C    D   E      F    日付   曜日   仕事オフ日     休日    休日名  2022/1/1 土曜日  休日        2022/1/1  年末年始休

  • エクセルのカウントダウンでアラートを表示させる方法

    エクセルのA列に目標の日付,B列に経過(完了とか途中とか),C列に以下の関数を入れて、目標日までの日数をカウントダウンしています。 =IF(A3>TODAY(),"あと"&DATEDIF(TODAY(),A3,"D")&"日",IF(A3=TODAY(),"今日が期限",IF(A3<TODAY(),DATEDIF(A3,TODAY(),"D")&"日過ぎ"))) この式に追加で、B列が完了になっているものは「○日過ぎを表示しない」という設定をしたいのですが、どのような関数を入れたらいいのでしょうか? 教えてください!!!

  • マクロに詳しい方!エクセルの日付入力について

    エクセルの日付入力について、例えばB列に何か入力したら自動的にA列に入力した日がB列に表示されるようにする方法(TODAY関数のように常に現在の日付ではなく、入力した日のまま固定にする方法)について検索したところ、下記の通り、マクロをつかった回答がありました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413916824 B列に入力し、A列に日付を書き込む場合 B1→A1 B2→A2 B3→A3 … -------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub Application.EnableEvents = False Target.Offset(, -1).Value = Now Application.EnableEvents = True End Sub -------------------- 小生はマクロが分かりませんが、上記のコードをコピペ入力すると、その通りになりました。 そこで、みなさんにご相談ですが、これをA列に入力→B列に日付、C列に入力→D列に日付、E列に入力→F列に日付・・・・・というようにしたいのですが、そのコードを教えて頂けないでしょうか。 何卒お知恵をお借りしたくお願い致します。

  • エクセルの日付入力に関して。

    仕事で上司に、暇のあるときに「To Do リストのTo Do の欄に何か入力したら、自動的に隣のセルの日付がその日の日付にアップデートされるように改良してくれない?」と頼まれているのですが、IF系か日付系の関数でできますでしょうか?? たとえば、E5のセルに文字列を入力したら、F5に当日の日付が反映される・・・というような感じで・・・ まったく急ぎではないのですが、もしよろしければどなたかアドバイスお願いします。 よろしくおねがいします。

  • アクセスの日付入力について。

    アクセスのフォームで日付入力をカレンダーコントロールから入力しようと考えていますが、日付入力フィールドが8種類あります。例えば、A購入日、B修理日、C修理完了日、D保守開始日、E保守終日、、、 などです。これらに1つずつカレンダーコントロールを設けることしか考えがないのですが、他によい方法があると思いますが、教えてください。現在DとEはDateAddで算出し、1つのカレンダーでまかなっています。 例えば、1つのカレンダーを固定して、新規画面を開いたときはその日の日付が表示され、それから加減して入力することは可能でしょうか?よろしくお願いいたします。

  • EXCEL: 日付を残す関数

    どなたか教えてください。 伝票明細に度々同じような編集を加えるので、自動的に編集した日付を履歴として残すようにしたいのです。 ↓ 明細行の一番左側(A5)に、プルダウンリスト(入力規則)から「入庫」または「出庫」を選ぶと、自動的にとなりのセルにその日の日付が入力されるようにする。 私が考えたのは、次のとおり。 (B5)にひとまずToday関数を入れる。→(C5)に次の関数を入れる。 C5=IF(OR(A5="入庫",A5="出庫"),B5,"") けど、これじゃ値ではなく数式をもってきちゃうので、別な日に開くと日付が更新されてしまうのです。 どうすればよいですか?よろしくお願いします。

  • 文字の表示を変える関数、日付入力の関数

    タイトルの件、質問いたします。 下記の画像をご覧ください。 【やりたい事1】 データ先ファイルのB列に、番号を打ち、C列、D列にデータを表示させた時の 日付を、A列に自動で入るようにしたい。 例:B2に、01と入力した日付を、A2に自動で入るようにしたい 【やりたい事2】 D列に表示させている、100、200を 100の場合は⇒あいうえお 200の場合は⇒かきくけこ とデータ先ブックのD列に表示させたい 【その他】 B列とC列には、下記の関数が入っています。 【B列】 =VLOOKUP($B2,[データ元.xls]Sheet1!$A$2:$C$4,2,FALSE) 【C列】 =VLOOKUP($B2,[データ元.xls]Sheet1!$A$2:$C$4,3,FALSE) 以上、ご存知の方は、宜しくお願いします。 【エクセルバージョン:2003】

専門家に質問してみよう