[[20210308192327]] 『日付けの入力』(yusuke) ページの最後に飛ぶ

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

 

『日付けの入力』(yusuke)

 お世話になります。
 C2に2021年、A6に3月としています。
 A7に 8 と入力するだけで、8 (月) となるように出来るでしょうか。
 よろしくお願いします

< 使用 Excel:Excel2003、使用 OS:Windows10 >


 >8 (月)
 これは「2021/3/8 月曜日」という意味?

 だとして、隣のB7に(月)と表示でいいのなら数式でできますけど
 それではダメなんですかね?

 以上、確認だけ
(笑) 2021/03/08(月) 20:00

衝突しましたがそのままアップします。

C2に2021年、A6に3月としています。

数値を入力して表示形式で「年」、「月」を表示しているのでしょうか?
それとも文字列で入六しているのでしょうか?

文字列で入力しているとの前提です。
別セル案です。

C2=2021年
A6=3月
A7=8

=DATEVALUE(C1&A6&A7&"日")

で表示形式を
d(aaa)

または
=TEXT(DATEVALUE(C1&A6&A7&"日"),"d(aaa)")
(OK) 2021/03/08(月) 20:04


 曜日は別セル(B列)でいいのなら・・・

	A	B	C
1			
2			2021年
3			
・			
6	3月		
7	8	(月)	

 >C2に2021年、A6に3月としています。 
「年」や「月」もセルに入力している場合

 B7 =IF(A7="","",($C$2&$A$6&A7&"日")*1)
 表示形式〜ユーザー定義 (aaa)

 または
 B7 =IF(A7="","",TEXT($C$2&$A$6&A7&"日","(aaa)"))
 表示形式「標準」

 ■ついでに・・・
 C2とA6の表示形式〜ユーザー定義を、それぞれ 0"年"、0"月" として
 数値だけ入力すれば

 B7 =IF(A7="","",DATE($C$2,$A$6,A7))
 表示形式〜ユーザー定義 (aaa)

 または
 B7 =IF(A7="","",TEXT(DATE($C$2,$A$6,A7),"(aaa)"))
 表示形式「標準」

 以上 
(笑) 2021/03/08(月) 20:24

マクロ(VBA)を扱えるのならば、その為のツールを作ってありますよ。
http://addinbox.sakura.ne.jp/Excel_Tips19.htm

1. 「曖昧日付入力」サブルーチンを、そのまま標準モジュールにコピペします。
2. 日付を入力するシートのシートモジュールに下記マクロをコピペします。

Private Sub Worksheet_Change(ByVal Target As Range)

'======【 日付欄入力のサポート 】==============

    If (Target.Cells.Count = 1) Then
        '単一セル
        If (Target.Address(False, False) = "A7") Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & Me.Range("A6").Value & "1日"))
        End If
    End If
End Sub

> C2に2021年、A6に3月としています
C2 は "2021年" , A6 は "3月" という文字列という前提です。
A7 セルは予め d(aaa) の書式設定をしておいてください。
日付書式がされていないと、入力しても空欄になります。

日付入力セルが範囲ならば、リンク先のように、Column / Row で範囲を
指定します。

(AddinBox 角田) 2021/03/08(月) 22:34


 質問の内容が不味かったようで申し訳ないです。

      A     B    C
1
2            2021年
3

6   3月  
7   8月  みかん   300
8   11木  タマゴ   20
9   13土  ビール   50

 のように、出来ればと思っています。 要は、A列に日だけをを打ち込めば
 8 月 11 木  13 土と表示させたいのです。 A列は100まで使う予定です。
 どうぞよろしくお願いします。
(yusuke) 2021/03/09(火) 13:35

 再掲です。

 >>C2に2021年、A6に3月としています。 

 >数値を入力して表示形式で「年」、「月」を表示しているのでしょうか? 
 >それとも文字列で入力しているのでしょうか? 
(OK) 2021/03/09(火) 13:41

 ありがとうございます。 

 C2 2021年 A6 3月 としています。
(yusuke) 2021/03/09(火) 13:56

 同じく再掲

 A列に日にちを入力したら、B列に曜日を表示ではダメなんですか?
 ダメなら理由を教えてもらえます?

 以上
