|
こんばんわ。VBA初心者です。
いつも参考にさせて頂いております。
以下の様なマクロを作成しており、壁にぶち当たってしまいました。
皆様、どうか宜しくお願い致します。
A
----------
1 9:00
2 9:30
3
4 10:00
5
6
7 15:00
8
9 20:00
10
----------------------------
textbox1 CommandButton1
[ 時刻 ]
----------------------------
上記の様な表があり、フォームからデータを入力するという物です。
※表のデータはデフォルトで、変化しません。
※時刻は10分単位で、9:00〜23:00です。
1.textbox1に時刻を入力し、CommandButton1をクリックしてtextbox1のデータを
A列の空白のセルに入力させます。
2.textbox1に入力された時刻によって、入るセルを変化させたい。
(例)
"09:50"と入力した場合はA3へ。
"11:00"と入力した場合はA5へ。
"19:00"と入力した場合はA8へ。
"23:00"と入力した場合はA10へ。
という感じです。
但し、"9:20"等、セルの間に空白が無い時刻や、同じ時刻は、直下の空白セルへ記入させます。
悩んで、以下の様なお粗末なコードを作成しましたが、
ご覧の通り、膨大なIF文が出来上がってしまいました。。。
実際に作成しようとしている物は、もっと行が多いので、これじゃ使い物になりません。
textboxに入力された時刻を、A列の時刻を読み取って、その間の空白セルへ入力する。
というマクロを作成したいと思っています。
宜しくお願い致します。
Private Sub CommandButton1_Click()
'時刻確認
If IsDate(UserForm1.Controls("textbox1").Value) = True Then
UserForm1.Controls("textbox1").Value = Strings.Format(UserForm1.Controls("TextBox1"), "hh:mm")
Else
MsgBox "時刻を入力して下さい"
UserForm1.Controls("TextBox1").SetFocus
Exit Sub
End If
'---------------
Dim r As Integer, u As Integer, v As Integer, g As Integer
Dim atime As Date
atime = TimeValue(UserForm1.Controls("textbox1"))
If atime >= TimeValue("09:00:00") And atime < TimeValue("10:00:00") Then
For r = 1 To 4
If Cells(r, 1).Value = "" Then
Cells(r, 1).Value = UserForm1.Controls("TextBox1").Value
Exit For
End If
Next r
ElseIf atime >= TimeValue("10:00:00") And atime < TimeValue("15:00:00") Then
For u = 4 To 7
If Cells(u, 1).Value = "" Then
Cells(u, 1).Value = UserForm1.Controls("TextBox1").Value
Exit For
End If
Next u
ElseIf atime >= TimeValue("15:00:00") And atime < TimeValue("20:00:00") Then
For v = 7 To 9
If Cells(v, 1).Value = "" Then
Cells(v, 1).Value = UserForm1.Controls("TextBox1").Value
Exit For
End If
Next v
ElseIf atime >= TimeValue("20:00:00") And atime < TimeValue("23:00:00") Then
For g = 9 To 10
If Cells(g, 1).Value = "" Then
Cells(g, 1).Value = UserForm1.Controls("TextBox1").Value
Exit For
End If
Next g
End If
End Sub
|
|