Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4399 / 13645 ツリー ←次へ | 前へ→

【56630】時間表示についてお願いします。 マクロ 08/6/25(水) 23:40 質問[未読]
【56631】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 0:14 発言[未読]
【56632】Re:時間表示についてお願いします。 マクロ 08/6/26(木) 0:25 お礼[未読]
【56633】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 8:31 発言[未読]
【56635】Re:時間表示についてお願いします。 マクロ 08/6/26(木) 13:51 質問[未読]
【56638】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 14:55 発言[未読]
【56640】Re:時間表示についてお願いします。 マクロ 08/6/26(木) 16:04 質問[未読]
【56642】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 16:55 発言[未読]
【56644】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 17:26 発言[未読]
【56646】Re:時間表示についてお願いします。 マクロ 08/6/26(木) 18:44 質問[未読]
【56647】Re:時間表示についてお願いします。 kanabun 08/6/26(木) 19:07 発言[未読]
【56692】Re:時間表示についてお願いします。 マクロ 08/6/30(月) 18:51 お礼[未読]
【56696】Re:時間表示についてお願いします。 kanabun 08/6/30(月) 23:08 発言[未読]
【56724】Re:時間表示についてお願いします。 マクロ 08/7/2(水) 10:10 質問[未読]
【56729】Re:時間表示についてお願いします。 kanabun 08/7/2(水) 11:26 発言[未読]
【56733】Re:時間表示についてお願いします。 kanabun 08/7/2(水) 13:54 発言[未読]
【56734】Re:時間表示についてお願いします。 VBAでメール 08/7/2(水) 13:57 質問[未読]
【56736】Re:時間表示についてお願いします。 kanabun 08/7/2(水) 15:08 回答[未読]
【56775】Re:時間表示についてお願いします。 VBAでメール 08/7/4(金) 10:16 質問[未読]
【56776】Re:時間表示についてお願いします。 kanabun 08/7/4(金) 10:45 発言[未読]
【56777】Re:時間表示についてお願いします。 kanabun 08/7/4(金) 10:50 発言[未読]
【56781】Re:時間表示についてお願いします。 VBAでメール 08/7/4(金) 14:32 質問[未読]
【56782】Re:時間表示についてお願いします。 kanabun 08/7/4(金) 14:46 発言[未読]
【56784】Re:時間表示についてお願いします。 VBAでメール 08/7/4(金) 15:16 質問[未読]
【56787】Re:時間表示についてお願いします。 放置新聞 08/7/4(金) 15:40 発言[未読]
【56788】Re:時間表示についてお願いします。 kanabun 08/7/4(金) 15:48 発言[未読]
【56810】Re:時間表示についてお願いします。 マクロ 08/7/6(日) 20:22 お礼[未読]
【56826】Re:時間表示についてお願いします。 VBA勉強中です 08/7/7(月) 17:19 質問[未読]
【56830】Re:時間表示についてお願いします。 kanabun 08/7/7(月) 18:16 発言[未読]
【56831】Re:時間表示についてお願いします。 VBA勉強中です 08/7/7(月) 18:47 お礼[未読]
【56832】Re:時間表示についてお願いします。 kanabun 08/7/7(月) 18:52 発言[未読]
【56898】Re:時間表示についてお願いします。 マクロ 08/7/10(木) 10:15 質問[未読]
【56912】Re:時間表示についてお願いします。 kanabun 08/7/10(木) 14:40 発言[未読]
【56922】Re:時間表示についてお願いします。 マクロ 08/7/10(木) 19:34 お礼[未読]

【56630】時間表示についてお願いします。
質問  マクロ  - 08/6/25(水) 23:40 -

引用なし
パスワード
   時間表示についてお聞きします。

TextBox1=10:25でTextBox2=10:30だとします。その差をTextBox3に00:05と表示させるにはどうすればよいでしょうか・・?
下パターンでは00:05とは表示されず、ただの5しか表示されません・・
よろしくお願いします。

Private Sub CommandButton46_Click()
TextBox1 = Hour(Time) & ":" & Format(Minute(Time), "DD")
End Sub
---------------------------------------------------------
Private Sub CommandButton47_Click()

TextBox2 = Hour(Time) & ":" & Format(Minute(Time), "DD")

TextBox3 = DateDiff("n", TextBox1.Value, TextBox2.Value)

End Sub

【56631】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 0:14 -

引用なし
パスワード
   ▼マクロ さん:
こんばんは。

>TextBox1=10:25でTextBox2=10:30だとします。その差をTextBox3に00:05と表示させるにはどうすればよいでしょうか・・?
>下パターンでは00:05とは表示されず、ただの5しか表示されません・・

コントロール名も、表示形式も違いますけど(秒まで表示)、
参考にしてください。

Private Sub CommandButton1_Click()
 TextBox1.Text = Format$(Now(), "h:nn:ss")
End Sub

Private Sub CommandButton2_Click()
 Dim t1 As Double
 Dim t2 As Double
 
 TextBox2.Text = Format$(Now(), "h:nn:ss")
 t1 = TimeValue(TextBox1.Text)
 t2 = TimeValue(TextBox2.Text)
 TextBox3.Text = Format$(t2 - t1, "hh:nn:ss")
End Sub

【56632】Re:時間表示についてお願いします。
お礼  マクロ  - 08/6/26(木) 0:25 -

引用なし
パスワード
   ▼kanabun さん:どうもありがとうございます。
>▼マクロ さん:
>こんばんは。
>
>>TextBox1=10:25でTextBox2=10:30だとします。その差をTextBox3に00:05と表示させるにはどうすればよいでしょうか・・?
>>下パターンでは00:05とは表示されず、ただの5しか表示されません・・
>
>コントロール名も、表示形式も違いますけど(秒まで表示)、
>参考にしてください。
>
>Private Sub CommandButton1_Click()
> TextBox1.Text = Format$(Now(), "h:nn:ss")
>End Sub
>
>Private Sub CommandButton2_Click()
> Dim t1 As Double
> Dim t2 As Double
> 
> TextBox2.Text = Format$(Now(), "h:nn:ss")
> t1 = TimeValue(TextBox1.Text)
> t2 = TimeValue(TextBox2.Text)
> TextBox3.Text = Format$(t2 - t1, "hh:nn:ss")
>End Sub

【56633】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 8:31 -

引用なし
パスワード
   ▼マクロ さん:

日付が変わると 時間差がマイナスになってしまうので、
以下のように参考コード修正しときます。

'--------------------------------- UserFormモジュール
Private t1 As Date

Private Sub CommandButton1_Click()
 t1 = Now()
 TextBox1.Text = Format$(t1, "h:nn:ss")
End Sub

Private Sub CommandButton2_Click()
 Dim t2 As Date
 t2 = Now()
 TextBox2.Text = Format$(t2, "h:nn:ss")
 TextBox3.Text = Format$(t2 - t1, "hh:nn:ss")
End Sub

【56635】Re:時間表示についてお願いします。
質問  マクロ  - 08/6/26(木) 13:51 -

引用なし
パスワード
   ▼kanabun さん:追加でお聞きします。
時間の表示については解決しましたありがとうございます。

TextBox1=10:25でTextBox2=10:30だとします。その差をTextBox3に00:05で同様に
TextBox4=10:30でTextBox5=10:35 その差をTextBox6は00:05 
TextBox7=10:35でTextBox8=10:40 その差をTextBox9は00:05 

