エクセルマクロで特定の条件を満たすセルの関数を消す

このQ&Aのポイント
  • エクセルマクロを使用して特定の条件を満たすセルの関数を削除する方法について教えてください。
  • A1~D10000の範囲に値が入力されており、F1~F10000にはそれぞれの行の値の必要性を示す判定の関数が表示されています。
  • F列に「×」と表示されている行のA~D列の値をクリアするマクロを作成したいのですが、上記のマクロではうまく動作しません。どのような修正が必要でしょうか。
回答を見る
  • ベストアンサー

エクセルマクロで特定の条件を満たすセルの関数を消す

A1~D10000の範囲で値が入力されています。 F1~F10000に、それぞれの行の値が必要なのかの判定を関数で表示させています。 F列に「×」と表示されている行のA~D列の値をクリアさせるマクロを 作成したいです。 ネットで調べた所、「行を削除」というテンプレはあったのですが、 それだとF列の関数も消してしまうので、それは避けたいです。 最悪、行の削除をした後に関数をF列にコピペするマクロを 追加すれば良いと思いますが、下記マクロまで作ったのですが、 うまく動いてくれません。 分かる方がいましたら、返信頂きたいです。 Dim i As Long For i = Range("A1").End(xlDown).Row To 2 Step -1 With Cells(i, "F") If _ .Value Like "×" Then .EntireRow.Delete End If End With Next i End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

クリアするだけならClearContentsを使用すればよいです Sub Sample()   For i = 1 To 10000 ’1行目から10000行目までループを回す     If Cells(i, "F") = "×" Then 'F列が×の場合       '対象行のA:D列をクリア       Range(Cells(i, "A"), Cells(i, "D")).ClearContents     End If   Next i End Sub

その他の回答 (1)

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

どうせなら F列の判定自体 マクロで処理した方がいいのでは? それはともかく「値をクリア」は「Delete(セルの削除)」とは 違うんですが 実際はどうしたいんでしょうか。 Deleteじゃないなら 下から処理している意味が全くありません。 If Cells(i, 6).Value = "×" Then Cells(i, 1).Resize(1, 5).Delete Shift:=xlUp End If