(笑) 2021/03/09(火) 14:00

 すみません。質問にきちんと答えていただけないようですので
 私はここれ降ります。
(OK) 2021/03/09(火) 14:04

 ありがとうございます。
 列を挿入したらデータが無茶苦茶になりそうなんで。
(yusuke) 2021/03/09(火) 14:09

 作業セルを使用せずに入力したセルの内容を変える、ということですね。
 でしたら、方法は角田さんが既に回答済みです。
(通りすがり) 2021/03/09(火) 14:36

 通りすがりさん、ありがとうございます。
   If (Target.Cells.Count = 1) Then
        '単一セル
        If (Target.Address(False, False) = "A7") Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & Me.Range("A6").Value & "1日"))
        End If
    End If
End Sub

 コピペしてA7に数字(15)を打ち込むと、数式バーのところが 1900/3/15となるのですが。

 シート名は3月詳細ですが、変更しないとダメなんですか?
 よろしくお願いします。
(yusuke) 2021/03/09(火) 15:13

 C2がブランクではないですか?
 C2に「2021年」などと年が入力されてますか?
(通りすがり) 2021/03/09(火) 15:31

 はい、C2セルに2021年としてあります。
(yusuke) 2021/03/09(火) 15:52

> はい、C2セルに2021年としてあります。

わたしは
> C2 は "2021年" , A6 は "3月" という文字列という前提です

OK さんが、再三、問うてますが・・・
> 数値を入力して表示形式で「年」、「月」を表示しているのでしょうか?
> それとも文字列で入力しているのでしょうか?

その辺をハッキリさせましょう

(AddinBox 角田) 2021/03/09(火) 16:53


ありがとうごさいます。
とんちんかんの老人にお相手していただいで
すみませ
数値を入力して「年」、「月」を表示しています。
(yusuke) 2021/03/09(火) 17:13

> 数値を入力して「年」、「月」を表示しています。

それでは
> 2       2021年
> 3
> ・
> 6  3月

"年" "月" の付加表示は書式設定ですか、それとも隣のセルの文字列ですか?

C2 , A6 が数値なら下記にしてください。

 Call 曖昧日付入力(Target, _
           CDate(Me.Range("C2").Value & "/" & Me.Range("A6").Value & "/1"))

(AddinBox 角田) 2021/03/09(火) 17:34


 "年" "月" は書式設定です。

 数値にして下記を実行しましたが、1900/3/15になります。

 If (Target.Cells.Count = 1) Then
        '単一セル
        If (Target.Address(False, False) = "A7") Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & "/ " & Me.Range("A6").Value & "/1"))
        End If
    End If
End Sub
(yusuke) 2021/03/09(火) 18:10

 角田っさんの2021/03/08(月) 22:34のレス
 >A7 セルは予め d(aaa) の書式設定をしておいてください。 

 はちゃんと設定してますよね?
(通りすがり) 2021/03/09(火) 20:00

 気になるのが、

 >1900/3/15になります。

 です。

 試しに、新規ブックのシートで

A1=2021
B1=3
C1=9
で任意のセルに
=DATE(A1,B1,C1)

としてみてください。
セルに

2021/3/9

と表示されると思います。

でA1の内容をDelキーで削除してみてください。

1900/3/9

になると思います。

 >1900/3/15になります。

は、「年」の部分が0と認識されていると思います。
ただ、私が試した限りでは、C2セルがブランクだと
エラーになり、

1900/3/15にはなりませんでした。
(通りすがり) 2021/03/09(火) 20:09


通りすがりさん  ありがとうございます。
おっしゃる通りになりました。
C2のセルを一からやり直してみます。
出来なかったら、またお願いします。
お世話さんでした。

(yusuke) 2021/03/09(火) 20:18


 =DATE(A1,B1,C1)でC1の数字を変えれば、
 その数字が任意のセル(仮にF1)に反映されるのは分かりました。
 A列のA7から下に表示させるにはどのようにするのですか? 

 よろしくお願いします

