ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

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

バージョンは97です

このQ&Aに関連する最新のQ&A

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
    • 1
この回答へのお礼

再度ご回答感謝致します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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q指定した文字があった場合、その行を削除するマクロが欲しいです

指定した文字があった場合、その行を削除するマクロが欲しいです
Sheet1(Sheet1以外は対象外)のB列に
XYZ
という文字があった場合、その行をすべて削除する
というマクロはどのように作ればいいでしょうか?
お時間ある方アドバイスいただければ幸いです。

Aベストアンサー

手抜きですがこんな感じでどうでしょう。
削除する行が多いなら画面更新を停止した方が良いでしょう。

Sub Sample()
 Sheets("Sheet1").Select
 Do While (True)
  Columns("B:B").Select
  Set mySelect = Selection.Find(What:="XYZ")
  If mySelect Is Nothing Then Exit Do
  Rows(mySelect.Row).Select
  Selection.Delete Shift:=xlUp
 Loop
End Sub

Qエクセル・条件付で行を削除する方法

たとえば、添付画像のような表があったとします。
この時、性別が1の人だけを残して、後は削除してしまいたいときの方法を教えてください。
つまり、Bさん、Eさんの行を完全に削除し、Aさん、Cさん、Dさんのみの表にしてしまうと言うことです。

また、数字の範囲を指定して行を削除する方法もあれば、ご教授ください。
例えば、年齢が15以上(または以下)である人のみを削除する方法などです。

Aベストアンサー

こんばんは!
一番簡単なのは「オートフィルタ」を利用する方法だと思います。

当方使用のExcel2003の場合です。

表内のどこのセルでも良いのでアクティブに! → メニュー → データ → オートフィルタ
これで1行目の項目列すべてに下向き▼が表示されますので、
元データを削除してよいのであれば、削除したいものを選択 → 表示されている行すべてを削除
これで大丈夫だと思います。
(本来であれば削除より必要データの抽出の方が良いと思います)

また、年齢の幅で検索したいのであれば、下向き▼の項目内に「オプション」がありますので、
○以上と等しい 「AND」 → △以下と等しい といった具合に条件範囲を設定すれば大丈夫です。

尚、Excel2007以降のバージョンだと↓のURLが参考にならないでしょうか?

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-filter.html

Qエクセル 指定した文字列を含む列を削除するには

人から貰ったエクセルの表を必要なデータを残して削除する作業をしています。
(例:セルK5やM5に現在在庫数が入っている列が不要なので削除)
行に関してはオートフィルタを使って削除していますが、
列に関しては行列を入替えて貼付→オートフィルタで削除→行列を入替えて貼付
で実現出来ていますが、かなり時間と手間がかかっています。

もう少し簡単に上記作業を実現したいのですが、どうしたらよいでしょうか?

Aベストアンサー

> 指定した文字列を含む列を削除するには

素直に解釈して回答します。Excel2002 以降限定ですが。

 1. 検索するセルの範囲を選択
 2. [Ctrl]+[F] で検索ダイアログを表示
 3. 検索する文字列を入力
 4. [全て検索] をクリック
 5. リストボックスに表示された結果を全て選択
   --> セルが選択されます
 6. セル上で右クリック [削除]
 7. 6. で表示されるダイアログで、削除対象を [列全体] に指定

でできませんか?

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで特定の行を抽出させる方法について。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのようにすれば良いのでしょうか?
INDEXやMATCH・LOOKUPを使っていろいろ試したのですがイマイチうまく行かないもので・・・。

因みに、シート2のイメージは

      A     B     C  
 1   名前  :  Aさん 
 2
 3   日付   場所   時間
 4   10/7   工場1    8.0
 5   10/8   事務所    8.0
 6   10/9   事務所   4.0

このような感じです。

よろしくお願いします。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのように...続きを読む

Aベストアンサー

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バー内に貼り付け
→ そのまま(編集可能なまま)Shift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。
これをC4セルまでコピー!

A4セルの表示形式は「日付」にし、A4~C4セルを範囲指定 → C4セルのフィルハンドルで下へコピー!

これで画像のような感じになります。m(_ _)m꜊

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バ...続きを読む

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

