• ベストアンサー

IF関数などを使って条件に合った「行」を削除するような機能はありますでしょうか?

例えば、一つのセルに「済」や「完」の(+条件書式などで網掛けがかかったような)文字が入ったら、自動的にその「行」が削除されるような、そんな関数(例えばIF関数などを組み合わせて)や機能はエクセルにありますでしょうか? ご存知でしたらどうぞよろしくお願い致します。 バージョンは97です

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#4です。 >A3以降のセルに「完」と入力して C列に完と入れる行をつくって頂いていますか。 「完」があるのを聞いている列は、私のコード例では If Cells(i, "c") = "完" Then と有るように、C列です。 「完」が入る列がE列なら If Cells(i, "E") = "完" Then のように変えます。 この点大丈夫ですか。 >マクロ(sheet1,test2)を実行しましても 私のコードはモジュール名がtest02()と0が入っています。 この点大丈夫ですか。

noitigo
質問者

お礼

ありがとうございました!(^○^)! 列を変えましたら出来ました! ですが、項目の欄にも「完」と入力していたので2行消えてしまいました(00;) これも要注意ですね! テストでやっててよかったです! 本当に感謝感謝感謝でございますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#3です。Remarkに関して。 (1)ActiveCell.EntireRow.Deleteの行はVBE画面の標準モジュールにコピペしないで下さい。みだしの積もりで入れたもの。 (2)>どういった表の配列の場合なのでしょう? --->VBAを実行すると、どういった表の配列の場合な「る」でしょう? ということでしたら 元の表の行(且つ列)の順序のままです。順序は保存されます。ForNext文がStepと-1が付いてますが エクセルVBAでは「行削除は下行から処理」が、(コードが簡単になる、間違いを起こし難い)ポイントなんです。ここで私は良く失敗して、学んだものです。 (3)あと表のデータ部がA1セルから始まっていることを前提にしてます。 第3行目からデータが始まる(1,2行は見出し等)であれば Sub test02() d = Range("A3").CurrentRegion.Rows.Count For i = d + 2 To 1 Step -1 If Cells(i, "c") = "完" Then Rows(i).EntireRow.Delete End If Next i End Sub として下さい。 こんな疑問でしょうか。

noitigo
質問者

お礼

再度ご回答感謝致しますm(_ _)m 今現在は、新規作成で新しい(データは空の)表を作って 実験していますので、まずimogasiさんのいうように 次の「第3行目からデータが始まる(1,2行は見出し等)であれば」のようにまず表を作ってみました! ですので、1~2行まで見出し行にしまして、3行目以降がデータの行にしました。(とりあえず、私の場合A2~D2が項目の行でA3~D13をデータのセルにしました) そして、マクロの編集画面で Sub test02() d = Range("A3").CurrentRegion.Rows.Count For i = d + 2 To 1 Step -1 If Cells(i, "c") = "完" Then Rows(i).EntireRow.Delete End If Next i End Sub を貼り付けてみまして、保存しました! 流れとしましては、だいたいこんな感じでよろしいでしょうか? ですが、例えば、A3以降のセルに「完」と入力して、マクロ(sheet1,test2)を実行しましても、何も起こらないのですが、根本的にやり方が違うのでしょうか(T_T) 何度もすみません。もう少しだけお付き合いして頂けませんか?m(_ _)mお願い致します

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)関数による解決 基本的なことを覚えておいてください。 「エクセルの関数では、行、列、シートの挿入や削除 は行えません」 あとセルに色を付ける(変える)とかも出来ません。 その理由は、エクセルは「セルに関数は値を返す」もので 、それにエクセルが限定しているからです。 関数は、VBAで、オブジェクトとかプロパティとか言われるもののなかで、セルのプロパティの「Value」だけを扱うものです。 別シートに、「元のセルに「完」の入った行」を除いて、その他の行を持ってくることは可能です。(注) (2)VBAでは行削除が可能です。 ActiveCell.EntireRow.Delete Sub test02() d = Range("A1").CurrentRegion.Rows.Count For i = d To 1 Step -1 If Cells(i, "c") = "完" Then Rows(i).EntireRow.Delete End If Next i End Sub (3)手操作によって実現することは、ご存知可能です。 (注) Sheet1のA1:C6に 山田 福岡市 1 大山 熊本市 完 1 山下 島原市 2 上野 宮崎市 3 野上 鹿児島市 4 上原 大分市 完 4 といれて(上記」D列は初め空白) D列D1に =COUNTBLANK($C$1:C1)と入れてD6まで複写。 上記のようになる。 Sheet2のA1に =OFFSET(Sheet1!$A$1,MATCH(ROW(),Sheet1!$D$1:$D$10,0)-1,0)と入れてA4まで複写。 B1に=OFFSET(Sheet1!$A$1,MATCH(ROW(),Sheet1!$D$1:$D$10,0)-1,1)といれてB4まで複写。 結果Sheet2に 山田 福岡市 山下 島原市 上野 宮崎市 野上 鹿児島市 式を複雑にしないための部分があります。なぜB4までか、なぜ$D$10までなのか問わないでください。

