• 締切済み

エクセル VBA

Dim h As Range If Application.CountIf(Range("p:p"), 5) = 0 Then Exit Sub Set h = Range("p:p").Find(what:=5, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) Range(Range("p2"), h).EntireRow.Delete Shift:=xlShiftUp 上記のマクロは、「2行目から、P列の数値が5の最下の行までを削除する」という内容です。 この5の部分を、<0(0未満)に変えたいのですがわかりません。 どうぞ教えてください。

  • 4rd
  • お礼率40% (15/37)

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

あらごめんなさい、誤記てますね。 for r = range("P65536").end(xlup).row to 2 step -1 です。どうも失礼しました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ゼロ未満の一体幾つの数字が該当なのか判らないので、当然今のFindを使ったやり方じゃ出来ません。 別の手立てを考えましょう。 たとえば簡単に思いつく方法としては、下から順繰り調べていくようなのでもいいですよね。 dim r as long if application.countif(range("P:P"), "<0") = 0 then exit sub for r = range("P65536").end(xup).row to 2 step -1 if cells(r, "P").value < 0 then exit for next r range("P2:P" & r).entirerow.delete shift:=xlshiftup 他にもたとえばオートフィルタを使ってみたり、別列に数式を並べてFindできるシルシを計算で表示させたりとか。 あなたが「ご自分の手でエクセルを動かして」それをしたかったとき、ご自分ならどうするか、考えながらそれをマクロにコーディングしてみるのも良い練習方法です。

4rd
質問者

補足

どうもありがとうございます。 それを実行すると、 エラー1004が表示されて、デバッグを選ぶと For r = Range("P65536").End(xup).Row To 2 Step -1 の部分が黄色く表示されてます。 何がいけないのか、もしご存知でしたらどうぞ教えてください。 よろしくお願いします。

