【可視セルのみの操作をしたい】 一度投稿したのですが、マクロをちゃんと書いていなかったりしてわかりにくかったので書き直します。
【可視セルのみの操作をしたい】 一度投稿したのですが、マクロをちゃんと書いていなかったりしてわかりにくかったので書き直します。 やりたいことはE列にbbnに格納された文字がないかを確認するようにさせたいです。 問題はbbnに格納される文字もbbnにあるため格納した文字がある列を非表示にして可視セルだけで探す必要があるということで、インターネットで調べてそれっぽく書いてみましたがちゃんと動かなかったので、何がおかしいのか知りたくて質問しました。 Sub ssa() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("機械部品") Dim bbn As Variant Dim b As Range Dim MR As Long With ws MR = Cells(Rows.Count, "E").End(xlUp).Row bbn = .Cells(i, "E").Value Rows(i).Hidden = True For Each b In Range(Cells(5, "E"), Cells(MR, "E")).SpecialCells(xlCellTypeVisible) If b.Value = bbn Then MsgBox "部番が重複しています。" & vbCrLf & "ヒント:同じ部品を同じ部番で再び購入の際は、部番の後にアルファベット(a~z)を付けて登録してください。", vbCritical GoTo L1 End If Next b L1: Rows(i).Hidden = False Exit Sub End Sub コマ送りで見た時の不具合・・・If b.Value = bbn Then のところで、 「E列5行目」から探してほしいのに、なぜか「E列9999行目」を最初に探そうとする。 For Each文なので繰り返し処理を行うのですが、次は「E列10000行目」かと思いきや「E列1行目」を探そうとします。それ以降は繰り返してもずっと「E列1行目」を探そうとします。 有識者の方わかることだけでもいいので教えてください。。
For Each b In Range(Cells(5, "E"), Cells(MR,"E")).SpecialCells(xlCellTypeVisible) のところで、自分的には「Eの5行目」から「Eの最終行」まで5行目から順に可視セルのみを探していくという意味で書いたのですが、そういう意味ではないんですか?
Visual Basic | Excel・50閲覧
ベストアンサー
i が変数宣言されていないだけでなく、値が入っていません。 それでいきなり bbn = .Cells(i, "E").Value つまり bbn = .Cells(Empty, "E").Valueのエラーですね。 あとEnd Withが無い、とか 全体として、1行だけ非表示にして何の得があるの? とか、どんな目的で1行非表示にするの?とか1行非表示でなに苦労しているの?とかが素朴な疑問です。
1人がナイス!しています
質問者からのお礼コメント
ありがとうございます。 勉強になります
お礼日時:5/25 16:22