ここで累計という形でTextBox10にTextBox3+TextBox6+TextBox9の合計時間を表示させるにはどうしたらよいでしょうか?
よろしくお願いします

【56638】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 14:55 -

引用なし
パスワード
   ▼マクロ さん:

>ここで累計という形でTextBox10に
> TextBox3+TextBox6+TextBox9の合計時間を表示させるにはどうしたらよいでしょうか?

TextBox内のテキストは文字列ですから、
それを時間に直して、合計すればいいです。

 TextBox10.Text = TimeValue(TextBox3.Text) _
         + TimeValue(TextBox6.Text) _
         + TimeValue(TextBox9.Text)

【56640】Re:時間表示についてお願いします。
質問  マクロ  - 08/6/26(木) 16:04 -

引用なし
パスワード
   ▼kanabun さん:ありがとうございます。

以下のように構文を設定しましたが、エラーが出ます。
どこを直せばいいでしょうか?ご指導お願いします。

Private Sub CommandButton1_Click()
 TextBox1.Text = Format$(Now(), "h:nn")

End Sub
--------------------------------------------------------------------------
Private Sub CommandButton2_Click()
 Dim t1 As Double
 Dim t2 As Double

 TextBox2.Text = Format$(Now(), "h:nn")
 t1 = TimeValue(TextBox1.Text)
 t2 = TimeValue(TextBox2.Text)
 TextBox3.Text = Format$(t2 - t1, "hh:nn")
 TextBox10.Text = TimeValue(TextBox3.Text)_ + TimeValue(TextBox6.Text)

End Sub
----------------------------------------------------------------------------
Private Sub CommandButton3_Click()
TextBox4.Text = Format$(Now(), "h:nn")
End Sub
----------------------------------------------------------------------------
Private Sub CommandButton4_Click()
 Dim t1 As Double
 Dim t2 As Double

 TextBox5.Text = Format$(Now(), "h:nn")
 t1 = TimeValue(TextBox4.Text)
 t2 = TimeValue(TextBox5.Text)
 TextBox10.Text = TimeValue(TextBox3.Text)_ + TimeValue(TextBox6.Text)

【56642】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 16:55 -

引用なし
パスワード
   ▼マクロ さん:
>▼kanabun さん:ありがとうございます。
>
>以下のように構文を設定しましたが、エラーが出ます。
>どこを直せばいいでしょうか?ご指導お願いします。

エラーの時は、どの行で、どういう内容のエラーメッセージが出るのか
教えてください。

CommandButton1 がClick されたとき、変数 t1に Now()時刻を、
CommandButton2 がClick されたとき、変数 t2に Now()時刻を
セットしていましたが、そのほかの「Start」「Stop」ボタンClick時の動作も
同じようにしてみましょう。

CommandButton3 がClick されたとき、変数 t3に Now()時刻を、
CommandButton4 がClick されたとき、変数 t4に Now()時刻を
CommandButton5 がClick されたとき、変数 t5に Now()時刻を、
CommandButton6 がClick されたとき、変数 t6に Now()時刻を
それぞれ格納しておいて、
TextBox10 のトータル時間の表示は これらの合計値とします。
何箇所かで使うので、↓のようにサブプロシージャに独立させておきます。
> Private Sub ShowTotalTime()
>  TextBox10.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "dd hh:n:ss")
> End Sub


'-------------------------------------------------------
Option Explicit
Private t1 As Date
Private t2 As Date
Private t3 As Date
Private t4 As Date
Private t5 As Date
Private t6 As Date
Private Const fmt = "h:nn"  '"h:nn:ss"

Private Sub UserForm_Initialize()
 '変数 t1〜t6 を初期化しておきます
 t1 = Now()
 t2 = t1
 t3 = t1
 t4 = t1
 t5 = t1
 t6 = t1
End Sub

Private Sub ShowTotalTime()
 TextBox10.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "dd hh:n:ss")
End Sub

Private Sub CommandButton1_Click()
 t1 = Now()
 TextBox1.Text = Format$(t1, fmt)
End Sub

Private Sub CommandButton2_Click()
 t2 = Now()
 TextBox2.Text = Format$(t2, fmt)
 TextBox3.Text = Format$(t2 - t1, fmt)
 ShowTotalTime
End Sub

Private Sub CommandButton3_Click()
 t3 = Now()
 TextBox4.Text = Format$(t3, fmt)
End Sub

Private Sub CommandButton4_Click()
 t4 = Now()
 TextBox5.Text = Format$(t4, fmt)
 TextBox6.Text = Format$(t4 - t3, fmt)
 ShowTotalTime
End Sub


Private Sub CommandButton5_Click()
 t5 = Now()
 TextBox7.Text = Format$(t5, fmt)
End Sub

Private Sub CommandButton6_Click()
 t6 = Now()
 TextBox8.Text = Format$(t6, fmt)
 TextBox9.Text = Format$(t6 - t5, fmt)
 ShowTotalTime
End Sub

【56644】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 17:26 -

引用なし
パスワード
   ▼マクロ さん:

それから、全部書いてから気がついたのだけれど (--)
テキストボックス1〜10 は 全部 ラベルにしてもよかったですね。
結果を表示するだけだから。
TextBoxはユーザーが入力する必要があるとき、使います。

【56646】Re:時間表示についてお願いします。
質問  マクロ  - 08/6/26(木) 18:44 -

引用なし
パスワード
   ▼kanabun さん:ありがとうございます。
下記のように変更しましたが、
-------------------------------------------------------
Private Sub CommandButton46_Click()
TextBox49 = Format$(Now(), "h:nn")
End Sub
-------------------------------------------------------
Private Sub CommandButton47_Click()
Dim t1 As Double
Dim t2 As Double

 TextBox50.Text = Format$(Now(), "h:nn")
 t1 = TimeValue(TextBox49.Text)
 t2 = TimeValue(TextBox50.Text)
 TextBox78.Text = Format$(t2 - t1, "hh:nn")
 TextBox76.Text = Format$(t2 - t1 + t4 - t3, "hh:nn")

End Sub
--------------------------------------------------------
Private Sub CommandButton48_Click()
TextBox53 = Format$(Now(), "h:nn")
End Sub
--------------------------------------------------------
Private Sub CommandButton49_Click()
TextBox54 = Format$(Now(), "h:nn")
Dim t1 As Double
Dim t2 As Double

 TextBox54.Text = Format$(Now(), "h:nn")
 t3 = TimeValue(TextBox53.Text)
 t4 = TimeValue(TextBox54.Text)
 TextBox77.Text = Format$(t4 - t3, "hh:nn")
 TextBox76.Text = Format$(t2 - t1 + t4 - t3, "hh:nn")
--------------------------------------------------------
TextBox76にTextBox77とTextBox78の累計時間を表示しようとしましたが
累計されず、TextBox77かTextBox78のどちらかの時間しか表示されません。
もっともシンプルな方法を指導願います。

【56647】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/26(木) 19:07 -

引用なし
パスワード
   ▼マクロ さん:
>--------------------------------------------------------
>TextBox76にTextBox77とTextBox78の累計時間を表示しようとしましたが
>累計されず、TextBox77かTextBox78のどちらかの時間しか表示されません。

