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

ロケーションの管理表をVBAを使って作成したいのですが、毎度のことですがコードがわかりません教えてください。
以下のように考えています。

①登録
1.フォームに品目とロケーションを入力してボタンを押すと、品目の重複チェックをおこなう(メッセージ[OK]or[キャンセル])
2.[OK]⇒シートのA列とB列に入力した品目とロケーションが登録される。
3.[キャンセル]⇒終了
ただし、重複していても同じ品目で複数のロケーションという場合があるため、ユーザーの判断で登録は可能
(1のメッセージは、あくまで重複品目があるかどうかの情報を表示するだけと考えています)

②削除
1.フォームに品目とロケーションを入力してボタンを押すと、表に登録されている一致するデータが削除される

できるかどうかわかりませんが、例えば品目のみ入力してボタンをおすと、フォームに更に何か追加してロケーションのみの修正できれば…とも思いますが、考えつかないので上記①②のコードを教えて下さい。

何卒よろしくお願いします。

「ExcelVBAのコードを教えてください」の質問画像

A 回答 (1件)

こんな感じになると思います。


登録については、エラーチェックをするように書かれていたので、チェックしていますが、削除の方はノーチェックです。登録のコードを参考に、自力で実装してみて下さい。

Private Sub 削除_Click()
Dim c As Variant
Dim firstAddress As Variant
With Worksheets("Sheet1").Range("A:A")
Set c = .Find(削除_品目, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c.Offset(0, 1) = 削除_ロケ Then
c.EntireRow.Delete Shift:=xlUp
Exit Sub
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub

Private Sub 登録_Click()
Dim StoreRow As Long
If 登録_品目 = "" Or 登録_ロケ = "" Then
MsgBox "入力してください!!"
Exit Sub
End If
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Range("A:A"), 登録_品目, _
.Range("B:B"), 登録_ロケ) > 0 Then
MsgBox "重複しています!!"
Exit Sub
End If
If WorksheetFunction.CountIf(.Range("A:A"), 登録_品目) > 0 Then
If MsgBox("重複があります。登録しますか?", vbOKCancel) = vbCancel Then
Exit Sub
End If
End If
StoreRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(StoreRow, "A") = 登録_品目
.Cells(StoreRow, "B") = 登録_ロケ
End With
MsgBox "登録しました。"
End Sub
    • good
    • 1
この回答へのお礼

思い通りに動作しました。
勉強になります!ありがとうございました。

お礼日時:2016/05/30 19:41

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