プロが教えるわが家の防犯対策術!

VBA素人です。教えてください。
添付シートのようなデータがあるとします。
ユーザーフォームにテキストボックスを作成し、
(1)シート内の型式を型式BOXに手入力で入れる
(2)良品数を手入力で入れる
(3)日付を手入力で入れる(初期設定はDateをかえす)
(1)~(3)を入力し、入力コマンドボタンで型式と日付がFINDするセルに
良品数を入れるコードを下記作成しました。
シート内に対象の型式、日付があれば、うまく作動するのですが、
型式、日付両方が無い場合、もしくはどちらか片方が無い場合は、
うまく作動しません。
おそらく型式FIND~IF、日付FIND~IFの使い方が悪いと思います。
型式がシート内に無ければ、型式エラーとしマクロを抜ける。
型式があり、日付が無ければ、日付エラーでマクロを抜けるコードを教えてください。
なお、型式を手入力で入れていますが、シート内の("B:B")セルを選択すると自動で型式テキストボックスに入れる方法もご教示下さい。

Private Sub UserForm_Initialize()

型式BOX = ""'テキストボックス
良品BOX = ""'テキストボックス
日付BOX = Date'テキストボックス
型式BOX.SetFocus

End Sub

Private Sub 入力_Click()

Application.ScreenUpdating = False
Application.EnableEvents = False

If Len(型式BOX.Value) = 0 Then
MsgBox "型式が未選定です"
Cancel = True

ElseIf Len(良品BOX.Value) = 0 Then
MsgBox "良品が未入力です"
Cancel = True

ElseIf Len(日付BOX.Value) = 0 Then
MsgBox "日付が未入力です"
Cancel = True

Else

Dim a As Variant
a = 型式BOX.Value
Dim b As Date
b = 日付BOX.Value

On Error Resume Next
Columns("B:B").Select
ActiveSheet.Cells.Find(a, , , xlWhole, xlByRows, xlNext, False).Select
X = ActiveCell.Row

If Err = 91 Then
MsgBox (prompt) & a & "の型式はありません", _
(vbOKOnly + vbExclamation), ("型式検索結果")

Err.Clear

End If

On Error Resume Next
Rows("1:1").Select
ActiveSheet.Cells.Find(b, , , xlWhole, xlByColumns, xlNext, False).Select
Y = ActiveCell.Column

If Err = 91 Then
MsgBox (prompt) & b & "の日付はありません", _
(vbOKOnly + vbExclamation), ("日付検索結果")

Err.Clear

  End If

Cells(X, Y) = 良品BOX.Value

End If

End Sub

「VBA FIND時のIFの使い方について」の質問画像

A 回答 (2件)

検証はしてませんが、こんな感じで



Private Sub 入力_Click()
Application.ScreenUpdating = False
'Application.EnableEvents = False
If 型式BOX.Value = "" Then MsgBox "型式が未選定です": Exit Sub
If 良品BOX.Value = "" Then MsgBox "良品が未入力です": Exit Sub
If 日付BOX.Value = "" Then MsgBox "日付が未入力です": Exit Sub
On Error Resume Next
x = ActiveSheet.Columns("B:B").Find(型式BOX.Value, , , xlWhole, xlByRows, xlNext, False).Row
If x = "" Then
MsgBox (prompt) & 型式BOX.Value & "の型式はありません", _
(vbOKOnly + vbExclamation), ("型式検索結果")
Exit Sub
End If
y = ActiveSheet.Rows("1:1").Find(CDate(日付BOX.Value), , , xlWhole, xlByColumns, xlNext, False).Column
If y = "" Then
MsgBox (prompt) & 日付BOX.Value & "の日付はありません", _
(vbOKOnly + vbExclamation), ("日付検索結果")
Exit Sub
End If
ActiveSheet.Cells(x, y) = 良品BOX.Value
End Sub

参考まで

この回答への補足

遅くなりました。
うまく動作しそうです。

なお、現在型式を手入力で入れていますが、
シート内の("B:B")セルを選択すると
自動で型式テキストボックスに入れる方法もご教示下さい。

よろしくお願いいたします。

補足日時:2010/02/03 22:27
    • good
    • 0

>なお、現在型式を手入力で入れていますが、


>シート内の("B:B")セルを選択すると
>自動で型式テキストボックスに入れる方法もご教示下さい。
excel97の使用を考えているのならば
excel97はモードレスに対応していないので、以下の方法しかないよ

userformを表示する前にセルを選択しておいたものを
表示時にtextboxへ入力する
'userformモジュールへ
Private Sub UserForm_Initialize()
If ActiveCell.Column = 2 Then
型式BOX = ActiveCell.Value 'テキストボックス
Else
型式BOX = "" 'テキストボックス
End If
良品BOX = "" 'テキストボックス
日付BOX = Date 'テキストボックス
型式BOX.SetFocus
End Sub

以上
参考まで
    • good
    • 0

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