(yusuke) 2021/03/10(水) 13:24


 >=DATE(A1,B1,C1)

 これは、あくまでも日付データの「年」の部分のデータ
 が入力されてなかったらどうなるかを確認していただく
 ために試していただいたものです。

 VBAで行うのではないのですか?
 関数で行うのですか?
(通りすがり) 2021/03/10(水) 13:40

マクロで 「A7 のみ」ではなく「セル範囲」にするなら、
リンク先のコードを参考にして Row/Column で対象範囲に
入っているかを判定してください。

(AddinBox 角田) 2021/03/11(木) 08:36


 通りすがりさん AddinBox 角田さん
 ありがとうございます。
 VBAはよく分からないので出来れば、関数でしたいと考えてます。
 よろしくお願いします。

(yusuke) 2021/03/11(木) 11:10


>> 列を挿入したらデータが無茶苦茶になりそうなんで。
> 関数でしたいと考えてます。

関数では、入力したセル自体を書き換えることはできませんよ。

入力するセル(A列)を参照して日付に直す関数式
=DATE($C$2, $A$6, A7)
を記述する為のセル(新たな列)が必要です。

(AddinBox 角田) 2021/03/11(木) 12:00


 >関数でしたいと考えてます。

 2021/03/08(月) 20:24 にて回答済み
 試してないんですか?

 ついでにお聞きしますけど
 >列を挿入したらデータが無茶苦茶になりそうなんで
 これは具体的にどういうこと?

 以上
(笑) 2021/03/11(木) 12:07

 AddinBox 角田さんありがとうございます。
 http://addinbox.sakura.ne.jp/Excel_Tips19.htmの中の、
 2007年1月のようになるといいのですがね。

 2021/03/08(月) 20:24 にて回答済み
 試して、別セルに表示することは出来ましたが、
 どうしても、一つのセルにしたいのです。
 列をし挿入しても、データは大丈夫でした。
 ありがとうございます。
(yusuke) 2021/03/11(木) 13:05

> 2007年1月のようになるといいのですがね。
意味不明です

> A列は100まで使う予定です

    If (Target.Cells.Count = 1) Then
        '単一セル(A7〜A100)
        If (Target.Column = 1) And _
           (Target.Row >= 7) And _
           (Target.Row <= 100) Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & "/ " & Me.Range("A6").Value & "/1"))
        End If
    End If

(AddinBox 角田) 2021/03/11(木) 16:33


 If (Target.Cells.Count = 1) Then
        '単一セル(A7〜A100)
        If (Target.Column = 1) And _
           (Target.Row >= 7) And _
           (Target.Row <= 100) Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & "/ " & Me.Range("A6").Value & "/1"))
        End If
    End If 
 角田さん、何度もありがとうございます。
 新規のブックを開き、上記のVBAをシートのコードに貼り付けました。
 C2 2021年 A6に3月として  A7に 11と入力したら、1900/1/11となってしまいます。
 A7からA100まで、d aaaと設定しています。どこが間違ってるのでしょうか?
(yusuke) 2021/03/11(木) 18:01

 A7は 11 水 となり、数式バーのところで、1900/1/11となります。
 よろしくお願いします。
(yusuke) 2021/03/11(木) 18:34

>> ただ、私が試した限りでは、C2セルがブランクだとエラーになり、

> 上記のVBAをシートのコードに貼り付けました。
> C2 2021年 A6に3月として  A7に 11と入力したら、1900/1/11となってしまいます。

エラーになっていないのならば、その状況は「マクロが動いていない」という事です。
マクロが動いてなくて、セルの書式が日付なので、
> A7に 11と入力したら、1900/1/11となってしまいます
「 11 という値をシリアル値として」そのまま日付表示にすれば 1900/1/11 です。

その入力しているシートに対応する【シートモジュール】に
マクロコードが無いという事です。

(AddinBox 角田) 2021/03/11(木) 18:46


 角田さん、ホントに申し訳ありません。

 >その入力しているシートに対応する【シートモジュール】に
 >マクロコードが無いという事です。

 貼り付ける場所が違うのでしょうか?
 どうしたらいいのですか?

(yusuke) 2021/03/11(木) 19:40


