電子書籍の厳選無料作品が豊富!

エクセルVBA初心者です。
Sheet1に売上データが記載されているものがあります。
セルB列(B3から下、B1,B2は項目があります)に伝票番号が記載されており、UserForm1のTextBox1に削除したい伝票番号を入れ、CommandButton1をクリックすると削除されるようにしています。
2点、追加したい事があるのですが、どのような構文になるのか色々を試しているのですが、全くうまくいきません。
1.番号が存在しなかった場合に「該当の伝票番号がありません」とメッセージを出したい。
2.CommandButton1をクリックすると「Yes,No」が表示され、「Yes」は削除、「No」は、Unloadとしたい。
です。

現在の構文です。
Private Sub CommandButton1_Click()
Dim i As Long, x As Long
Dim 番号 As Long

If UserFrom1.TextBox1.Text = "" Then
MsgBox "伝票番号を入力してください。"
Exit Sub
End If

With Sheets("Sheet1")
x = .Cells(Rows.Count, "B").End(xlUp).Row
番号 = UserForm1.TextBox1.Text

For i = x To 3 Step -1
If Cells(i, 2) = 番号 Then
Cells(i, 2).EntireRow.Delete
TextBox1.Text = ""
End If
Next i
End With
End Sub

どうぞ宜しくお願い致します。

A 回答 (3件)

以下のようにしてください。


追加、修正を行った箇所は、追加、修正のコメントを入れています。
-------------------------------------------------------
Private Sub CommandButton1_Click()
Dim i As Long, x As Long
Dim 番号 As Long
Dim ans As Long '追加
ans = MsgBox("削除を行いますか", vbYesNo) '追加
If ans = vbNo Then '追加
Unload Me '追加
Exit Sub '追加
End If '追加
If UserForm1.TextBox1.Text = "" Then '修正 UserFrom1-->UserForm1
MsgBox "伝票番号を入力してください。"
Exit Sub
End If

With Sheets("Sheet1")
x = .Cells(Rows.Count, "B").End(xlUp).Row
番号 = UserForm1.TextBox1.Text

For i = x To 3 Step -1
If Cells(i, 2) = 番号 Then
Cells(i, 2).EntireRow.Delete
TextBox1.Text = ""
Exit Sub '追加
End If
Next i
End With
MsgBox ("該当の伝票番号がありません") '追加
End Sub
---------------------------------
    • good
    • 1
この回答へのお礼

思っていた通りの動作をしてくれました^^
有難う御座いましたm(_ _)m

お礼日時:2016/12/19 16:57

こんにちは。



オーソドックスな方法や、関数を使った方法など、人により得意不得意にもより、いろんな方法があります。今回は、そのままにしましたが、Find メソッドや、MATCH関数などを使った方法などもあります。

ご質問者さんは、正統派で、もうその辺りはマスターされているようです。ただ、ExcelのVBAの面白さは、そのコードのイレギュラーな部分にあります。そういうことは、掲示板だけでしか覚えられないことです。

ところどころ、.Cells と「.(コンマ)」が抜けていますから、それは修正しました。ただ、この場合には、必要不可欠というものではありませんが。

'//
Private Sub CommandButton1_Click()
 Dim i As Long
 Dim x As Long
 Dim 番号 As Long
 
 If Me.TextBox1.Text = "" Then
  MsgBox "伝票番号を入力してください。"
  Exit Sub
 End If
 
 With Sheets("Sheet1")
  x = .Cells(Rows.Count, "B").End(xlUp).Row
  番号 = Me.TextBox1.Text
  
  For i = x To 3 Step -1
   If .Cells(i, 2) = 番号 Then
    If MsgBox("実行しますか、やめますか? Y=削除, N=中止", vbYesNo) = vbYes Then
     .Cells(i, 2).EntireRow.Delete
     Me.TextBox1.Text = ""
    Else
     Unload Me
     Exit Sub
    End If
   End If
  Next i
  If i < 3 Then
   MsgBox 番号 & "は見つかりませんでした", vbExclamation
   Me.TextBox1.Text = ""
  End If
 End With
End Sub


Me というのは、「ミー」と呼び、そのモジュールの親オブジェクトのことを指します。したがって、ここでは、UserForm1 のことです。
なお、#1さんと質問の解釈に違いがあるようです。
    • good
    • 0
この回答へのお礼

本で勉強しながらなので、逆にイレギュラーな事が出来なくて、大変勉強になりました!
有難う御座いました!m(_ _)m

お礼日時:2016/12/19 17:00

こんなのはいかがでしょうか?


-----------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim 行 As Long
Dim 終 As Long
Dim 番号 As Long
Dim 有 As Boolean
If MsgBox("削除しますか?" & Chr(13) & "(「いいえ」で終了)", vbYesNo) = vbNo Then
Unload Me
Exit Sub
End If
If TextBox1.Text = "" Then
MsgBox "伝票番号を入力してください。"
Exit Sub
End If
With Sheets("Sheet1")
終 = .Cells(Rows.Count, "B").End(xlUp).Row
番号 = TextBox1.Text
For 行 = 終 To 3 Step -1
If Cells(行, 2) = 番号 Then
Cells(行, 2).EntireRow.Delete
有 = True
End If
Next 行
TextBox1.Text = ""
TextBox1.SetFocus
End With
If 有 = False Then MsgBox ("該当の伝票番号がありません")
End Sub
-----------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

こういったやり方もあるんですね!
勉強になりました。
有難う御座ました!

お礼日時:2016/12/19 16:59

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