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

お世話になっております。今now関数とマクロを使って当日の時間をリアルタイムでセルに表示
させております。これをさらにtext関数でyyymmddhhmmss、2017012905148という感じで表示させており、これをif関数である条件に達したときに別のセルにこの数字がはいるように設定したのですが、時間が常に動いているのでこのセルに表示されている数字がいつまでも数字が動いてしまいます。つきましては、ifでこの別のセルに表示された時点で数字で固定されるようにしたいのですが、どなたか教えていただけないでしょうか?マクロでも関数でもかまいません。
わかりずらい文章であれば補足いたしますのでご質問入れてください。
ちなみに用途としては出退勤管理用みたいな感じで利用しています。

よろしくお願いします。

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

  • 皆様ありがとうございます。ある条件とかきましたが、そんなに難しくなくて例えば
    他のセルに1と入力したときにというような条件とお考え下さい。イメージかきましたが、
    例えば出勤したときに1とA1のセルに入力したときにB1にtextの返しが入ってそれが止まれば
    その日の出退勤がわかるかなという感じです。
    また、ママチャリ様すみません、以前にもご返事いただいてましたありがとうございます。
    私マクロあまり詳しくないので恐縮ですが、workshhet云々というところはどこになりますでしょうか?moduleのとこだとgeneralというのしかでてないのですが、こちらもあわせてお返事いただけると助かります。
    よろしくお願いします。

      補足日時:2017/01/29 15:53
  • ままちゃり様ありがとうございます。添付内容にてできました。助かります。
    それであと少し質問お願いします。
    1.今c1.c10に入力となってますが、これをたとえばc1.c10とh1.h10という風に2ついれるところを作りたいときはもらったvbaのどこをいじればよろしいでしょうか?
    2.今c1に入力すると右のセルに数字が表示されます。これを左に表示させるにはどうしたらよいでしょうか?例えばf1.f10に入力してe1.e10に返すというパターンです。

    何度もすみません。ご検討お願いします。

      補足日時:2017/01/29 17:18

A 回答 (5件)

こんな感じです。


修正の必要な行をコメントにして、次行に修正後の命令を記述しました(修正は3ヶ所です)。
申し訳ありませんが、説明は省略させていただきます。意味はヘルプ等でご確認ください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Dim r As Range
'Set myRng = Intersect(Target, Range("C1:C10"))
Set myRng = Intersect(Target, Range("F1:F10,H1:H10"))
If Not myRng Is Nothing Then
Application.EnableEvents = False
For Each r In myRng
If r.Value = "" Then
'r.Offset(0, 1).Value = ""
r.Offset(0, -1).Value = ""
Else
'r.Offset(0, 1).Value = Range("B1")
r.Offset(0, -1).Value = Range("B1")
End If
Next
Application.EnableEvents = True
End If
End Sub
    • good
    • 0
この回答へのお礼

完全なベストアンサーです。ままちゃりさんということで、ままさんかどうかはわかりませんが、夕飯近くにいろいろ指導いただきありがとうございます。またよろしくお願いします。神ですね。

お礼日時:2017/01/29 19:09

思い出しました。

その節は失礼しました。返事しようと思ったのですが、締め切られてしまったもので…。

添付の画像をご確認ください。
①でシートモジュールを選択し、②でWorkSheetを選択し、③で作りたいイベントプロシジャを選択すると、中身が空っぽのプロシジャ(Private Sub~空っぽ~End Subだけ)が作成されます。
今回の例の場合、「Change」を選択して作成されたプロシジャの中にコードを張り付けることになります。「Private Sub」と「End Sub」の行は重複しないようにしてくださいね。

ちなみに、Worksheet_Changeイベントプロシジャは、該当シート中のセルの値が変更された場合に実行されるものです。「Change」以外にもダブルクリックした時に実行されるものや右クリックした時に実行されるものなどがありますので、お好みに合わせて使い分けて下さい。
「エクセル関数かマクロで」の回答画像4
    • good
    • 0
この回答へのお礼

すごい丁寧にありがとうございます。締め切りの件も含めてすみません。すべてが素人なものですので。いただいた内容にてちょっとやってみます。

お礼日時:2017/01/29 17:06

なるほど。


操作した瞬間の時間を取得したいのであれば、やはりVBAでないと不可能ですね。
    • good
    • 0
この回答へのお礼

検討ありがとうござます。

お礼日時:2017/01/29 17:07

ある条件というのは何でしょう?


それが11桁の数字=現在の時刻によって決まる、判断できるのであれば式で判断も可能だと思います。
(例えば、何かをした瞬間の時刻。というのであれば、その行動を行ったかどうか関数で判定はできません。 その時刻が就業時刻中ならそのまま、就業時刻外なら直前の終業時刻。というのであれば、就業時刻の指定をすれば11桁の数字から関数で条件を指定できます。)

条件を提示いただければ、式で作れるかVBAじゃないと無理かの判断はできると思います。
    • good
    • 0

関数では数字を固定することはできないと思います。

よって、マクロになります。
お好みのイベントプロシジャを使って、固定したいセルに値を代入するイメージです。

例えば、A1セルにNow関数、B1セルにText関数が入っていて、リアルタイムで時を刻んでいるものとします(ここまでは出来ている前提です)。
その上で、C1:C10セルに名前を入力したタイミングで、その右隣のセルにB1セルの値を固定する例を考えてみました。こんな感じです。
該当シートのWorksheet_Changeイベントプロシジャに、次のマクロを記述してください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Dim r As Range
Set myRng = Intersect(Target, Range("C1:C10"))
If Not myRng Is Nothing Then
Application.EnableEvents = False
For Each r In myRng
If r.Value = "" Then
r.Offset(0, 1).Value = ""
Else
r.Offset(0, 1).Value = Range("B1")
End If
Next
Application.EnableEvents = True
End If
End Sub
    • good
    • 0

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