>> 上記のVBAをシートのコードに貼り付けました
> 貼り付ける場所が違うのでしょうか?

逆に、今現在、どこに貼り付けてあるのでしょうか?

VisualBasic Editor の 標準モジュール・シートモジュールというものは判りますか?

(AddinBox 角田) 2021/03/11(木) 19:53


 今貼り付けてるのは、Sheet1のコードを表示を
 開いたところに貼り付けています。
 VisualBasic Editor の 標準モジュール・シートモジュール
 はい,分かります。 Book1.xls-Module(コード)
          General     Declaeations
 のところですよね。
(yusuke) 2021/03/11(木) 20:09

問題ないようですね。

一度、実行に失敗して「Application.EnableEvents = False 」の
状態が継続している為、セルの変更イベントが発生していないのかもしれません。

標準モジュールに下記を張り付けてマクロ「 xxx 」を実行してから
再度試してみてください。
Sub xxx()
 Application.EnableEvents = True
End Sub

(AddinBox 角田) 2021/03/11(木) 20:26


 マクロ「 xxx 」を実行しましたら
 コンパイルエラー
 プロシージャの外では無効です。
 となりました。
(yusuke) 2021/03/11(木) 20:42

何か変な所に貼り付けてしまったのではないかな?

(AddinBox 角田) 2021/03/11(木) 20:58


 横からですが、
 角田さんいつもお世話になっています^^

 一度できていたのに、色々試していたら質問者さんと同じ状況になって、?ってなってました。

 >一度、実行に失敗して「Application.EnableEvents = False 」の
 >状態が継続している為、セルの変更イベントが発生していないのかもしれません。

 そんなこともあるんですね〜
 勉強になります。ありがとうございます^^

 >マクロ「 xxx 」を実行しましたら
 >コンパイルエラー
 >プロシージャの外では無効です。
 >となりました。

 ん?なぜでしょうね〜
 ちなみに私の場合、標準モジュールに張り付けただけでマクロ「 xxx 」実行しなくてもちゃんと表示さ 
 れましたが。。。

 今、実行してみても大丈夫でしたが?
(檸檬) 2021/03/11(木) 21:11

>新規のブックを開き、上記のVBAをシートのコードに貼り付けました。
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
は省略されて書かれています。
これは理解していますか。
(yusuke) 2021/03/09(火) 15:13で[コピペして]とありますが
Private Sub Worksheet_Change(ByVal Target As Range)
の部分からコピーしていないと受け取れますけどどうですか。
(TVK) 2021/03/11(木) 21:24

 檸檬さん、詳しく教えて頂けませんか?
 とにかく、エクセルが詳しくないので。

 >Private Sub Worksheet_Change(ByVal Target As Range)と
 End Sub は省略されて書かれています。
 これは理解していますか。
 私の頭では理解できませんので。
 どこに何を張り付ければいいのか、分からなくなってます。
 よろしくお願いします。
(yusuke) 2021/03/12(金) 08:32

>VBAはよく分からないので出来れば、関数でしたいと考えてます。
(笑) 2021/03/11(木) 12:07の回答にもあるようになぜこの関数を試さないのですか。
>とにかく、エクセルが詳しくないので。
だったらVBAで処理するのはやめた方がいいです。
回答者の質問にもきちんと答えられていない気がするので先ずはここを直しましょう。
(閲覧者) 2021/03/12(金) 11:27

 >C2 2021年 A6 3月 としています。
 どのようにして入力しましたか。
(野次馬) 2021/03/12(金) 11:54

2021と入力して、初期設定で
2021"年"としました。
3月も同じです。
(yusuke) 2021/03/12(金) 13:00

 書式設定です。
(yusuke) 2021/03/12(金) 13:05

 2019でやった手順です。
 C2に2021 [セルの書式設定ーユーザー定義で0"年"]
 A6に3 [セルの書式設定ーユーザー定義で0"月"]
 名前ボックスにA7:A100と入れて範囲選択したら[セルの書式設定ーユーザー定義でd(aaa)]

 Alt+F11
 挿入ー標準モジュールに以下を貼り付け。

 Public Sub 曖昧日付入力(ByVal Rng As Range, ByVal BaseDate As Date)