noitigo
質問者

補足

ごアドバイスありがとうございますm(_ _)m >(2)VBAでは行削除が可能です。 ActiveCell.EntireRow.Delete Sub test02() d = Range("A1").CurrentRegion.Rows.Count For i = d To 1 Step -1 If Cells(i, "c") = "完" Then Rows(i).EntireRow.Delete End If Next i End Sub コードに関して質問してはダメでしょうか? これをこのまま貼り付けた場合、どういった表の配列の場合なのでしょう? それだけ教えて頂きましたら、あとは「どの個所をどう変えたらどうなるか…」とかは自分で実験してみます。 お願いしますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • laputart
  • ベストアンサー率34% (288/843)
回答No.2

例とした以下のようなマクロを組みます。 ●A列が「済」や「完」の場合その行が削除されます。 網掛には対応していません。 ●最初に検索開始と終了の行を入力して使います。 「済」や「完」を含み文字列の場合はプログラムを 修正する必要があります。 ●(注意)実際に行が削除されますので重要なファイルのコピーを必ず取って置いてください。 !!! ●マクロはあくまでも参考例なので適当に 修正して下さい。 Sub Macro1() ' ' Dim y, y1, y2 As Integer Dim s1, s2, s3 As String '------行の入力------------------- y1 = InputBox("検索を開始する行番号") y2 = InputBox("検索の最後の行番号") For y = y1 To y2 s1 = "A" & CStr(y) Range(s1).Select s2 = ActiveCell.Value Ok = 0 '---------A列の条件を検索------------- If s2 = "完" Then Ok = 1 ElseIf s2 = "済" Then Ok = 1 End If If Ok = 1 Then s3 = CStr(y) & ":" & CStr(y) Rows(s3).Select Selection.Delete Shift:=xlUp End If Next y End Sub

noitigo
質問者

補足

具体的なコードを教えて頂きましてありがとうございますm(_ _)m 私はまだマクロに対して素人なのですが、まずVisualBasicEditorというのを開いてみまして…、いったんそのコードを貼り付けてみました…。 そして 検索する表の列は「A列」に揃えてみまして、 >y1 = InputBox("検索を開始する行番号") >y2 = InputBox("検索の最後の行番号") の中の「検索を開始する行番号」の所に「2(←開始の行が2行目からなので)」「検索の最後の行番号」の所に「13(←最後の行が13行目なので)」と入力して、マクロを実行してみたのですが、どうもうまくいきません…。 そもそもやりかたが違うのでしょうか? コードを入力、編集してまでマクロを扱った事がありませんので、もしよろしければ、すみません、もう一度教えて頂けませんか?m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

関数では存在しません。 方法1 「済」や「完」の列で並び替えて、削除する。 方法2 「データ」「フィルタ」「オートフィルタ」で 「済」「完」を非表示に設定する。 (消去ではないのでファイルサイズは減りません。) 方法3 VBAで削除する。

