dポイントプレゼントキャンペーン実施中!

Worksheets("顧客名")のA列に1から順に数値が入っています。
例えばTextShoyu1の値が5の時はA列に5が入った行を削除するために以下のように書きました。
イベントとしては思い通りになったのですが、ループ処理に非常に時間がかかります。
どこを修正すればスムーズな処理が出来るでしょうか?
よろしくお願いいたします。

Private Sub CommandButton1_Click()

Dim i As Long

For i = Range("A1").End(xlDown).Row To 2 Step -1
With Worksheets("顧客名").Cells(i, "A")

If _
.Value Like Me.TextShoyu1.Value Then

.EntireRow.Delete

End If

End With
Next i
End Sub

質問者からの補足コメント

  • こんばんは。ご回答ありがとうございます。

    myStr = Application.InputBox("削除する文字列を入力")でインプットボックスを表示させるのではなく、
    テキストボックスTextShoyu1の値を参照してCommandButton1クリックでイベントを行いたいです。

    よろしくお願いいたします。

      補足日時:2016/12/20 19:57
  • こんばんは。
    myStr = Application.InputBox("削除する文字列を入力")を
    myStr = Me.TextShoyu1.Value

    としたら全然別のところで該当するデータはありませんというMsgBoxが出たのでお聞きしました。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/12/20 20:47
  • UserForm1上のTextNumber_Changeとそれに付随するSpinButton1_SpinDown()、SpinUpと
    ComboKokyakumei_Changeでデータベースを呼び出してたんですが、
    どれも「該当するデータがありません」というMsgBoxが表示されます。

    myStr = Me.TextShoyu1.Value

    Me.TextShoyu1.ValueはTextNumberによっては数値が入っていたり空欄だったりします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2016/12/20 21:17
  • 詳しくはNo.4の方の補足に書きましたが
    UserForm上にデータを呼び出せなくなりました。
    CommandButton1_Clickする以前の処理が出来なくなりました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/12/20 21:21
  • 何度かファイルを閉じてやり直してみました。
    すると、先程のMsgBoxは表示されなくなり、UserForm上に今まで通りにデータも呼び出せましたが、

    例えばTextShoyu1に30という値が入ってる時にCommandButton1をクリックしてみましたが、
    ”顧客名”のA列に30が入っている行は削除されず、MsgBoxに該当データなしが表示されました。

      補足日時:2016/12/20 21:36
  • その2行を削除しました。
    MsgBoxは当然表示されなくなりましたが、
    行削除は出来ませんでした。

    No.7の回答に寄せられた補足コメントです。 補足日時:2016/12/20 21:46
  • A列に入るTextNumberもTextShoyu1もIMEModeは2-fmIMEModeOffにして半角入力にしています。
    "顧客名"シートを確認しても半角数字のみで全角数字も文字列もありませんでした。

    上記のmyStr = StrConv(Me.TextShoyu1, vbNarrow)でも結果は変わらずでした。

    お手間をおかけして申し訳ありません。

    No.8の回答に寄せられた補足コメントです。 補足日時:2016/12/20 22:32
  • こんにちは。
    =MATCH(検索数値,顧客名!A:A,0)で試してみました。
    ちゃんと行番号が返ってきました。
    Private Sub NyuryokuButton1_Click()以下にNo.2で教えていただいたコードを書き、
    myStr = Me.TextShoyu1.Valueを
    myStr = StrConv(Me.TextShoyu1, vbNarrow)に変更。

    Else
    MsgBox "該当データなし"を削除し、

    End If
    End With以下に下記のように書いています。

    Worksheets("買増確認一覧表").Rows(Me.TextShoyu1.Value * 2 + 2).Hidden = True
    Worksheets("データベース").Rows(Me.TextShoyu1.Value).Hidden = True
    End Sub

    No.9の回答に寄せられた補足コメントです。 補足日時:2016/12/21 13:12
  • またもやお世話になり、ありがとうございます。
    ちょっと諦め気味に当初のコードに戻していたところでした。

    A列には同じ数値は1つしか入らないので
    添付画像のとおり、いただいたコードでサクサク行きました。

    ちなみにですが、当初のコードに
    MsgBox ("実行時間(秒)=" & Second(etime - stime))を表示させるにはどこの部分に挿入すれば計測出来ますか?
    ちなみに体感的には10秒以上はかかっています。
    厚かましいお願いですが、ご教授いただけたら幸いです。

    「【エクセル】TextBoxの数値の入った」の補足画像9
    No.10の回答に寄せられた補足コメントです。 補足日時:2016/12/23 02:39
  • おはようございます。
    時間計測の手順とても参考になりました。
    ありがとうございます。

    ちなみに昨日と同じデータで計測してみたら最初のコードは12秒でした。

    「【エクセル】TextBoxの数値の入った」の補足画像10
    No.11の回答に寄せられた補足コメントです。 補足日時:2016/12/23 10:10

A 回答 (11件中11~11件)

ちょっとスマホなんで、コード載せたり検証は出来ませんけど、


とりあえずイコールよりライクの方が検索には時間かかります。
ちなみに何件くらい?

ExcelにはFindメソッドがあるので、おそらくそっちの方が高速です。組み込み系なんで。
ちょっと試してみて下さい。
    • good
    • 0

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