
賞味期限の管理をエクセル管理でやってみようと思っています。
VBAを使ってユーザーフォームで3つの条件を登録し、シートのデータ表から一致するデータ行を削除しようと思っているのですが、やはり素人のためコードがわからず立ち往生しています。
お力を貸してください。
以下のような仕組みを考えています。
ユーザーフォーム:リストボックスから選択 ①”製品名”
テキストボックスで入力 ②”賞味期限”の日付(yyyy/mm/dd形式、表も
同じ形式で登録されています)
テキストボックスで入力 ③”数量”(整数以外に小数点以下の数字もあり)
を入力。
コマンドボタンを押すと、シートのデータ表から①~③すべて一致するデータが1行ごとに削除される。(表に該当するデータがない場合は不一致のメッセージ表示もしたいです)
※データ表には重複するデータが多数存在していますが、削除はあくまでボタン押下1回につき1行のデータ削除となります。
ひとつ、これはあってもなくてもいいのですが、実行前に確認メッセージでワンクッションおいてからの削除にしたいです。(例えば”処理してよろしいですか?『YES』or『No』”⇒『YES』⇒削除)
何卒お力添えをよろしくお願いします。


No.2ベストアンサー
- 回答日時:
下のurlからダウンロードして下さい。
チャント動くエクセルがzip内に入っています。
エクセルを開いてvbaを取り出すか、そのまま使って下さい。
(変なものは入っていません。ご安心下さい)
http://www.tfumi01.com/test/test.html