'[M/D or Dのみ]日付入力に対し、指定の基準年月の日付として書き換える
'--利用条件--
' (1)Rngの指すセルは[単一セル]のみ可(事前にチェックする事[Rng.Cells.Count = 1])
' (2)Rngの指すセルには日付形式の書式が設定されている事
' (3)BaseDateは[1日]以外でも可
Dim strBaseYM As String
Dim dtm1stDay As Date
Dim dtmEndDay As Date

    strBaseYM = Format(BaseDate, "yyyy/m/")
    dtm1stDay = DateValue(strBaseYM & "1")
    dtmEndDay = DateAdd("m", 1, dtm1stDay) - 1

    Application.EnableEvents = False

    If (Rng.Value = Empty) Then
        'セルクリア操作
        'ゼロ入力(セル上の日付で1900/1/0)もTrueになる為、ここで入力無効にする
        '(Emptyが数値比較ではゼロ扱いになる為)
        Rng.ClearContents
    ElseIf (IsDate(Rng.Value)) Then
        '書式設定が日付なので、数値入力(1〜31)も[IsDate=True]で判定する
        '([IsNumeric]はFalseになる)
        'マイナス値もセル上は####表示でエラーだが、VBAからは[IsDate=True]
        Select Case Rng.Value
          Case Is < 0
            'セルでは日付として扱えない為、入力を無効にする
            Rng.ClearContents
          Case 1 To 31      'シリアル値(日付書式)では[1900/1/1〜1/31]を意味する
            'Dのみ日付入力
            If (Rng.Value <= Day(dtmEndDay)) Then
                Rng.Value = DateValue(strBaseYM & CInt(Rng.Value))
            Else
                '2月/小の月で[>月末日]は月末日とする
                Rng.Value = dtmEndDay
            End If
          Case dtm1stDay To dtmEndDay
            'Y/M/D日付入力なので、そのまま
          Case Else
            'M/D日付入力、年または年月が基準年月と異なっているので修正する
            If (Day(Rng.Value) <= Day(dtmEndDay)) Then
                Rng.Value = DateValue(strBaseYM & Day(Rng.Value))
            Else
                '2月/小の月で[>月末日]は月末日とする
                Rng.Value = dtmEndDay
            End If
        End Select
    Else
        '文字etc は入力無効とする
        Rng.ClearContents
    End If

    Application.EnableEvents = True
End Sub

 >今貼り付けてるのは、Sheet1のコードを表示を
 >開いたところに貼り付けています。
 そこに以下を貼り付け。

 Private Sub Worksheet_Change(ByVal Target As Range)
'======【 日付欄入力のサポート 】==============

If (Target.Cells.Count = 1) Then

        '単一セル(A7〜A100)
        If (Target.Column = 1) And _
           (Target.Row >= 7) And _
           (Target.Row <= 100) Then
            '日付欄で[日]のみor[月/日]入力でも正しくシート名の年月の日付に変換する
            Call 曖昧日付入力(Target, _
                  CDate(Me.Range("C2").Value & "/ " & Me.Range("A6").Value & "/1"))
         End If
    End If
End Sub

(檸檬) 2021/03/12(金) 17:24


 マクロが有効になっていないということはありませんか?

 >その状況は「マクロが動いていない」という事です。
 参考まで
 h ttps://akindow.com/macroonexcel2003/

 >セキュリティは「中」に設定しておいて、
 >Excelを起動時に「マクロを有効にする」手順を踏むことがポイントですね。
 だそうです。

(檸檬) 2021/03/12(金) 17:31


 檸檬さん、本当にありがとうございます。
 訳の分からない私のような者に親切にお教えいただきまして有難うございます。
 やっと、思い通りのものが出来ました事、感謝します。

 なお、笑さん、角田さん、TVKさん、閲覧者、野次馬さんにも何かと、
 ご指導いただきありがとうございました。
 皆さん、長い間時間を潰させて申し訳ありませんでした。
(yusuke) 2021/03/12(金) 18:20

コメント返信:

[ 一覧(最新更新順) ]


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