関連するQ&A

  • マクロ FIND どちらか先にHitする方を選択

    いつも回答して頂き、ありがとうございます。 検索する対象が2種類以上あり、先にHitする方を選択したいのですが、どうすればよいのでしょうか?宜しくお願い致します。 If Application.CountIf(ws2.Columns(c1), "〇") > 0 Or _ Application.CountIf(Columns(c1), "×") > 0 Then Set 履歴1 = ws2.Columns(c1).Find(what:="〇", LookIn:=xlValues, _ lookat:=xlWhole, searchorder:=xlByRows, _ searchdirection:=xlPrevious) r1 = 履歴1.Row

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • エクセルVBAにて、特定文字の前に行を追加したい

    こんにちは。 エクセルVBAにて、特定文字が含まれる行の前に空白の行を挿入するマクロはどのように書けばいいでしょうか。 そして、特定文字が連続して入力されている場合、連続した文字の個数と同じ行数を、連続した最初の文字の前に挿入したいと思っています。 特定文字=ラーメン 1行目 うどん 2行目 ラーメン(この上に3行挿入) 3行目 ラーメン 4行目 ラーメン 5行目 うどん 6行目 うどん 7行目 ラーメン(この上に1行挿入) 8行目 うどん 9行目 ラーメン(この上に2行挿入) 10行目 ラーメン 11行目 うどん 下記のようなコードを検索結果を参考に作成しましたが、これだとラーメンの上にすぐ空白の行が挿入されてしまい、連続した最初の特定文字の上にまとめて挿入する事ができません。 Sub Test() Dim a As Range Dim j As Long, k As Long j = WorksheetFunction.CountIf(Columns(3), "ラーメン") Set a = Range("C1") Do Set a = Columns(3).Find(What:="ラーメン" _ , After:=a _ , LookIn:=xlValues _ , LookAt:=xlWhole _ , SearchDirection:=xlPrevious) If Not a Is Nothing Then k = k + 1 a.EntireRow.Insert End If Loop While k < j End Sub どうすればいいかご教授お願いいたします。

  • どうして、VBA動作後に固まるのですか?

    Windows XP Home Edition Excel 2002 変更前は、全く問題なく動作しましたが、 下記のように1行だけ変更しただけで動作後に固まってしまいます。 このようなことは初めてなのですが、 何卒、ご教授お願い致します。 Sub 動作後に固まる() '注意 Dim c As Range Do Set c = Range("A:A").Find(what:="No 01", LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then Exit Do 'c.Offset(-1, 0).Resize(3, 1).EntireRow.Delete '変更前 c.Offset(1, 0).FormulaR1C1 = "固まる" 'この1行だけこのように変更しただけです Loop End Sub

  • マクロ findを使用しての列番号検索

    いつも回答して頂き、とても感謝しています。 質問内容ですが、 FINDを使用して列番号を検索する時、FINDでセル位置を取り出し、そのセル位置を元に列番号を取り出しています。FINDの記述部分で列番号を検索するにはどうしたらよろしいのでしょうか?宜しくお願い致します。 Dim 項目1 As Range Dim c1 As Long If Application.CountIf(Rows(4), "みかん") = 1 Then Set 項目1 = ws2.Rows(4).Find(what:="みかん", LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, searchdirection:=xlPrevious) c1 = 項目1.Column End If

  • EXCELマクロのこの記述の意味を教えてください。

    こんにちは。 以前、教えてもらったマクロですが もう少し深く勉強したいので、記述の 意味(翻訳?)を教えてください。 Sub Test5() Dim FR1 As Range, FR2 As Range With ActiveSheet Set FR1 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByRows, xlPrevious) Set FR2 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByColumns, xlPrevious) End With Range("A1", Cells(FR1.Row, FR2.Column)).Select Set FR1 = Nothing: Set FR2 = Nothing End Sub また、この範囲をA列だけを見る場合、つまりA列の最終行を範囲とする場合は、どう記述すればよいのでしょうか? ぜひ、教えてください。

  • VBAで条件が一致する行のデータを別シートに抽出で…

    QNo.4034421『VBAで条件が一致する行のデータを別シートに抽出』の続きになります。 下記のような記述を前回ご教授賜っていたのですが、Keywrd"a"が無い場合、SubステートメントからExitではなく、 "Sheet2の"A387"の列を空白にしたまま次のプログラムに移行するように"Else"を使用して記述してみたのですが、上手くいきません。 ご教授願えませんでしょうか。 Dim Keywrd As String Dim TargetCell As Range Keywrd = "a" If Keywrd = "" Then Exit Sub With Worksheets("Sheet1").Columns("A:A") Set TargetCell = .Find(Keywrd, LookAt:=xlWhole, LookIn:=xlValues) If TargetCell Is Nothing Then MsgBox Keywrd & " は見つかりません。" Exit Sub End If End With TargetCell.EntireRow.Copy Worksheets("Sheet2").Range("A387") TargetCell.EntireRow.Delete Shift:=xlUp

  • EXCEL マクロでの検索をお教えください

     下記のようなマクロを使いたいのですがこの場合×があるときは良いのですが、  無いときエラーが出ます。どの様にすれば良いのかお教えください。  無いときエラーは オブジェクト変数または With ブロック変数が設定されていません。  となります。 Sub 検索()    Range("K12:K70").Select    Cells.Find(What:="×", After:=ActiveCell, LookIn:= _    xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _    xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • エクセルVBA セルを参照した文字検索でシートをアクティブにする

    VBA初心者で困っています。 ブックAのシート1の“A1”の値が、同一ブック内の違うシートにあるかどうか検索し、あればそのセルをアクティブにして黄色に色づけ、なければメッセージを返すという処理をVBAで行いたいです。 似たような質問があってそれを参考にしてみましたが どうも上手く動いてくれません。 参考にさせていただいたのは   Set r = Workbooks("ブックB.xls").Sheets("シート1").Columns("A") _     .Find(What:=Workbooks("ブックA.xls").Sheets("シート1").Range("A1").Value, _        LookIn:=xlValues, _        LookAt:=xlWhole, _        SearchOrder:=xlByColumns, _        SearchDirection:=xlNext, _        MatchCase:=True)   If r Is Nothing Then     MsgBox "no data"   Else     Application.Goto r     Set r = Nothing   End If End Sub というコードです どなたか、わかる方教えてください。

  • Excel VBAデータ登録のスピードアップしたい

    下記のようなコードがあります。 ■input データ閲覧・登録・編集シート ■data データを格納するシート inputシートとdataシートでdataの受け渡しを行っているのですが、データレコードを切り替えるだけで20秒ちょっとかかるため、作業効率が悪いです。 この時間を1~2秒ぐらいまで減らすには、どのように修正すれば、いいでしょうか?どうかアドバイスをお願いいたします。 Private Sub datatouroku() ’データを登録する Dim touroku As Integer Dim fRange As Range Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) touroku = fRange.Row '検索されたNoの行位置を求める Sheets("data").Cells(touroku, 1).Value = Range("BC1:BE1").Value Sheets("data").Cells(touroku, 2).Value = Range("AX1").Value Sheets("data").Cells(touroku, 3).Value = Range("I4").Value   '・・・上記のデータが全部で256件あります。 End Sub ------------------------------------------ Private Sub hyouji() 'データを表示させる Dim fRange As Range Dim kensaku As Long Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)    If (fRange Is Nothing) Then '見つからなかった?    MsgBox "入力された顧客コードが存在しません。", vbExclamation    Exit Sub    End If    kensaku = fRange.Row '検索された顧客DCの行位置を求める     Range("BC1:BE1").Value = Sheets("data").Cells(kensaku, 1).Value     Range("AX1").Value = Sheets("data").Cells(kensaku, 2).Value    Range("I4").Value = Sheets("data").Cells(kensaku, 3).Value     '・・・上記のデータが全部で256件あります。 Set trg = Sheets("data").Cells(kensaku, 1) End Sub

専門家に質問してみよう