No.3
- 回答日時:
No.2 補足です。
フォームの製品名には事前に内容をセットしておく必要があります。
Private Sub UserForm_Initialize()
ListBox1.AddItem "りんご"
ListBox1.AddItem "みかん"
ListBox1.AddItem "すいか"
ListBox1.AddItem "梨"
ListBox1.AddItem "柿"
End Sub
でセットしていますので、このPrivate Subに追加セットして下さい。
No.1
- 回答日時:
私も素人です。
>データ表には重複するデータが多数存在していますが、削除はあくまでボタン押下1回につき1行のデータ削除となります。
同じような質問は、以前にも出ていた気がします。
オートフィルタやテーブルを使った方法がわかりやすいような気がしますが、Findメソッドも健在です。一番、簡単な方法は、やはりループで一行ずつ舐めていく方法ですが、それは、あまり、効率が良くありません。
'サブプロシージャに飛びます
' Call FindRow(listItem, txtBx1, txtBx2, Rng))
'//
Private Sub CommandButton1_Click()
Dim listItem As String
Dim txtBx1 As String
Dim txtBx2 As String
Dim Rng As Range
With ActiveSheet
'データ範囲の設定 左上端とその範囲
Set Rng = .Range("B3", .Cells(Rows.Count, "B").End(xlUp).Resize(, 4))
End With
Rng.Select
listItem = Me.ListBox1.Text
txtBx1 = Trim(Me.TextBox1.Text)
If Not IsDate(txtBx1) Then MsgBox "日付値を入れてください (yyyy/mm/dd)": Exit Sub
txtBx2 = Trim(Me.TextBox2.Text)
If listItem <> "" And txtBx1 <> "" And txtBx2 <> "" Then
If Not IsNumeric(txtBx2) Then MsgBox "数値を入れてください": Exit Sub
Call FindRow(listItem, txtBx1, txtBx2, Rng)
Else
MsgBox "3つの条件が正しく選択・入力されていません", vbCritical
End If
End Sub
Sub FindRow(arg1, arg2, arg3, Rng As Range)
Dim c As Range
Dim Target As Range
Dim FirstAddress As String
Set Target = Nothing
With Rng
.Cells(1, 1).Select '検索の最初の場所
Set c = .Columns(2).Find( _
What:=arg1, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
MatchByte:=False)
If Not c Is Nothing Then
FirstAddress = c.Address
If c.Offset(, 1).Value = CDate(arg2) Then
If c.Offset(, 2).Value = CDate(arg3) Then
Set Target = c.Rows
GoTo FinalLine
End If
End If
Do
Set c = .FindNext(c)
If c.Address = FirstAddress Then GoTo FinalLine
If c.Offset(, 1).Value = CDate(arg2) Then
If c.Offset(, 2).Value = CDate(arg3) Then
Set Target = c.Rows
Exit Do
End If
End If
Loop Until c Is Nothing
End If
End With
FinalLine:
If Not Target Is Nothing Then
Target.Select
If MsgBox("削除してよろしいですか?", vbQuestion + vbYesNo) = vbYes Then
Application.ScreenUpdating = False
Target.EntireRow.Delete
Application.ScreenUpdating = True
End If
Else
MsgBox "該当する行は見つかりませんでした。", vbCritical
End If
Set Target = Nothing
End Sub
動きは思っていたとおりでした。
ただ数量の値が小数点以下のデータの場合、検索ができませんでした。
修正しようも、自分のレベルでは難しいです。
でも勉強になりました。回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA リストボックス(複数条件)で検索し、転記方法についてご教示ください。
Visual Basic(VBA)
-
Excelにて、ユーザーフォームで、日付けの範囲を指定し、検索しデーターを抽出し 別シートへ転記した
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
5
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
6
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
7
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
8
検索結果をListviewさせる方法
Visual Basic(VBA)
-
9
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
10
エクセルで検索結果をユーザーフォームに表示したいのですが
Excel(エクセル)
-
11
(Excel+VBA)ユーザーフォームのみ表示で完結させたい。
Excel(エクセル)
-
12
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
13
入力済み、選択したセルに連動した行のデータをユーザーフォームで呼び出すには
Excel(エクセル)
-
14
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
15
VBAで指定期間の範囲を抽出し、リストボックスに表示したいです。
Visual Basic(VBA)
-
16
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
-
17
excel VBA ユーザーフォームを消すとTextBoxから反映させたセルの値も戻ってしまう
Excel(エクセル)
-
18
抽出したデータを修正して元のセルに上書きしたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
テキストデータのPDFをWordで開...
-
【エクセル】区切り文字が含ま...
-
差し込み印刷で文字列が「0」と...
-
エクセルでプルダウン選択され...
-
EXCELシートに画像がさわれない。
-
膨大なデーターの変更点のみ抽...
-
エクセルの関数で範囲のある数...
-
PDF からの 数値データ抽出
-
SUMIFS関数の計算結果が違います
-
Excel VBA オートフィルタ後、置換
-
Excelデータに自動でリンクが張...
-
【マクロ】転記ツール。転記先...
-
オブジェクトブラウザでデータ...
-
エクセルのマクロで他のシステ...
-
VBAで複数のExcelを1つのExcel...
-
オートフィルタをフォーム上(V...
-
wordデータを、excelに自動で入...
-
顧客管理の簡易化について。 仕...
-
セル内改行ありExcelレコードを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
【エクセル】区切り文字が含ま...
-
差し込み印刷で文字列が「0」と...
-
エクセルの関数で範囲のある数...
-
テキストデータのPDFをWordで開...
-
DBで改行が入っているデータをE...
-
SUMIFS関数の計算結果が違います
-
オブジェクトブラウザでデータ...
-
マクロ 行挿入で数式も反映す...
-
wordデータを、excelに自動で入...
-
エクセルでプルダウン選択され...
-
エクセルで時間の合計ができません
-
エクセルで列にあるユニークな...
-
膨大なデーターの変更点のみ抽...
-
エクセルで「データ」の「区切...
-
エクセルのマクロで他のシステ...
-
COUNTIFS関数で日付データを数...
-
エクセルにおいて、数値が入っ...
-
差し込み印刷で、生年月日を昭...
-
斜めの貼り付け
おすすめ情報