TextBox76 とか TextBox77 とか、言われても、こちらには、それが
どの時刻を表示するテキストボックスなのか分かりません。
そのユーザーフォームの コントロールの配置状況と、
テキストボックスとCommandButtonの関係を示してもらえれば、
もう少しは想像もできるかもしれませんが (-_-;


>もっともシンプルな方法を指導願います。

いずれにしても、テキストボックスに 時刻だけ表示してしまうと、
測定開始時と 測定終了時とで 日付が変更になっているとき、正しく
計算されません。「時刻」だけなので。
なので、
t1,t2,... t5,t6 のDate型の変数に 日付の情報付きで 「日時」を
覚えさせておく方法を提案したわけです。
  t1 = Now()
  〜
  t6 = Now()

そこら辺の配慮をくみ取っていただかないと、いつまでたっても、
堂々巡りですよ。

【56692】Re:時間表示についてお願いします。
お礼  マクロ  - 08/6/30(月) 18:51 -

引用なし
パスワード
   ▼kanabun さん:
>▼マクロ さん:
>>--------------------------------------------------------
>>TextBox76にTextBox77とTextBox78の累計時間を表示しようとしましたが
>>累計されず、TextBox77かTextBox78のどちらかの時間しか表示されません。
>
>TextBox76 とか TextBox77 とか、言われても、こちらには、それが
>どの時刻を表示するテキストボックスなのか分かりません。
>そのユーザーフォームの コントロールの配置状況と、
>テキストボックスとCommandButtonの関係を示してもらえれば、
>もう少しは想像もできるかもしれませんが (-_-;
>
>
>>もっともシンプルな方法を指導願います。
>
>いずれにしても、テキストボックスに 時刻だけ表示してしまうと、
>測定開始時と 測定終了時とで 日付が変更になっているとき、正しく
>計算されません。「時刻」だけなので。
>なので、
>t1,t2,... t5,t6 のDate型の変数に 日付の情報付きで 「日時」を
>覚えさせておく方法を提案したわけです。
>  t1 = Now()
>  〜
>  t6 = Now()
>
>そこら辺の配慮をくみ取っていただかないと、いつまでたっても、
>堂々巡りですよ。

仕事上、返信できなくてすいません。
土日で考えたのですが、構文は
『時間の集計について』(ExVBAかじりはじめ)フォーム上で時間の集計をしたいのですが、構文は以下の通りです。
-----------------------------------------------------------------------
Private Sub CommandButton46_Click() TextBox49 = Format$(Now(), "hh:nn") End Sub
-----------------------------------------------------------------------
Private Sub CommandButton47_Click() Dim t1 As Double Dim t2 As Double


 TextBox50.Text = Format$(Now(), "hh:nn")
 t1 = TimeValue(TextBox49.Text)
 t2 = TimeValue(TextBox50.Text)
 TextBox78.Text = Format$(t2 - t1, "hh:nn")

 TextBox76.Text = Format$(TextBox78 + TextBox77 + TextBox82, "hh:nn")
End Sub
-----------------------------------------------------------------------
Private Sub CommandButton48_Click() TextBox53 = Format$(Now(), "hh:nn") End Sub
-----------------------------------------------------------------------
Private Sub CommandButton49_Click()

Dim t3 As Double Dim t4 As Double


 TextBox54.Text = Format$(Now(), "hh:nn")
 t3 = TimeValue(TextBox53.Text)
 t4 = TimeValue(TextBox54.Text)
 TextBox77.Text = Format$(t4 - t3, "hh:nn")
 TextBox76.Text = Format$(TextBox78 + TextBox77 + TextBox82, "hh:nn")
End Sub
----------------------------------------------------------------------
のようになります。各CommandButtonは時間表示を

また各TextBoxは

TextBox49:開始時間 TextBox50:終了時間 TextBox78=50-49:小計時間

TextBox53:開始時間 TextBox54:終了時間 TextBox77=54-53:小計時間

TextBox76:累積時間(TextBox78+TextBox77)

以上の様になるのですが、小計時間は表示OKなのですが、累積時間(TextBox78+TextBox77)がうまく足されません。 TextBox76.Text = Format$(TextBox78 + TextBox77 + TextBox82, "hh:nn") のようにしてみましたが、うまく足されません。何回もすいませんが、お知恵をお願いいたします。

【56696】Re:時間表示についてお願いします。
発言  kanabun  - 08/6/30(月) 23:08 -

引用なし
パスワード
   ▼マクロ さん:
>累積時間(TextBox78+TextBox77)がうまく足されません。
>TextBox76.Text = Format$(TextBox78 + TextBox77 + TextBox82, "hh:nn")
>のようにしてみましたが、うまく足されません。

いくつか原因が考えられます。
といっても、これまでにレスしたことばかりで、繰り返しになりますが、

(1)TextBoxのText は、あくまでも文字列なので
  時刻ではありません。時間にするには、
> t1 = TimeValue(TextBox49.Text)
のように、文字列を数値に変換する必要があります。

(2)ボタンがクリックされたら、
>  TextBox49 = Format$(Now(), "hh:nn")
  のように、Now()関数で取り出した現在日時を
 「時刻だけ」TextBox に代入されていますが、
 これでは 1日を跨ぐラップタイムを計算できないわけだし、
 日時という数値を「hh:nn」型の「文字列」に変換して、
 またそれを「時刻」という数値に再変換して時間差を計算して
 いるので、回りくどいことをしています。

いまおやりになっていることを概念的にイメージで表すと
こんな感じです。↓

▼現行(うまくない)
 Button Click⇒ 文字列("hh:nn") →変数(時刻のみ)
---------------------------------------------------------
 【Button46】Now→ [TextBox49] → t1
 【Button47】Now→ [TextBox50] → t2
          [TextBox78] ← (t2 - t1)
  [TextBox76] ← TextBox78 + TextBox77 + TextBox82 ???

 【Button48】Now→ [TextBox53] → t3
 【Button49】Now→ [TextBox54] → t4
          [TextBox77] ← (t4- t3)
  [TextBox76] ← TextBox78 + TextBox77 + TextBox82 ???
---------------------------------------------------------

これを 先のレス 【56642】のように変更してください。
上と同じイメージで表すと、こんな感じです。
▼改善案
---------------------------------------------------------
 【Button46】Now → t1 → [TextBox49]
 【Button47】Now → t2 → [TextBox50]
         (t2 - t1) →[TextBox78]
  [TextBox76] ← (t2 - t1) + (t4 - t3) + (t6 - t5)

 【Button48】Now → t3 → [TextBox53]
 【Button49】Now → t4 → [TextBox54] 
          (t4- t3) → [TextBox77]
  [TextBox76] ← (t2 - t1) + (t4 - t3) + (t6 - t5)
---------------------------------------------------------
具体的なコードは【56642】に書いたとおりなので
(ボタン名やTextBox名を変えるだけです)

まず、プログラムの先頭で共有変数を用意しておいて、
Option Explicit
 Private t1 As Date
 Private t2 As Date
 Private t3 As Date
 Private t4 As Date
 Private t5 As Date
 Private t6 As Date

Private Sub UserForm_Initialize()
 '変数 t1〜t6 を初期化しておきます
 t1 = Now()
 t2 = t1
 t3 = t1
 t4 = t1
 t5 = t1
 t6 = t1
End Sub

CommandButton46 がClick されたとき、変数 t1に Now()時刻を、
CommandButton47 がClick されたとき、変数 t2に Now()時刻を
CommandButton48 がClick されたとき、変数 t3に Now()時刻を、
CommandButton49 がClick されたとき、変数 t4に Now()時刻を
CommandButton50 がClick されたとき、変数 t5に Now()時刻を、
CommandButton51 がClick されたとき、変数 t6に Now()時刻を
それぞれ格納しておいて、
TextBox76 のトータル時間の表示は これらt1〜t6変数の合計値
として算出表示するようにします。
>TextBox76.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "[h]:nn")

各CommandButtonがClickされたときの t1〜t6 変数への格納と、
TextBoxへの「時分hh:nn」表示部分は 先のレス 【56642】を参照
して、CommandButtonの番号とTextBoxの番号をそちらの環境に合わせ
修正してください。
Private Sub CommandButton46_Click()
 t1 = Now()
 TextBox49.Text = Format$(t1, "hh:nn")
End Sub

Private Sub CommandButton47_Click()
 t2 = Now()
 TextBox50.Text = Format$(t2, "hh:nn")
 TextBox78.Text = Format$(t2 - t1, "hh:nn")
 TextBox76.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "[h]:nn")
