賞味期限の管理をエクセル管理でやってみようと思っています。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- Google Drive Googleスプレッドシートについて質問です。 今作っているデータで、 シート1→ベタ打ちでひたすら 2 2022/05/18 14:27
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
VBA リストボックス(複数条件)で検索し、転記方法についてご教示ください。
Visual Basic(VBA)
-
ユーザーフォーム内のテキストボックスからオートフィルター抽出を行う方法
Visual Basic(VBA)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
8
エクセルVBA「リストボックスで選択した値をテキストボックスで変更してシート上セルに反映したい」
Excel(エクセル)
-
9
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
10
VBA コンボボックスとテキストボックスを連結させたい
Visual Basic(VBA)
-
11
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
12
VBA。リストボックスの値を別のユーザーフォームのテキストボックスに反映したい。
Access(アクセス)
-
13
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
14
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
15
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
16
リストボックスをクリックすると、他フォームに値代入
Excel(エクセル)
-
17
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
18
【VBA】入力フォームを使った、フィルタについて
Visual Basic(VBA)
-
19
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
20
VBA別シートの最終行の下行へ貼り付けされるようにしたいです。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
DBで改行が入っているデータをE...
-
SUMIFS関数の計算結果が違います
-
COUNTIFS関数で日付データを数...
-
エクセルの関数で範囲のある数...
-
【エクセル】区切り文字が含ま...
-
エクセルで列にあるユニークな...
-
エクセルにおいて、数値が入っ...
-
テキストデータのPDFをWordで開...
-
WORD97/2000とXPの互換性
-
EXCEL2003 で リンク貼付 ...
-
Excelに詳しい方、教えていただ...
-
エクセルで時間の合計ができません
-
セル内改行ありExcelレコードを...
-
PDF からの 数値データ抽出
-
Access上のデータをExcelのハイ...
-
別シートのエクセルデータを比...
-
エクセルの1行目を固定したい...
-
エクセルの大量のデータの行を...
-
エクセルで、数字の文字数を揃...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
【エクセル】区切り文字が含ま...
-
エクセルの関数で範囲のある数...
-
差し込み印刷で文字列が「0」と...
-
エクセルで列にあるユニークな...
-
COUNTIFS関数で日付データを数...
-
SUMIFS関数の計算結果が違います
-
テキストデータのPDFをWordで開...
-
オブジェクトブラウザでデータ...
-
0:00をカウントしない方法
-
エクセルのマクロで他のシステ...
-
エクセル 貼り付け時の文字化け
-
エクセルで時間の合計ができません
-
エクセルでプルダウン選択され...
-
斜めの貼り付け
-
wordデータを、excelに自動で入...
-
エクセルにおいて、数値が入っ...
-
膨大なデーターの変更点のみ抽...
-
DBで改行が入っているデータをE...
-
エクセルで「データ」の「区切...
おすすめ情報