質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

VBA フォーム上で検索したデータを削除したい。。。関係ないデータが削除される

ahirumohiyokomo
ahirumohiyokomo

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1回答

0リアクション

0クリップ

169閲覧

投稿2020/09/04 04:05

前提・実現したいこと

在庫管理フォームの作成(1つのフォームでデータの登録、検索、削除)を行えるようにしたいです。
Sheet1にはA列=材質  B列=板厚 C列=縦寸法 D列=横寸法 のデータが入っています。

発生している問題・エラーメッセージ

削除ボタンを押したときにシート上ではリストボックスで選択したデータと違うデータが削除されてしまいます。
エラーメッセージはありません。

該当のソースコード

Private Sub Workbook_Open() UserForm2.Show End Sub Private Sub clrB_Click() ComboBox1.Value = "" TextBox1.Value = "" TextBox2.Value = "" TextBox3.Value = "" End Sub Private Sub delB_Click()  Worksheets("Sheet1").Select  Dim index As Integer index = UserForm2.ListBox1.ListIndex If index = -1 Then MsgBox "データが選択されていません " Else msg = MsgBox("    " & ComboBox1.Value & " " & TextBox1.Value & "t " & TextBox2.Value & "×" & TextBox3.Value & vbCrLf & vbCrLf & "  このデータを消去しますがよろしいですか?", Buttons:=vbYesNo) If msg = vbYes Then Rows(ListBox1.ListIndex + 2).Delete UserForm2.ListBox1.RemoveItem index 'リストボックスに表示されたデータを消去する ComboBox1.Value = "" TextBox1.Value = "" TextBox2.Value = "" TextBox3.Value = "" MsgBox "消去しました" Else MsgBox "中止しました" End If End If End Sub Private Sub ListBox1_Click() If TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 2) And TextBox3.Value = ListBox1.List(ListBox1.ListIndex, 3) Then delB.Enabled = True Else delB.Enabled = False End If End Sub Private Sub owari_Click() Unload UserForm2 Sheets(1).Select End Sub Private Sub touroku_Click() If ComboBox1.Value = "" Then MsgBox "材質を選択してください。" ComboBox1.SetFocus Exit Sub End If If TextBox1.Value = "" Then MsgBox "板厚を入力してください。" TextBox1.SetFocus Exit Sub End If If TextBox1.Value > 12 Then MsgBox "板厚の数値を見直してください。" Exit Sub End If If TextBox2.Value = "" Then MsgBox "端材寸法を入力してください。" TextBox2.SetFocus Exit Sub End If If TextBox3.Value = "" Then MsgBox "端材寸法を入力してください。" TextBox3.SetFocus Exit Sub End If msg = MsgBox("    " & ComboBox1.Value & " " & TextBox1.Value & "t " & TextBox2.Value & "×" & TextBox3.Value & vbCrLf & vbCrLf & "    端材を登録しますか?", Buttons:=vbYesNo) If msg = vbYes Then Me.Hide Sheet1.Select Range("A1").End(xlDown).Offset(1, 0).Select ActiveCell.Value = ComboBox1.Value ActiveCell.Offset(0, 1).Value = TextBox1.Value ActiveCell.Offset(0, 2).Value = TextBox2.Value ActiveCell.Offset(0, 3).Value = TextBox3.Value ComboBox1.Value = "" TextBox1.Value = "" TextBox2.Value = "" TextBox3.Value = "" ListBox1.Clear MsgBox "登録しました" Me.Show Else MsgBox "元の画面に戻ります" End If End Sub Private Sub UserForm_Initialize() With ComboBox1 .AddItem "SPHC" .AddItem "SPCC" .AddItem "ボンデ" .AddItem "SUS" .AddItem "SUS430" End With delB.Enabled = False End Sub Private Sub kensaku_Click() Dim maxRow As Long Dim myData As Variant Dim myData2() As Variant Dim i As Long, j As Long, cn As Long With Worksheets("Sheet1") maxRow = .Cells(Rows.Count, 1).End(xlUp).Row 'Worksheet(1)の最終行の取得 myData = .Range(.Cells(1, 1), .Cells(maxRow, 4)).Value 'データ格納 End With ReDim myData2(1 To maxRow, 1 To 4) For i = LBound(myData) To UBound(myData) If myData(i, 1) Like "*" & ComboBox1.Value & "*" And myData(i, 2) Like "*" & TextBox1.Value & "*" Then cn = cn + 1 myData2(cn, 1) = myData(i, 1) myData2(cn, 2) = myData(i, 2) myData2(cn, 3) = myData(i, 3) myData2(cn, 4) = myData(i, 4) End If Next i With ListBox1 .ColumnCount = 4 .ColumnWidths = "75;75;65;65" .List = myData2 End With End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ComboBox1.Text = ListBox1.List(ListBox1.ListIndex, 0) TextBox1.Text = ListBox1.List(ListBox1.ListIndex, 1) TextBox2.Text = ListBox1.List(ListBox1.ListIndex, 2) TextBox3.Text = ListBox1.List(ListBox1.ListIndex, 3) delB.Enabled = True End Sub Private Sub Usetform_Initialize() Dim maxRow As Long Dim myDate, myDate2() Dim i As Long, j As Long With Worksheets("Sheet1") maxRow = .Cells(Rows.Count, 1).End(xlUp).Row myDate = .Range(.Cells(1, 1), .Cells(maxRow, 4)).Value End With ReDim myDate2(1 To maxRow, 1 To 3) For i = LBound(myDate) To UBound(myDate) myDate2(i, 1) = myDate(i, 1) myDate2(i, 2) = myDate(i, 2) myDate2(i, 3) = myData(i, 3) myData2(i, 4) = myDate(i, 4) Next i With ListBox1 .ColumnCount = 4 .ColumnWidths = "75;75;65;65" .List = myData2 End With End Sub

試したこと

コードは色んなサイト様から引用して作りました。
お恥ずかしいですがコードの組み立て方など基本がほとんど理解できておりません。
エラーが出ないので何が違うのかわからず行き詰っております。
どうか、よろしくおねがいいたします。

補足情報(FW/ツールのバージョンなど)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2020/09/04 13:21

こちらの質問が他のユーザーから「過去の低評価」という指摘を受けました。

radames1000

2020/09/04 04:39

最後のUsetform_Initializeって何ですか? すでにUserform_Initializeはあるし。謎です。
meg_

2020/09/04 13:21

コードを1行ずつデバッグして原因を見つけてください。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。