End Sub
以下同様、
といった感じです。

【56724】Re:時間表示についてお願いします。
質問  マクロ  - 08/7/2(水) 10:10 -

引用なし
パスワード
   ▼kanabun さん:
>▼マクロ さん:
>>累積時間(TextBox78+TextBox77)がうまく足されません。
>>TextBox76.Text = Format$(TextBox78 + TextBox77 + TextBox82, "hh:nn")
>>のようにしてみましたが、うまく足されません。
>
>いくつか原因が考えられます。
>といっても、これまでにレスしたことばかりで、繰り返しになりますが、
>
>(1)TextBoxのText は、あくまでも文字列なので
>  時刻ではありません。時間にするには、
>> t1 = TimeValue(TextBox49.Text)
> のように、文字列を数値に変換する必要があります。
>
>(2)ボタンがクリックされたら、
>>  TextBox49 = Format$(Now(), "hh:nn")
>  のように、Now()関数で取り出した現在日時を
> 「時刻だけ」TextBox に代入されていますが、
> これでは 1日を跨ぐラップタイムを計算できないわけだし、
> 日時という数値を「hh:nn」型の「文字列」に変換して、
> またそれを「時刻」という数値に再変換して時間差を計算して
> いるので、回りくどいことをしています。
>
>いまおやりになっていることを概念的にイメージで表すと
>こんな感じです。↓
>
>▼現行(うまくない)
> Button Click⇒ 文字列("hh:nn") →変数(時刻のみ)
>---------------------------------------------------------
> 【Button46】Now→ [TextBox49] → t1
> 【Button47】Now→ [TextBox50] → t2
>          [TextBox78] ← (t2 - t1)
>  [TextBox76] ← TextBox78 + TextBox77 + TextBox82 ???
>
> 【Button48】Now→ [TextBox53] → t3
> 【Button49】Now→ [TextBox54] → t4
>          [TextBox77] ← (t4- t3)
>  [TextBox76] ← TextBox78 + TextBox77 + TextBox82 ???
>---------------------------------------------------------
>
>これを 先のレス 【56642】のように変更してください。
>上と同じイメージで表すと、こんな感じです。
>▼改善案
>---------------------------------------------------------
> 【Button46】Now → t1 → [TextBox49]
> 【Button47】Now → t2 → [TextBox50]
>         (t2 - t1) →[TextBox78]
>  [TextBox76] ← (t2 - t1) + (t4 - t3) + (t6 - t5)
>
> 【Button48】Now → t3 → [TextBox53]
> 【Button49】Now → t4 → [TextBox54] 
>          (t4- t3) → [TextBox77]
>  [TextBox76] ← (t2 - t1) + (t4 - t3) + (t6 - t5)
>---------------------------------------------------------
>具体的なコードは【56642】に書いたとおりなので
>(ボタン名やTextBox名を変えるだけです)
>
>まず、プログラムの先頭で共有変数を用意しておいて、
>Option Explicit
> Private t1 As Date
> Private t2 As Date
> Private t3 As Date
> Private t4 As Date
> Private t5 As Date
> Private t6 As Date
>
>Private Sub UserForm_Initialize()
> '変数 t1〜t6 を初期化しておきます
> t1 = Now()
> t2 = t1
> t3 = t1
> t4 = t1
> t5 = t1
> t6 = t1
>End Sub
>
>CommandButton46 がClick されたとき、変数 t1に Now()時刻を、
>CommandButton47 がClick されたとき、変数 t2に Now()時刻を
>CommandButton48 がClick されたとき、変数 t3に Now()時刻を、
>CommandButton49 がClick されたとき、変数 t4に Now()時刻を
>CommandButton50 がClick されたとき、変数 t5に Now()時刻を、
>CommandButton51 がClick されたとき、変数 t6に Now()時刻を
>それぞれ格納しておいて、
>TextBox76 のトータル時間の表示は これらt1〜t6変数の合計値
>として算出表示するようにします。
>>TextBox76.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "[h]:nn")
>
>各CommandButtonがClickされたときの t1〜t6 変数への格納と、
>TextBoxへの「時分hh:nn」表示部分は 先のレス 【56642】を参照
>して、CommandButtonの番号とTextBoxの番号をそちらの環境に合わせ
>修正してください。
>Private Sub CommandButton46_Click()
> t1 = Now()
> TextBox49.Text = Format$(t1, "hh:nn")
>End Sub
>
>Private Sub CommandButton47_Click()
> t2 = Now()
> TextBox50.Text = Format$(t2, "hh:nn")
> TextBox78.Text = Format$(t2 - t1, "hh:nn")
> TextBox76.Text = Format$(t2 - t1 + t4 - t3 + t6 - t5, "[h]:nn")
>End Sub
>以下同様、
>といった感じです。

返事が遅くなりまして、すいませんでした。
無事に動くようになりました。質問ばかりですいませんが、
TextBox76が累計時間
TextBox78、TextBox77、TextBox82が小計時間になっていますが、
小計時間と累積時間をCommandButtonでワークシートに保存するようにしていますが、ここで、TextBox78、TextBox77には時間が入っていますが、
TextBox82には未入力時にワークシートに飛ばすと、00:00とワークシート上に表示されてしまいます。00:00と表示しないようにするには何か構文を足せばよいのでしょうか・・?次から次へ質問ばかりですいませんです。
よろしくお願いいたします。

【56729】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/2(水) 11:26 -

引用なし
パスワード
   ▼マクロ さん:
全文引用は無駄です。それよりも、あなたがいまどんなコードを書いているかを
提示してください。そちらのほうが、価値があります。

今現在、3つのグループの時間計測ボタンがあって、
1番目と2番目のCommandButton や TextBox の名前は分かっていますが、

