|
こんにちは。
次のようなことをしたいです。
アクティヴシートのB列の(3行目以下の)n行をダブルクリックすると、自動的に同じブックのシートhistoryの空白行をみつけてCnm,Pnm,Mnm,Tnmが転記される。(1)
(1)は自力でできました。
↓↓↓
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Cnm As String
Dim Pnm As String
Dim Mnm As String
Dim Tnm As String
Dim ws1 As Worksheet
Dim i As Long
If Not Application.Intersect(Range("B3:B100"), Target) Is Nothing Then
With Target
Cnm = .Offset(, -1).Value
Pnm = .Offset(0, 0).Value
Mnm = .Offset(, 3).Value
Tnm = .Offset(, 5).Value
End With
Set ws1 = Worksheets("history")
For i = 5 To ws1.Range("B65535").End(xlDown).Row
If IsEmpty(ws1.Cells(i, 2).Value) Then
ws1.Cells(i, 2).Value = Cnm
ws1.Cells(i, 3).Value = Pnm
ws1.Cells(i, 4).Value = Mnm
ws1.Cells(i, 9).Value = Tnm
Exit For
End If
Next i
Cancel = True
End If
End Sub
ひきつづいて、以下のことをしたいです。(2)
フォームが表出され、そのフォームには以下を入力するようになっている。
Dateをyyyy/mm/ddで入力し、
Time(From)をhh:mm(15分単位)でプルダウンで選び、
Time(To)をhh:mm(15分単位)でプルダウンで選び、
Placeを任意の文字列で入力し、
Notesを任意の文字列で入力し、
enterを押す。
そのとき、
Dateはws1.Cells(i, 5).Valueに、
Time(From)はws1.Cells(i, 6).Valueに、
Time(To)はws1.Cells(i, 7).Valueに、
Hoursというのがws1.Cells(i, 8).Valueに、
Placeはws1.Cells(i, 10).Valueに、
Noteseはws1.Cells(i, 11).Valueに、
転記されるようにしたい。
転記と同時にフォームは画面から消したい。
Hoursは、たとえばTime(From)が09:15で、Time(To)が10:00なら、0.75としたい。
そしてsaveするとき、作業当日の日付けをシートhistoryのセルk3に書き込みたい。
以上ですが(2)がまったくできていません。
このような場合にユーザーフォームを使うのでしょうか。
また、Hoursの計算式が難しいです。
どなたかアドバイスよろしくおねがいします。
|
|