- ベストアンサー
IF関数などを使って条件に合った「行」を削除するような機能はありますでしょうか?
例えば、一つのセルに「済」や「完」の(+条件書式などで網掛けがかかったような)文字が入ったら、自動的にその「行」が削除されるような、そんな関数(例えばIF関数などを組み合わせて)や機能はエクセルにありますでしょうか? ご存知でしたらどうぞよろしくお願い致します。 バージョンは97です
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4です。 >A3以降のセルに「完」と入力して C列に完と入れる行をつくって頂いていますか。 「完」があるのを聞いている列は、私のコード例では If Cells(i, "c") = "完" Then と有るように、C列です。 「完」が入る列がE列なら If Cells(i, "E") = "完" Then のように変えます。 この点大丈夫ですか。 >マクロ(sheet1,test2)を実行しましても 私のコードはモジュール名がtest02()と0が入っています。 この点大丈夫ですか。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
#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 として下さい。 こんな疑問でしょうか。
お礼
再度ご回答感謝致します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/17070)
(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までなのか問わないでください。
補足
ごアドバイスありがとうございます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)
例とした以下のようなマクロを組みます。 ●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
補足
具体的なコードを教えて頂きましてありがとうございますm(_ _)m 私はまだマクロに対して素人なのですが、まずVisualBasicEditorというのを開いてみまして…、いったんそのコードを貼り付けてみました…。 そして 検索する表の列は「A列」に揃えてみまして、 >y1 = InputBox("検索を開始する行番号") >y2 = InputBox("検索の最後の行番号") の中の「検索を開始する行番号」の所に「2(←開始の行が2行目からなので)」「検索の最後の行番号」の所に「13(←最後の行が13行目なので)」と入力して、マクロを実行してみたのですが、どうもうまくいきません…。 そもそもやりかたが違うのでしょうか? コードを入力、編集してまでマクロを扱った事がありませんので、もしよろしければ、すみません、もう一度教えて頂けませんか?m(_ _)m
- mshr1962
- ベストアンサー率39% (7417/18945)
関数では存在しません。 方法1 「済」や「完」の列で並び替えて、削除する。 方法2 「データ」「フィルタ」「オートフィルタ」で 「済」「完」を非表示に設定する。 (消去ではないのでファイルサイズは減りません。) 方法3 VBAで削除する。
補足
ご回答感謝致します! >「データ」「フィルタ」「オートフィルタ」で 「済」「完」を非表示に設定する。 例えば、あるセルが「済」となった行を非表示にするには「手動」でするしかないでしょうか? 非表示でもそれが「自動化」できましたら、それも有効的な方法かも知れません! たびたび質問で申し訳ありませんが、ご存知でしたらよろしくお願いしますm(_ _)m
お礼
ありがとうございました!(^○^)! 列を変えましたら出来ました! ですが、項目の欄にも「完」と入力していたので2行消えてしまいました(00;) これも要注意ですね! テストでやっててよかったです! 本当に感謝感謝感謝でございますm(_ _)m