[[20120813102854]] 『日付固定について』(白猫) ページの最後に飛ぶ

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

 

『日付固定について』(白猫)

皆様

困っていることがあるので、恐れ入りますがお力を貸していただけますでしょうか。

<困っていること>

以下のようなスケジュールを作成しています。

         |2012/08/15     |2012/08/16      |2012/08/17      
担当者   |開始時間 |終了時間 |開始時間 |終了時間 |開始時間 |終了時間
A        |09:00   |18:00  |08:00   |20:00   |08:00   |18:00
B        |09:00   |20:00  |08:00   |21:00   |08:00   |18:00
C        |09:00   |18:00  |08:00   |21:00   |08:00   |20:00

日付と時間を使用した計算式をExcelの別の場所で使用しているため、
時間部分に「2012/08/15 09:00:00」と入力し、表示形式を「hh:mm」としています。
ただこの方法の場合、時間を変更する際に手間となっております。

<やりたいこと>

時間部分には時間のみ(09:00)を入力し、そのセルの日付については、
上記に記載してある日付で固定する方法はありますか?

何かご不明な点がありましたら、ご連絡ください。
恐れ入りますが、お教えいただけますと幸いです。

    


 あるセルに入力して、「そのセルの値」を、別のものに変更することは、エクセル関数の仕様として不可能。

 やるなら、アップしたレイアウトと同じレイアウトで入力用領域を設けておき、そこに入力。
 で、アップされた領域には、その入力用領域と1行目の日付を組み合わせて、その日の時刻にするような式をいれる。

 自分だったら、そういう面倒なことをやめてVBA処理だね。

 (ぶらっと)

 その別の場所の「計算式」側で日付を付加すればいいのでは?

 (GobGob)

 衝突!…
 例えばA1へ「8/15」と入力、B1へ「9:00」と入力、この二つのセルを入力用セルとして
 C1には「=A1+B1」の式を入れておき、このセルを他の計算式に参照させるとか。
(Jera)

ぶらっとさん
GobGobさん
Jeraさん

お忙しいところ早速のご連絡、誠にありがとうございます。

1)VBA案について

Excelでは不可能とのこと、かしこまりました。
また、VBAで行う場合、どのような処理になりますか、教えていただくことは可能でしょうか。
もし可能でございましたら教えていただけますと幸いです。

2)計算式に日付を付加する案について

「書式設定」に計算式を入れているのですが、計算式が長くなってしまい、
残念ながら入りきらない状況でございます。

3)日付+時間セルを作成する案について

行が多いため、計算式用にセルを用意することは、残念ながら中々難しい状況でございます。

皆様、ご連絡くださいまして、本当にありがとうございました。


 シートモジュール(シートタブを右クリック --> コードの表示) に以下を貼り付け。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    Dim c As Range
    Dim x As Long
    Dim myDate As Date
    Dim myTime As Date

    With Range("A1").CurrentRegion
        Set r = Intersect(Target, .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1))
    End With

    If r Is Nothing Then Exit Sub

    Application.EnableEvents = False

    For Each c In r
        If IsNumeric(c.Value) Then
            x = c.Column
            If x Mod 2 > 0 Then x = x - 1
            myDate = Cells(1, x).Value
            c.Value = DateSerial(Year(myDate), Month(myDate), Day(myDate)) + _
                        TimeSerial(Hour(c.Value), Minute(c.Value), Second(c.Value))
        End If
    Next

    Application.EnableEvents = True

 End Sub

 (ぶらっと)

ぶらっとさん

教えてくださいまして、ありがとうございます。
勉強しながら確認していきます。
本当にありがとうございました。


 終了したっぽいけど。

 元表でせっかく日付データと時間データを分けてるんだから
 それを足し算すればいいのでは?

 参照先の数式がどうなってるかわからないけど。

 たとえば別の場所の計算がINDEX+MATCHで出してるんなら

 =INDEX(Sheet1!C:C,MATCH(検索日付,Sheet1!1:1,0))+検索日付 (開始時間の検索)

 これで帰ってくる時間は日付付加されてると思うけどねぇ。

 (GobGob)


 >元表でせっかく日付データと時間データを分けてるんだから

 見た目わかれているけど、人間の入力だから、日付、時刻が入力されていて、表示書式でわけている場合を想定。
 (うがちすぎ??)

 もし、絶対に分かれているということであれば

 c.Value = DateSerial(Year(myDate), Month(myDate), Day(myDate)) + _
                        TimeSerial(Hour(c.Value), Minute(c.Value), Second(c.Value))

 これは、単純に c.Value = myDate + c.Value 

 これでOK。

 (ぶらっと)

 >見た目わかれているけど、人間の入力だから、日付、時刻が入力されていて、表示書式でわけている場合を想定。

 その可能性もなきにしもあらず。っすな。

 =TEXT(INDEX(Sheet1!C:C,MATCH(検索日付,Sheet1!1:1,0)),"h:mm")+検索日付 (開始時間の検索)

 ※MODでもいいけど念のためにTEXT処理。

 (GobGob)


A1セルに入力がなされた時、A3セルに日付を固定する方法として以下の通りでは不可能でしょうか?
私は可能かと思います。


=IF(A1="","",IF(A1="",A3,TODAY()))

飼い犬:ギン


 無理。
 固定とは、そのブックを開いた時にいつでも同じである必要がある。
 関数だとブックを開いた日の日付が対象になるため無理。
 BJ

 #元は古いスレのようですが、

 その式では固定にならないですね。

 以前どなたかが揮発関数が更新されない方法を提示されていたと思ったのですが、
 検索で見つけることが出来ませんでした。
 思い出して試してみましたがこんな感じでしょうか( TODAY をNOW にして試してみました)。

 A3に   =IF(A1="","",IF(A3="",TODAY(),A3))

 ただし、これは循環関数なのでオプションで反復計算を有効にしておく必要があります。
 また、
   A1 を更新しても日付が変わらない
   一回 A1をクリアすると消えてしまう
 などの点は制御できないので、運用方法によっては問題もありそうです。

 その場だけの使い捨てならともかく、長期運用するファイルであれば素直に
 Ctr+; で日付を入れるか、マクロ対応がよいのではないかと思います。
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


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