dポイントプレゼントキャンペーン実施中!

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

バージョンは97です

A 回答 (5件)

#4です。


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

ありがとうございました!(^○^)!

列を変えましたら出来ました!
ですが、項目の欄にも「完」と入力していたので2行消えてしまいました(00;)
これも要注意ですね!
テストでやっててよかったです!

本当に感謝感謝感謝でございますm(_ _)m

お礼日時:2004/05/17 13:45

#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
として下さい。
こんな疑問でしょうか。
    • good
    • 2
この回答へのお礼

再度ご回答感謝致します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お願い致します

お礼日時:2004/05/17 13:07

(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

補足日時:2004/05/17 11:28
    • good
    • 0

例とした以下のようなマクロを組みます。


●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

補足日時:2004/05/17 10:57
    • good
    • 1

関数では存在しません。


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

この回答への補足

ご回答感謝致します!

>「データ」「フィルタ」「オートフィルタ」で
「済」「完」を非表示に設定する。

例えば、あるセルが「済」となった行を非表示にするには「手動」でするしかないでしょうか?
非表示でもそれが「自動化」できましたら、それも有効的な方法かも知れません!

たびたび質問で申し訳ありませんが、ご存知でしたらよろしくお願いしますm(_ _)m

補足日時:2004/05/17 10:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A