> 【Button46】Now → t1 → [TextBox49]
> 【Button47】Now → t2 → [TextBox50]
>         (t2 - t1) →[TextBox78]
>  [TextBox76] ←(t2 - t1) + (t4 - t3) + (t6 - t5)
>
> 【Button48】Now → t3 → [TextBox53]
> 【Button49】Now → t4 → [TextBox54]
>          (t4- t3) → [TextBox77]
>  [TextBox76] ←(t2 - t1) + (t4 - t3) + (t6 - t5)

▼3番目のグループ
> TextBox76が累計時間
 TextBox76 に対応するCommandButtonの名前やTextBoxの名前について
情報がありません。
レスされるときは、そのような、こちらからは見えないUserFormのコントロール
の名前を、掲示板を読む人たちが分かるように配慮してください。

> TextBox82には未入力時にワークシートに飛ばすと、00:00とワークシート上
> に表示されてしまいます。00:00と表示しないようにするには何か構文を足
> せばよいのでしょうか・・?

If文で条件分岐してください

そのCommandButton_Click() イベントに
'----------------------------
 Dim ss As String
 'TextBox82 のテキストをチェック
 ss = TextBox82.Text
 If ss <> "00:00" Then Worksheets(2).Range("C12").Value = ss

と書くか、もうすこし、詳しく
'----------------------------
 Dim ss As String
 'TextBox82 のテキストをチェック
 ss = TextBox82.Text
 If IsDate(ss) Then
   If TimeValue(ss) > 0 Then
     Worksheets(2).Range("C13").Value = ss
   End If
 End If

のようにしておけばいいのではないですか?

その他の小計用のテキストボックスも同様です。
★ 転記先のワークシート名とセルは 修正してください。

【56733】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/2(水) 13:54 -

引用なし
パスワード
   ▼マクロ さん:
すぐ上の文章に、意味不明な部分があったので修正しときますね

> TextBox78、TextBox77、TextBox82が小計時間になっていますが、
ということでしたので、

▼3番目のグループ
 TextBox82 に対応するCommandButtonの名前やTextBoxの名前について
情報がありません。

【56734】Re:時間表示についてお願いします。
質問  VBAでメール  - 08/7/2(水) 13:57 -

引用なし
パスワード
   ▼kanabun さん:
すませんでした。
長い構文になりますが張りますのでよろしくお願いいたします。
TextBox76:累計時間(TextBox77+TextBox78+TextBox82)
TextBox50-49=TextBox78(小計時間)
TextBox54-53=TextBox77(小計時間)
TextBox57-56=TextBox82(小計時間)
TextBox70、71、72(DATE:日付)
TextBox52、55、58(コメント)
になります。
CommandButton36_Click()はワークシート(DATA)に飛ばす

構文は以下の通りです。
-------------------------------------------------------------
Private Sub CommandButton36_Click()
Dim lRow As Long

Number = TextBox3

With Worksheets("DATA")

'フォームからエクセルに出力

If TextBox76.Value = "" Then
lRow = .Range("J" & Rows.Count).End(xlUp).Row
    .Range("J" & lRow + 1).Value = lRow