noitigo
質問者

補足

ご回答感謝致します! >「データ」「フィルタ」「オートフィルタ」で 「済」「完」を非表示に設定する。 例えば、あるセルが「済」となった行を非表示にするには「手動」でするしかないでしょうか? 非表示でもそれが「自動化」できましたら、それも有効的な方法かも知れません! たびたび質問で申し訳ありませんが、ご存知でしたらよろしくお願いしますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELの条件付書式、IF関数につきまして。

    お世話になります。 EXCELで一つの行において、計という文字が含まれるものだけ セルの右端に表示させる方法をお教えいただきたく。 それ以外は左端に表示。 現在は全てセルの左端揃いで文字が表示されております。 条件付書式、IF関数などを利用することによって可能でしょうか? どうぞよろしく御願い申し上げます。

  • IF関数の条件に関数を指定

    Excelに関する質問です。 ちょっと分かりづらいのですが、例えばセルA1とB1があるとします。 A1には別シートのセルが参照されています。(「="あ!A1"」など) ここで、B1にはIF関数を入れたいのですが、その時A1の関数式内の文字を条件にしたいのですが、そういうことはできますか? つまり、B1にIF関数で「A1セル内の関数式内に"あ"の文字がある時に"い"と表示する」のようにしたいのです。 普通に「=IF(A1="あ","◯","")」ではできません。 Google先生でも調べてみたのですが、分かりませんでした。 お知恵をいただければ幸いです。

  • エクセルで、セルに「合格」という文字が入ったら、そのセルの入った行全体に灰色の網掛けがかかるようにできますでしょうか?

    ほぼタイトル通りなのですけれど、 エクセル(97)であるセルに「合格」という 文字列が入りましたら、そのセルの入った 行全体(表の中の事なので表の中のみ)に灰色の 網掛けがかかるようにできますでしょうか? 「条件書式」を使いますと、一つのセルに「合格」と 入りますと、そのセルのみに網掛けがかかってしまうようですし、行全体に網掛けがかかる方法を探しています。。 何か機能を組み合わせていい方法はないでしょうか?

  • 条件付き書式:1行おきに色⇒手動で塗りつぶしは?

    エクセルで見やすくするために、条件付き書式で1行おきにセルの色を変えることがよくあります。 その後、特定のセルを目立たせるために別の色にしたいときがあり、「塗りつぶし」をクリックしても、条件付き書式が優先されるので色が変わりません。その対策として ・塗りつぶしの代わりに文字の色を変える⇒ブランクのセルを目立たせたいときには使えない ・ほかの条件付き書式で適当な数式を入れて、優先順位を高くし、別の色を設定する⇒面倒 ・塗りつぶしの代わりに網掛けを使う⇒やはり面倒 どれも微妙です。 理想は条件付き書式で1行おきに色を変える設定は残しつつ、手動で塗りつぶしをクリックしたら色が変わる、というものですが、おそらくそれは無理だと思っています。 何かうまい方法がありましたら教えていただきたいです。よろしくお願いします。

  • エクセル。行を挿入すると、関数が反映されない

    とても困っているのでどうかお願いします。 たとえば、ある列にエクセル関数を挿入したとします。 今回私が挿入したのはIF関数でした。=IF(C1="","",10)をC1に入れて、それより下は、C2,C3,,とドラッグしていきました。 その途中に行を挿入したとき、たとえば15行目に挿入したとき、理想は勝手に 。=IF(C15="","",10) となってくれることです。しかしやってみると、実際にはそうなっていません。 関数は全く入っておらず、空欄になっています。 これでは、行を挿入するたびに関数をまた入れなおししないといけないということでしょうか? マクロなどでしか解決できないのでしょうか?(それとも条件付書式などで、列そのものに挿入するのでしょうか?) ちなみに条件付書式の場合、どこかからセルを貼り付けするとき、値のみにしないと、そのセルの書式も変更されてしまいますよね?だからあまり使いたくないのですが、、、 どなたかご存知の方はどうかお願いいたします。

  • 結合セルでの条件付き書式の方法

    エクセルで結合セルの条件付き書式の方法について教えていただけたら幸いです。 Excel2010を使用しております。 カレンダーを作成しようと、月によって曜日が自動で入力されるように設定をし、特定の曜日や祝日に網掛けをするように設定をしました。 (網掛けは条件付き書式で特定の曜日はWEEKDAYの数式、祝日はCOUNTIFの数式を使って設定しました) 添付画像ですと例えばA8とA9、B8とB9がセルの結合してあるのですが、網掛けが適用されるのが8の行だけで9の行には網掛けが適用されません。 セルの結合で空データのためそのようになっているのかとは思いますが、8の行、9の行ともに網掛けをするように設定することはできないのでしょうか? 回答よろしくお願いいたします。

  • エクセル IF関数が入った条件付き書式について

    エクセルにおいて、セルA1、B1、C1があるとします。A1、B1には数値が何も入力されていない状態で、C1に計算式「=SUM(A1)/B1」が入っているとします。このままでは、C1は、「#DIV/0!」と表示されます。 この表示を消すために、C1にIF、ISERROR関数を使い、「=IF(ISERROR(SUM(A1)/B1),"",SUM(A1)/B1)」の計算式を入力します。 このままでもいいのですが、C1の値が「10以上」になった時に、C1のセルに色を付けたいのです。 書式→条件付き書式→セルの値が→次の値以上→10 にすると、セルに何も値が入っていない(空白)状態で色だけが付いてしまいます。 色々調べると、IF関数の""の空白が文字列のため、数値より大きいとみなされている事が原因っていうことは、分かりましたが、色々試してみても出来ません。何かいい方法はございますでしょうか? ご教授お願いします。

  • 空白セルのある行を削除する関数をご教示下さい。

    空白セルのある行を削除する関数をご教示下さい。 ただし、条件付で、特定の列の空白セルに該当する行しか削除しない という条件付の関数を作成したいと考えています。 文章だけでは分かりにくいため、図を添付します。 エクセルに詳しい皆様の回答を心よりお待ちしています。

  • エクセルの条件付き書式について

    こんにちは。 エクセルである行に「一つ上のセルと同じ値であればセルに色をつける」 という条件付書式を設定しています。 重複セルを発見するために設定しているのですが、 同じ内容のデータは必要ないので、色がついたセルのある行は削除することになります。 すると、それより下の行のセルに設定してあった条件付書式が機能しなくなってしまいます。 設定してある条件付書式はA2なら 「セルの値が、次の値に等しい、A1」という感じです。 これでA2のある2行目を削除してしまうと、元3行目で2行目に繰り上がったA2の条件付書式が 「セルの値が、次の値に等しい、#REF」となってしまい機能しません。 絶対参照にしているわけでもないので、 「自動で補正してくれないのかなぁ?」と思っているのですが どこかにそういう機能があるのでしょうか? 勉強不足の為どうしてよいかわからずみなさんに教えていただきたく 質問させていただきました。 よろしくお願いいたします。

  • 条件付書式 if関数 を利用する

    条件付書式 if関数 を利用する おはよう御座います。 条件付書式でIF関数を利用したいです。 =if(and(e4>=10,L4>=50),"1","") e4が10以上で L4が50以上ならば そのセルに色をつける場合の公式を教えて頂きたいのですが? ,"1","") この部分が間違っていると思うのですが???

このQ&Aのポイント
  • Win10 21H1自作PCでCPU内蔵GPUのVGAドライバーをインストールする方法を教えてください。
  • ASUSマザーボードのWEBサイトからダウンロードインストール可能ですが、モニターとグラボ間をDP1.4ケーブルで接続している場合はVGAドライバーがインストールできません。
  • モニターに接続しているDP1.4ケーブルをPC本体のバックパネルのDP1.2端子に接続することで、VGAドライバーをインストールし、CPU内蔵GPUを使用することができます。
回答を見る

専門家に質問してみよう