空白セルのある行を削除する関数をご教示下さい。
ただし、条件付で、特定の列の空白セルに該当する行しか削除しない
という条件付の関数を作成したいと考えています。

文章だけでは分かりにくいため、図を添付します。
エクセルに詳しい皆様の回答を心よりお待ちしています。

Aベストアンサー

こんばんは!
一例です。
↓の画像の配置で説明します。

F2セルに
=IF(COUNTA($B$2:$B$1000)<ROW(A1),"",INDEX(A$2:A$1000,SMALL(IF($B$2:$B$1000<>"",ROW($A$1:$A$999)),ROW(A1))))

これは配列数式になってしまいますので、この画面からF2セルにコピー&ペーストしただけではエラーになると思います。
貼り付け後、F2キーを押す、または貼り付けセルをダブルクリック、または数式バー内で一度クリックします。
編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

これを列方向と行方向にオートフィルでコピーした後に、日付の列は表示形式を「日付」にします。
尚、元データが空白の場合は「0」が表示されますので、
当方使用のExcel2003の場合ですが
メニュー → ツール → オプション → 「表示」タブで 「ゼロ値」のチェックを外せば
0は表示されなくなります。

数式は元データの1000行目まで対応できるようにしていますが
データ量によって範囲指定の領域はアレンジしてみてください。

以上、長々と書きましたが
参考になれば幸いです。m(__)m

こんばんは!
一例です。
↓の画像の配置で説明します。

F2セルに
=IF(COUNTA($B$2:$B$1000)<ROW(A1),"",INDEX(A$2:A$1000,SMALL(IF($B$2:$B$1000<>"",ROW($A$1:$A$999)),ROW(A1))))

これは配列数式になってしまいますので、この画面からF2セルにコピー&ペーストしただけではエラーになると思います。
貼り付け後、F2キーを押す、または貼り付けセルをダブルクリック、または数式バー内で一度クリックします。
編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。
数式の前後に{ }マ...続きを読む

Qエクセルで複数の特定の文字列をふくむ行を非表示にしたい。

仕事でエクセル2000を使用しています。

A列に住所が4万件入っているファイルで福岡県と長崎県、愛知県、大阪府の行を表示しないようにしたいと思ってます。
B列に以下の関数を入れて、オートフィルタで0を選択して表示させないように試みました。
=IF(ISERROR(FIND("福岡県",A3)),0,1)
福岡県だけならできますが、他の県を条件に含めるにはどうしたらよいのでしょうか?

この関数にこだわってるわけではありませんので何か別によい方法があれば教えてください。

よろしくおねがいします。

Aベストアンサー

◆こんな方法もありますよ
★別の列に
=COUNT(FIND({"福岡県","長崎県","愛知県","大阪府"},A1))
★下にコピー
★オートフィルターで0を抽出

QEXCEL関数 空白セルを詰める関数

図1の表を図2のようにオートフィルタを使わず表示させる関数で下記を見つけましたが、実際使うときには、番地がA1からの位置ではなくAA60ぐらいの位置でこの関数を実行すると表示されません。
どの部分をその番地にあわせるとよいでしょうか?

<図1>
    A     B
1   あいう
2         えお
3   かきく
4         けこ
5   さしす

<図2>各行の空白セルを詰めて表示させる
    A     B    
10  あいう   えお
11  かきく   けこ
12  さしす
13
14

【関数】

A10: =IF(ROW(A1)>COUNTA(A$1:A$5),"",INDEX(A$1:A$5,SMALL(IF(A$1:A$5<>"",ROW($A$1:$A$5),""),ROW(A1))))

Ctrl + Shift + Enterキーで式を確定します。

右と下にコピーします。

Aベストアンサー

元データがA60から始まっているとすると,

A10に
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A$60:A$65,SMALL(IF(A$60:A$65<>"",ROW($A$1:$A$6),""),ROW(A1))))
をコントロールキーとシフトキーを押しながらEnter,下にコピー,右にコピー と直す格好になりますね。




#好みの問題ですが
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A:A,SMALL(IF(A$60:A$65<>"",ROW(A$60:A$65),""),ROW(A1))))
をCtrl+Shift+Enterの方が,判りやすいと思います。


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

人気Q&Aランキング