Else
lRow = .Range("J" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("J1").Offset(Number, 0).Value = TextBox76.Value
End If

If TextBox70.Value = "" Then
lRow = .Range("M" & Rows.Count).End(xlUp).Row
    .Range("M" & lRow + 1).Value = lRow

Else
lRow = .Range("M" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("M1").Offset(Number, 0).Value = TextBox70.Value
End If

If TextBox49.Value = "" Then
lRow = .Range("N" & Rows.Count).End(xlUp).Row
    .Range("N" & lRow + 1).Value = lRow

Else
lRow = .Range("N" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("N1").Offset(Number, 0).Value = TextBox49.Value
End If

If TextBox50.Value = "" Then
lRow = .Range("O" & Rows.Count).End(xlUp).Row
    .Range("O" & lRow + 1).Value = lRow

Else
lRow = .Range("O" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("O1").Offset(Number, 0).Value = TextBox50.Value
End If

If TextBox52.Value = "" Then
lRow = .Range("P" & Rows.Count).End(xlUp).Row
    .Range("P" & lRow + 1).Value = lRow

Else
lRow = .Range("P" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("P1").Offset(Number, 0).Value = TextBox52.Value
End If

If TextBox78.Value = "" Then
lRow = .Range("Q" & Rows.Count).End(xlUp).Row
    .Range("Q" & lRow + 1).Value = lRow

Else
lRow = .Range("Q" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("Q1").Offset(Number, 0).Value = TextBox78.Value
End If

If TextBox71.Value = "" Then
lRow = .Range("R" & Rows.Count).End(xlUp).Row
    .Range("R" & lRow + 1).Value = lRow

Else
lRow = .Range("R" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("R1").Offset(Number, 0).Value = TextBox71.Value
End If

If TextBox53.Value = "" Then
lRow = .Range("S" & Rows.Count).End(xlUp).Row
    .Range("S" & lRow + 1).Value = lRow

Else
lRow = .Range("S" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("S1").Offset(Number, 0).Value = TextBox53.Value
End If

If TextBox54.Value = "" Then
lRow = .Range("T" & Rows.Count).End(xlUp).Row
    .Range("T" & lRow + 1).Value = lRow

Else
lRow = .Range("T" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("T1").Offset(Number, 0).Value = TextBox54.Value
End If

If TextBox55.Value = "" Then
lRow = .Range("U" & Rows.Count).End(xlUp).Row
    .Range("U" & lRow + 1).Value = lRow

Else
lRow = .Range("U" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("U1").Offset(Number, 0).Value = TextBox55.Value
End If

If TextBox57.Value = "" Then
lRow = .Range("U" & Rows.Count).End(xlUp).Row
    .Range("U" & lRow + 1).Value = lRow

Else
lRow = .Range("U" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("U1").Offset(Number, 0).Value = TextBox55.Value
End If
If TextBox77.Value = "" Then
lRow = .Range("V" & Rows.Count).End(xlUp).Row
    .Range("V" & lRow + 1).Value = lRow

Else
lRow = .Range("V" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("V1").Offset(Number, 0).Value = TextBox77.Value
End If

If TextBox72.Value = "" Then
lRow = .Range("W" & Rows.Count).End(xlUp).Row
    .Range("W" & lRow + 1).Value = lRow

Else
lRow = .Range("W" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("W1").Offset(Number, 0).Value = TextBox72.Value
End If

If TextBox56.Value = "" Then
lRow = .Range("X" & Rows.Count).End(xlUp).Row
    .Range("X" & lRow + 1).Value = lRow

Else
lRow = .Range("X" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("X1").Offset(Number, 0).Value = TextBox56.Value
End If


If TextBox58.Value = "" Then
lRow = .Range("Z" & Rows.Count).End(xlUp).Row
    .Range("Z" & lRow + 1).Value = lRow

Else
lRow = .Range("Z" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("Z1").Offset(Number, 0).Value = TextBox58.Value
End If

If TextBox82.Value = "" Then
lRow = .Range("AA" & Rows.Count).End(xlUp).Row
    .Range("AA" & lRow + 1).Value = lRow

Else
lRow = .Range("AA" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("AA1").Offset(Number, 0).Value = TextBox82.Value
End If

End With

End Sub
------------------------------------------------------------------------------------
ここで
TextBox(小計時間)
TextBox(DATE:日付)
TextBox(コメント)が未入力の場合にワークシートに00:00が飛んでしまいます。
未入力の場合の時にこの様な不要なデータが飛ばない様にするには構文をどの様に追加
すればよいでしょうか・・?

【56736】Re:時間表示についてお願いします。
回答  kanabun  - 08/7/2(水) 15:08 -

引用なし
パスワード
   ▼VBAでメール さん:

>ここで
>TextBox(小計時間)
>TextBox(DATE:日付)
>TextBox(コメント)が未入力の場合にワークシートに00:00が飛んでしまいます。
>未入力の場合の時にこの様な不要なデータが飛ばない様にするには構文をどの様に追加
>すればよいでしょうか・・?


時刻(時間)表示のすべてのテキストボックスに対して、

> If TextBox82.Value = "" Then

ではなく、
さきほど書いたような条件付き転記の文に直してください。

'----------------------------
 Dim ss As String
 'TextBox82 のテキストをチェック
 ss = TextBox82.Text
 If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
       lRow = .Range("AA" & Rows.Count).End(xlUp).Row
       .Range("AA" & lRow+1).Value = ss
     End With
   End If
 End If

【56775】Re:時間表示についてお願いします。
質問  VBAでメール  - 08/7/4(金) 10:16 -

引用なし
パスワード
   ▼kanabun さん:
なかなか仕事で打合せが多く返事できませんで申し訳ありません。
早速に書き直しました。
が実行させると、
”コンパイルエラー”
”同じ適用範囲内で重複してます”と絵アラー表示してしまいます。
どこが、違うのかご指摘お願いします。
構文は

Private Sub CommandButton36_Click()

Dim lRow As Long

Number = TextBox3

With Worksheets("DATA")

 Dim ss As String
 'TextBox71のテキストをチェック
 ss = TextBox71.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("R" & Rows.Count).End(xlUp).Row
       .Range("R" & lRow + 1).Value = ss
     End With
   End If

Dim ss As String
 'TextBox53 のテキストをチェック
 ss = TextBox53.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("S" & Rows.Count).End(xlUp).Row
       .Range("S" & lRow + 1).Value = ss
     End With
   End If
   
 Dim ss As String
 'TextBox54 のテキストをチェック
 ss = TextBox54.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("T" & Rows.Count).End(xlUp).Row
       .Range("T" & lRow + 1).Value = ss
     End With
   End If

 Dim ss As String
 'TextBox55 のテキストをチェック
 ss = TextBox55.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("U" & Rows.Count).End(xlUp).Row
       .Range("U" & lRow + 1).Value = ss
     End With
   End If


   End With

   End Sub

になります。よろしくお願いします。

【56776】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/4(金) 10:45 -

引用なし
パスワード
   ▼VBAでメール さん:

>なかなか仕事で打合せが多く返事できませんで申し訳ありません。
ぜんぜん気にしてません。

>”コンパイルエラー”
>”同じ適用範囲内で重複してます”と絵アラー表示してしまいます。

あぁ、なんども何度も、
> Dim ss As String
を宣言していますね?

変数は、プロシージャの先頭に
>Private Sub CommandButton36_Click()
 Dim ss As String
> Dim lRow As Long

のように一度だけ宣言しておけばいいですよ

【56777】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/4(金) 10:50 -

引用なし
パスワード
   あと、Ifに対応する End If がないですね?

 If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
       lRow = .Range("R" & Rows.Count).End(xlUp).Row
       .Range("R" & lRow + 1).Value = ss
     End With
   End If
 End If  '← ココ

【56781】Re:時間表示についてお願いします。
質問  VBAでメール  - 08/7/4(金) 14:32 -

引用なし
パスワード
   ▼kanabun さん:
毎回毎回すいません。
構文を修正してIfを追加したのですが
”コンパイルエラー”
”EndIfに対するIfブロックがありません”と表示されてしまいます。
修正後の構文は
Private Sub CommandButton36_Click()

Dim ss As String ←修正しました。

Dim lRow As Long

Number = TextBox3

With Worksheets("DATA")

 Dim ss As String
 'TextBox71のテキストをチェック
 ss = TextBox71.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("R" & Rows.Count).End(xlUp).Row
       .Range("R" & lRow + 1).Value = ss
     End With
   End If

Dim ss As String
 'TextBox53 のテキストをチェック
 ss = TextBox53.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("S" & Rows.Count).End(xlUp).Row
       .Range("S" & lRow + 1).Value = ss
     End With
   End If
   
 Dim ss As String
 'TextBox54 のテキストをチェック
 ss = TextBox54.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("T" & Rows.Count).End(xlUp).Row
       .Range("T" & lRow + 1).Value = ss
     End With
   End If

 Dim ss As String
 'TextBox55 のテキストをチェック
 ss = TextBox55.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("U" & Rows.Count).End(xlUp).Row
       .Range("U" & lRow + 1).Value = ss
   
       End With
   End If
   
 End If ←追加しました。
 
   End Sub

になります。よろしくお願いします。

【56782】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/4(金) 14:46 -

引用なし
パスワード
   ▼VBAでメール さん:
>構文を修正してIfを追加したのですが

>”コンパイルエラー”
>”EndIfに対するIfブロックがありません”と表示されてしまいます。

については、ひとつ前のぼくのレスを参照ください。

あと、使用する変数は最初に必ずデータ型を明示して宣言する
習慣をつけといたほうがいいですよ。

>Dim ss As String ←修正しました。
Dim Number As Long '← ここも
>Dim lRow As Long

【56784】Re:時間表示についてお願いします。
質問  VBAでメール  - 08/7/4(金) 15:16 -

引用なし
パスワード
   ▼VBAでメール さん:
毎回毎回すいません。
構文を修正してIfを追加したのですが,やはり同様なエラーが出てしまいます。
”コンパイルエラー”
”EndIfに対するIfブロックがありません”と表示されてしまいます。
修正後の構文は

Private Sub CommandButton36_Click()
Dim ss As String
Dim Number As Long
Number = TextBox3

With Worksheets("DATA")

 'TextBox81 のテキストをチェック
 ss = TextBox81.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("AP" & Rows.Count).End(xlUp).Row
       .Range("AP" & lRow + 1).Value = ss
     End With
   End If


 'TextBox51 のテキストをチェック
 ss = TextBox51.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("AQ" & Rows.Count).End(xlUp).Row
       .Range("AQ" & lRow + 1).Value = ss
   End With
   
   End If
   
   End If
   
   End Sub


になります。よろしくお願いします。

【56787】Re:時間表示についてお願いします。
発言  放置新聞  - 08/7/4(金) 15:40 -

引用なし
パスワード
   放置?

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=56728;id=excel

【56788】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/4(金) 15:48 -

引用なし
パスワード
   ▼VBAでメール さん:
インデントをきちんとつけて
 If ....... Then
   If ..... Then
   End If
 End If

のように、外側のIf に対応する End If のスタート位置と
内側の If に対応する End If のスタート位置 が同じ位置になるように
Tabキー、 Shift+TAB で編集します。
すると、
最初の With句 に対応する End With がないことが分かり、
一番最後に End With をつけると、こんどは
さいしょの If文に対応する End If が記述されていないことが分かります。


Private Sub CommandButton36_Click()
Dim lRow As Long
Dim ss As String
Dim Number As Long
Number = TextBox3.Text

With Worksheets("DATA")

 'TextBox81 のテキストをチェック
 ss = TextBox81.Text
 If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
       lRow = .Range("AP" & Rows.Count).End(xlUp).Row
       .Range("AP" & lRow + 1).Value = ss
     End With
   End If
 '▲ここに End If が必要

 'TextBox51 のテキストをチェック
 ss = TextBox51.Text
 If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
       lRow = .Range("AQ" & Rows.Count).End(xlUp).Row
       .Range("AQ" & lRow + 1).Value = ss
     End With
   End If
 End If
End With '◆ ← End With がない

End Sub

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
あといまさらですが、
 TextBox81
とか、
 TextBox51
と言われても、何のためのテキストボックスなのか、こちらにはサッパリわかりません。

> TextBox76: 累計時間 (TextBox77 + TextBox78 + TextBox82)
> TextBox50 -49 = TextBox78(小計時間)
> TextBox54 -53 = TextBox77(小計時間)
> TextBox57 -56 = TextBox82(小計時間)
>
> TextBox70、71、72(DATE:日付)
> TextBox52、55、58 (コメント)
> になります。
> CommandButton36_Click()はワークシート(DATA)に飛ばす

という情報は以前いただいてますが、このなかに、 TextBox81とか TextBox51
はありませんし。。。

あと、非常に重要なことですが、
日付を表示しているテキストボックスをチェックするときには、
TimeValue()>0 としても、意味ないですよ。

コメント(単なる文字列)を表示しているテキストボックスのばあいは
そもそも IsDate関数でチェックすることがまちがいです。
テキストボックスの表示内容に合ったIf文で チェックしてください。
文字列が書き込まれてるかどうかなら、
  If Len(TextBox100.Text) > 0 Then
    転記する
  End If
で十分でしょう。

【56810】Re:時間表示についてお願いします。
お礼  マクロ  - 08/7/6(日) 20:22 -

引用なし
パスワード
   ▼kanabun さん:
急遽、出張で先ほど帰社しました。
おかげで動くようになりました。
本当に長々とご指導ありがとうございました。
特に、
If ....... Then
   If ..... Then
   End If
 End If
を忘れていました・・・
また、何かありましたら、よろしくご指導お願いいたします。
これを契機に更に勉強したいと考えております。
本当にありがとうございました。

【56826】Re:時間表示についてお願いします。
質問  VBA勉強中です  - 08/7/7(月) 17:19 -

引用なし
パスワード
   ▼マクロ さん:
>▼kanabun さん:
何度も質問ばかりですいません。
ふと気づいてしまったのですが、未入力部分は空白になる事はOKなのですが、
入力していても、ワークシート”DATA"に飛んでないことに気づきました。
構文は、教えて頂いたとおりになりますが、何処を修正すればいいか困っています。
何度も申し訳ありませんがよろしくお願いいたします。

TextBox71=日付データ
TextBox53=時間データ
TextBox54=時間データ
TextBox55=文字データ
CommandButton36=データ保存ボタン
になります。

Private Sub CommandButton36_Click()
Dim ss As String
Dim Number As Long
Number = TextBox3

With Worksheets("DATA")

 'TextBox71のテキストをチェック
 ss = TextBox71.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("R" & Rows.Count).End(xlUp).Row
       .Range("R" & lRow + 1).Value = ss
     End With
   End If
End If

 'TextBox53 のテキストをチェック
 ss = TextBox53.Text
If IsDate(ss) Then      '時間データか?
   If TimeValue(ss) > 0 Then '有効な時間データか?
     With Worksheets("DATA")
    lRow = .Range("S" & Rows.Count).End(xlUp).Row
       .Range("S" & lRow + 1).Value = ss
     End With
   End If
End If

【56830】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/7(月) 18:16 -

引用なし
パスワード
   ▼VBA勉強中です さんまたは ▼マクロ さん:
> TextBox76: 累計時間 (TextBox77 + TextBox78 + TextBox82)
> TextBox50 -49 = TextBox78(小計時間)
> TextBox54 -53 = TextBox77(小計時間)
> TextBox57 -56 = TextBox82(小計時間)
>
> TextBox70、71、72(DATE:日付)
> TextBox52、55、58 (コメント)
> になります。
> CommandButton36_Click()はワークシート(DATA)に飛ばす

'----------- 以下のようにまとめてみました

・転記は 日付と時間と コメントの3種類ある。
・これらは 有効なデータかどうかのチェックの仕方を変えなければいけない。
・同じパターンで列番号がちがうものは、共通プロシージャを作っておいて
 そこを呼び出すようにする

Private Sub CommandButton36_Click()
  Dim lRow As Long
  Dim ss As String
  Dim Number As Long
  Number = TextBox3.Text
  
  Dateの転記 TextBox70, "AL" '<-- 正しい 転記先「列」名に修正してください
  Dateの転記 TextBox71, "AP"
  Dateの転記 TextBox72, "BA" '<-- 正しい 転記先「列」名に修正してください
  
  Timeの転記 TextBox49, "Q"  't1 正しい 転記先「列」名に修正してください
  Timeの転記 TextBox50, "R"  't2 正しい 転記先「列」名に修正してください
  Timeの転記 TextBox53, "S"  't3
  Timeの転記 TextBox54, "T"  't4 正しい 転記先「列」名に修正してください
  Timeの転記 TextBox56, "U"  't5 正しい 転記先「列」名に修正してください
  Timeの転記 TextBox57, "V"  't6 正しい 転記先「列」名に修正してください
  
  Commentの転記 TextBox52, "" '<-- 転記先列名を記入してください
  Commentの転記 TextBox55, "" '<-- 転記先列名を記入
  Commentの転記 TextBox58, "" '<-- 転記先列名を記入

End Sub

Private Sub Dateの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
 Dim ss As String
 ss = Tbox.Text
 If Len(ss) = 0 Then Exit Sub
 If IsDate(ss) Then      '有効な日付データか?
   Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
 End If
End Sub


Private Sub Timeの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
 Dim ss As String
 ss = Tbox.Text
 If Len(ss) = 0 Then Exit Sub
 If IsDate(ss) Then
   If TimeValue(ss) > 0 Then '時間データとして有効な場合、転記
     Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
   End If
 End If
End Sub
 
Private Sub Commentの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
 Dim ss As String
 ss = Tbox.Text
 If Len(ss) = 0 Then Exit Sub
 Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
End Sub

【56831】Re:時間表示についてお願いします。
お礼  VBA勉強中です  - 08/7/7(月) 18:47 -

引用なし
パスワード
   ▼kanabun さん:
>▼VBA勉強中です さんまたは ▼マクロ さん:
>> TextBox76: 累計時間 (TextBox77 + TextBox78 + TextBox82)
>> TextBox50 -49 = TextBox78(小計時間)
>> TextBox54 -53 = TextBox77(小計時間)
>> TextBox57 -56 = TextBox82(小計時間)
>>
>> TextBox70、71、72(DATE:日付)
>> TextBox52、55、58 (コメント)
>> になります。
>> CommandButton36_Click()はワークシート(DATA)に飛ばす
>
>'----------- 以下のようにまとめてみました
>
>・転記は 日付と時間と コメントの3種類ある。
>・これらは 有効なデータかどうかのチェックの仕方を変えなければいけない。
>・同じパターンで列番号がちがうものは、共通プロシージャを作っておいて
> そこを呼び出すようにする
>
>Private Sub CommandButton36_Click()
>  Dim lRow As Long
>  Dim ss As String
>  Dim Number As Long
>  Number = TextBox3.Text
>  
>  Dateの転記 TextBox70, "AL" '<-- 正しい 転記先「列」名に修正してください
>  Dateの転記 TextBox71, "AP"
>  Dateの転記 TextBox72, "BA" '<-- 正しい 転記先「列」名に修正してください
>  
>  Timeの転記 TextBox49, "Q"  't1 正しい 転記先「列」名に修正してください
>  Timeの転記 TextBox50, "R"  't2 正しい 転記先「列」名に修正してください
>  Timeの転記 TextBox53, "S"  't3
>  Timeの転記 TextBox54, "T"  't4 正しい 転記先「列」名に修正してください
>  Timeの転記 TextBox56, "U"  't5 正しい 転記先「列」名に修正してください
>  Timeの転記 TextBox57, "V"  't6 正しい 転記先「列」名に修正してください
>  
>  Commentの転記 TextBox52, "" '<-- 転記先列名を記入してください
>  Commentの転記 TextBox55, "" '<-- 転記先列名を記入
>  Commentの転記 TextBox58, "" '<-- 転記先列名を記入
>
>End Sub
>
>Private Sub Dateの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
> Dim ss As String
> ss = Tbox.Text
> If Len(ss) = 0 Then Exit Sub
> If IsDate(ss) Then      '有効な日付データか?
>   Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
> End If
>End Sub
>
>
>Private Sub Timeの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
> Dim ss As String
> ss = Tbox.Text
> If Len(ss) = 0 Then Exit Sub
> If IsDate(ss) Then
>   If TimeValue(ss) > 0 Then '時間データとして有効な場合、転記
>     Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
>   End If
> End If
>End Sub
> 
>Private Sub Commentの転記(ByVal Tbox As MSForms.TextBox, 列 As String)
> Dim ss As String
> ss = Tbox.Text
> If Len(ss) = 0 Then Exit Sub
> Worksheets("DATA").Cells(Row.Count, 列).End(xlUp).Offset(1).Value = ss
>End Sub

どうもありがとうございます。
ご指導のようにトライしてみます。
うまくいかない場合はすいませんが、質問させていただきますのでよろしくお願いいたします。

【56832】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/7(月) 18:52 -

引用なし
パスワード
   すみません。コードに間違いがありました。m(_ _)m

Sub Dateの転記()
Sub Timeの転記()
Sub Commentの転記()

それぞれの Row を Rows に修正してください

   Worksheets("DATA").Cells(Rows.Count, 列). _
    End(xlUp).Offset(1).Value = ss

【56898】Re:時間表示についてお願いします。
質問  マクロ  - 08/7/10(木) 10:15 -

引用なし
パスワード
   ▼kanabun さん:
>すみません。コードに間違いがありました。m(_ _)m
>
>Sub Dateの転記()
>Sub Timeの転記()
>Sub Commentの転記()
>
>それぞれの Row を Rows に修正してください
>
>   Worksheets("DATA").Cells(Rows.Count, 列). _
>    End(xlUp).Offset(1).Value = ss

どうもありがとうございます。
VBAの本で勉強していますが
また、質問で申し訳ありません。

同フォルダ内に別のエクセルファイル(データベース)を作成しこの別のエクセルファイルとデータの保存と呼出をするにはどうすればいいでしょうか?
別のエクセルファイル(データベース)はアクセスのデータベースにしなければまずいのでしょうか?
何度も何度も質問ばかりで申し訳ありません。ご指導お願いいたします。
-------------------------------------------------------------------
下記の構文の様に、CommandButton36でWorksheetsの"DATA"にデータを飛ばしています。
また、データを読み込んで上書き保存もしています。
ツールを複数で同時使用する時に別にデータベースを用意しなければ出来ない事に気づきました。
そこで同フォルダ内にエクセルファイル名データ1のデータシートを作成し
ここに、データ保存と呼び出しを実行したいと考えております。
どの様な構文を追加すれば良いでしょうか・・?
---------------------------------------------------
”Worksheetsの"DATA"にデータを飛ばし”
下記の構文はTextBox3のデータをCommandButton36によって
Worksheets("DATA")に飛ばしています。

Private Sub CommandButton36_Click()
Dim lRow As Long

Number = TextBox3

With Worksheets("DATA")

'フォームからエクセルに出力
If TextBox3.Value = "" Then

lRow = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A" & lRow + 1).Value = lRow

Else
lRow = .Range("A" & Rows.Count).End(xlUp).Row
    Worksheets("DATA").Range("A1").Offset(Number, 0).Value = TextBox3.Value
End If
-----------------------------------------------------            
”Worksheetsの"DATA"からデータを取得しListboxに表示させています”

Private Sub CommandButton37_Click()

Worksheets("DATA").Range("A1").CurrentRegion.Copy Worksheets("WAREA").Range("A1")

With ListBox1
.ColumnHeads = True
.ColumnCount = 10
.ColumnWidths = "30;80;55;60;60;60;65;45;45;"
'.Text = "DATA!A2:J100"
.RowSource = "WAREA!A2:J100"

End With
----------------------------------------------------------
以上になります。よろしくご指導お願いいたします。

【56912】Re:時間表示についてお願いします。
発言  kanabun  - 08/7/10(木) 14:40 -

引用なし
パスワード
   ▼マクロ さん:
>同フォルダ内に別のエクセルファイル(データベース)を作成しこの別のエクセルファイルとデータの保存と呼出をするにはどうすればいいでしょうか?
>別のエクセルファイル(データベース)はアクセスのデータベースにしなければまずいのでしょうか?

ひとつのBookを、複数の人が同時にOpenすることはできませんよね?
そういうばあいは、根本的に考え方を変えないといけないのでは?

Bookという形式をやめて、データベースにする。
データベースはサーバー内にあって、データベースアプリケーションによって
一元管理されている。
利用者はそこに接続する。
データを更新するときは、サーバーにUpdateを問い合わせる。
どの接続が優先するとか、テーブル間のデータ不整合などの処理はデータベース
アプリケーションに任せる。

【56922】Re:時間表示についてお願いします。
お礼  マクロ  - 08/7/10(木) 19:34 -

引用なし
パスワード
   ▼kanabun さん:
>▼マクロ さん:
>>同フォルダ内に別のエクセルファイル(データベース)を作成しこの別のエクセルファイルとデータの保存と呼出をするにはどうすればいいでしょうか?
>>別のエクセルファイル(データベース)はアクセスのデータベースにしなければまずいのでしょうか?
>
>ひとつのBookを、複数の人が同時にOpenすることはできませんよね?
>そういうばあいは、根本的に考え方を変えないといけないのでは?
>
>Bookという形式をやめて、データベースにする。
>データベースはサーバー内にあって、データベースアプリケーションによって
>一元管理されている。
>利用者はそこに接続する。
>データを更新するときは、サーバーにUpdateを問い合わせる。
>どの接続が優先するとか、テーブル間のデータ不整合などの処理はデータベース
>アプリケーションに任せる。

ご指摘ありがとうございます。
少し勉強してから再度質問させていただきます。よろしくお願いします。

4399 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free