関連するQ&A

  • エクセル 特定セルの足し算をするマクロ

    C列、D列、E列を足し合計をF列に記入するマクロを教えて下さい。 (3行目から値のある行まで。)  A B  C  D  E   F 1 2 3     24  16  19  59となる様に 4     35  49  41 5     22  19  72 6     ・   ・   ・ 7     ・   ・   ・ 宜しくお願いします。

  • セルの値が指定条件なら対象行を削除するマクロ

    ボタンクリックでプロシージャーが起動します。 そのマクロの中で以下の2つの処理を追加させたいです。 マクロの記述を教えてください。 A~F列までデータが有ります。 1行目は項目で2行目からデータがあります。 行数は都度相違しますが10,000行はあります。 (1) F列の値は標準で、ここが0の場合その行全体を削除します。 入っている値の例 -1234→削除しない 345→削除しない 12346→削除しない 0→削除する セルの空白はぜったいありません。 (2)-1 E列の値は標準で英数字3ケタです。ところどころ空白があります。 E列の値が先頭7B以外は行全体を削除します。 7B1→削除しない 7B2→削除しない 7BW→削除しない 77C→削除 47B→削除 空白→削除 F列を優先なのでE列が7Bで始まっている行でも F列が0なら削除となります。 (2)-2 (2)-1と同じでE列の値は標準で英数字3ケタです。 ところどころ空白があります。 E列の値が 先頭 7Bと72以外 又は CとDと7B以外は 行全体を削除します。 のように(2)-1のように1条件ではなく2~複数になる。 それが1文字の場合、2文字の場合、3文字全部の場合がある F列を優先なのは(2)-1と同じです。 条件例 ・Cと73以外 ・CとFと72以外 ・Gと7Vと8D以外 ・Gと88と8D5以外 以下の記述ですが、(1)は思ったとうり動作しましたが ●の部分が分かりません。 現在の記述では7BB以外は全部行削除されてしまいます。 (2)-1と(2)-2の対応のために 記述内で(2)-1と(2)-2を 書き換える事が出来るような記述にしたいです。 あと凄く処理が遅いので高速化もしたいです。 よろしくお願いします。 Sub test01() 'A~K列のデータにて 'E,F,H,I,K列を列削除する Columns("E:F").Select Selection.Delete Shift:=xlToLeft Columns("F:G").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft 'データがA~F列になりました。 With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'F列が"0"だったらその行を削除 If .Cells(i, 6) = 0 Then .Rows(i).Delete Next '繰り返し End With With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'E列の値の先頭文字が"7B"でなかったら削除(空白の場合も削除) ●If .Cells(i, 5) <> "7BB" Then .Rows(i).Delete Next '繰り返し End With End Sub

  • Excelのマクロについて教えてください。

    Excelのマクロについて教えてください。 下記のマクロがあります。 With Range("A" & Rows.Count).End(xlUp) .EntireRow.Copy .Offset(1) .Offset(1).EntireRow.SpecialCells(xlCellTypeConstants).ClearContents .Offset(1).Value = .Value + 1 End With 実際にデータが入っているのはA列~E列までで .EntireRow(行全体)ではなく A?:E? と範囲を指定して上記を実行させたいのですが どのように変更するといいでしょうか。 よろしくお願いします。

  • エクセルマクロ-条件付き繰り返し

    マクロ初心者です。(エクセル2003使用) シート1にある表で、M列が空白以外(処理済みなどの値がある場合)である場合、その行全体をコピーし、シート2の最終行に貼り付けして、シート1からはその行を削除するマクロを作成したいと思っていますができません。 すみませんが、どなたかご教授願います。 (シート1の表) ・8行目が題目となっており、A9から表となっています。 ・表の全体サイズは、横がAからMまでで、縦はC(シー)の管理番号行分までとなっています。(Mは、空欄があったり値(処理済みなどの値)が入っていたりしています) (考えているマクロ) ・Loopの回数は、Cの管理番号が終わるまで ・IFでCに値があり、Mが空欄だった場合は、そのまま(何もしない) ・Cに値があり、Mに値があった場合は、その行全体を選択しコピーし、シート3の最終行に貼り付け、シート1のその行は削除する Sub 処理済み() Range("C9").Select Do While ActiveCell.Value = "" ActiveCell.Offset(1).Select Loop If ActiveCell.Offset(, 10).Value = "" Then そのまま Else If ActiveCell.Offset(, 10).Value = "値があったら" Then その行全体を Select.Copy Sheets("Sheet2").Select Dim 下 下 = Range("A").End(xlDown).Row ペースト 削除 End If End Sub すみませんが、どなたか教えていただけましたら助かります。 よろしくお願いいたします。

  • excel 空白のセルがある行を削除するマクロ

    A列に、みかん りんご バナナ 肉 などと入力されており、 B1に=if(countif(A1,"*みかん*")+countif(A1,"*りんご*")+countif(A1,"*バナナ*"),"fruit","") という感じで、fruit か 空白 を返す関数が入力されており、オートフィルでB列に数式をコピーするマクロを実行します。 その次に、B列で空白のセルがある場合、その行を削除するというマクロを下記のように入力しましたが、削除されません。 Dim lastRow As Long Dim i As Long lastRow =Range("B"&Rows.count).End(xlup).Row For i =lastRow To 5 Step -1 If Cells(i,"B").Value="" Then Rows(i).Delete XlShiftUp End If Next i 間違いをどなたか教えてください。 ちなみに、B列が関数では無く、ただの文字列の場合("fruit")ではマクロが実行できました。 関数の値からマクロを実行することは不可能なのでしょうか? 解答、宜しくお願い致します。

  • エクセルのマクロについて

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • Excelマクロ

    お世話になります。 Excelのマクロに関する質問です。 目的としては、D列に様々な文言が入っており、 D列に記入されている各文言の数をカウントしたいと思っています。 ただし、D列の各文言が複数あった場合でも、 A列が同じ値の場合は数に含めない、という条件があります。 ex)D列に「りんご」という文言が10個あります。   D列に「りんご」と記入されている行のA列は、 「赤」「青」の2パターンしかありません。 ⇒この場合、「2」とカウントしたいです。 現在、以下のマクロを考えています。 =========================================================== sub test() Dim i As Long, x As Long, cnt As Long, buf As Object '「i」「x」「cnt」を数値として定義。「buf」にD列の値を格納します。 x = 4 '4行目以降を対象としています。 Do While Cells(x, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 cnt = 0 '各行のD列に入っている値の数を数えるため、まずはカウントを0にします。 i = 4 '4行目以降を対象としています。 Set buf = Cells(x, 4) ' D列の値を変数「buf」に格納します。 Do While Cells(i, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 If Cells(i, 4).Value = buf And Cells(i, 1).Value <> Cells(x, 1).Value Then  ' D列の値が「buf」に格納した値と同じ、かつ、       ' A列の値が、bufに値を格納した時と異なる場合のみ対象 cnt = cnt + 1 '数を数える対象であれば、+1します。 End If i = i + 1 '次の行に移るために+1します。 Loop Cells(x, 5).Value = cnt ' E列にcntに格納された値を入力 x = x + 1 '次の行に移るために+1します。 Loop end sub ===================================================== 上記のマクロでは、E列にカウント後の数らしいものが入力されるのですが、 値が正しくないようです。 お力添えをいただけますでしょうか。 よろしくお願いいたします。

  • エクセル 空の行を削除するマクロについて

    エクセルで、特定の列(ここではFの列としてください)が空欄だった場合に、その行ごと削除するマクロを記述したのですが、不完全で困っています。 不完全な部分としては、 ・Fが空であるはずなのに、行が削除されない ・Fが空でもその隣のセル(E)に文字列などが入っていた場合、削除されない 以下が問題のマクロです Dim i As Integer For i = 1 To 300 If Sheets("Sheet1").Cells(i, "F") = "" Then Sheets("Sheet1").Rows(i).Select Selection.Delete Shift:=xlUp End If Next i End Sub 例) A B C D E F 1 あ い う え お か 2 き く け こ さ し 3 す せ そ た ち 4 つ て と な に ぬ 3列目を削除したいです。 問題箇所がお分かりの方、教えていただけませんでしょうか。 宜しくお願いいたします。

  • Excelセル範囲内の値のみ1行空欄にする

    下記コードでは1行づつ挿入により下段までずれてしまいます。 Excelセル範囲内の値のみ1行づつ開けるにはどのようにすれば良いでしょうか。 どなたか解る方よろしくお願いします。 Sub 空欄1行() Dim i As Long If TypeName(Selection) <> "Range" Then Exit Sub With Selection For i = .Rows.Count To 2 Step -1 Intersect(.Cells(i, 1).EntireRow, .Columns).Insert xlDown Next End With End Sub

  • 関数による空白行を除き範囲を選択するマクロ

    添付ファイルのシートが同じファイル内にある別シートの値を参照の上、元シートの入力がない場合は、if関数により空白表示する様にしてあります。(関数自体は1万行くらいまで入力すみです。) このシートの空白表示以外のセル(A6:i22)までを選択するマクロを組みたいのですが普通のrange(A6:i6).End(xlDown).Rowを使うと空白表示行を含めた関数のある最終行を選択してしまいます。 サンプルの(A6:i22)をうまく選択するマクロを教えてください。

専門家に質問してみよう