【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

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

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

A 回答 (4件)

マクロを使う別の方法です。


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

ご回答いただきましてありがとうございます。
まさしく一発削除!
できました。
ありがとうございました。

お礼日時:2007/01/24 19:49

もしB列に「特定の文字」を含む文字列があった場合という意味でしたら、こういうのはマクロの出番ですね。


以下の手順を試してみてください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

ただし、以下の"*特定の文字*"の中の「特定の文字」は、実際のものに変えてください。

'*****ここから下をコピペ*****

Sub test01()
With ActiveSheet
x = .Cells(.Rows.Count, "B").End(xlUp).Row
For i = x To 1 Step -1
If .Cells(i, "B").Value Like "*特定の文字*" Then
.Rows(i).Delete
End If
Next
End With
End Sub

'*****ここより上までをコピペ*****

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

いかがでしょう?
    • good
    • 4
この回答へのお礼

ご回答いただきましてありがとうございます。
詳しくご説明まで頂、大変わかりやすかったのですが、
私のやり方が悪いのか、マクロを実行いたしましたが、何もおこりませんでした。なぜでしょう。
お忙しい中ありがとうございました。

お礼日時:2007/01/24 19:47

データ→フィルタ→オートフィルタを用いて消去したい行のみを表示すれば、まとめて消去できます。

    • good
    • 9
この回答へのお礼

ご回答いただきましてありがとうございます。
こちらは、シンプルで簡単ですね。
こういうエクセルの使い方もあるのですね。
ありがとうございました。

お礼日時:2007/01/24 19:42

 並び替えを使う方法です。


 データはA列とB列まで入っているとし、「特定の文字」を「対象」とします。

1)C列に頭から順に、1,2,3,4と下まで入力していきます。
2)D1セルに「=IF(ISNUMBER(FIND("対象",B1)),"要削除","")」と入力し、以下コピー
3)シート全体を選択後、D列をキーにして降順に並び替え。 ⇒上側に「要削除」が集まる。
4)D列に「要削除」とある行を選択して、行削除。
5)シート全体を選択後、C列をキーにして昇順に並び替え。
6)C列とD列を削除。
    • good
    • 4
この回答へのお礼

ご回答いただきましてありがとうございます。
なるほど対象文字の列に印をつけて並べ替えて削除ですね。
こういったやり方もあるのですね、大変参考になりました。
ありがとうございました。

お礼日時:2007/01/24 19:40

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

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

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

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

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

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

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

Aベストアンサー

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

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

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

でできませんか?

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エクセルで、条件に一致した行を別のセルに抜き出す方法

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

たとえば、

<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特定の文字がある行以外を削除するマクロ

特定の文字がある行以外を削除するマクロを作りたいです。

データの範囲はA1からK50000
E列にS01、S02、E03と書いてあるセル以外の行を削除したいです。

E列にはS01~S50、E01~E100というような数値があります。

どうぞよろしくお願いします。

Aベストアンサー

NO5です。
>やってみましたが、かなり時間がかかってしまいました。
画面更新を無効にする事でもかなり時間短縮できますが如何でしょうか。

Sub 行を削除()
Application.ScreenUpdating = False
For i = Cells(Rows.Count, "E").End(xlUp).Row To 1 Step -1
If Cells(i, "E") <> "S01" And _
Cells(i, "E") <> "S02" And _
Cells(i, "E") <> "E03" Then
Rows(i).Delete
End If
Next
Application.ScreenUpdating = True
End Sub

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

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

バージョンは97です

Aベストアンサー

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

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エクセルのIF関数で、文字が入力されていたならば~

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

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

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

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

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

宜しくお願いします。

Aベストアンサー

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

でどうでしょうか?

QエクセルVBA 特定文字以外の行削除

こんにちは。

先日以下のURLで質問させて頂きました者です。
http://okwave.jp/qa/q8567085.html

そこで、教えて頂いたマクロは成功したのですが、
inputboxではない方法を知りたいです。

---前回頂きました回答を引用しております------------------------------
retu = "D"
word = InputBox(retu & "列に指定した文字が含まれていない行を削除します。" _
& vbCrLf & "検索する文字を入力してください。")
For i = Range("D" & "65536").End(xlUp).Row To 2 Step -1
If InStr(1, Range(retu & i).Value, word) = 0 Then
Rows(i).Delete
End If
Next i
------------------------------------------------------------------
この文の文字を入力せずに、
マクロの中に特定の文字を記入して、その文字列以外の行を削除したいです。

ご教授頂けたらと思います。

宜しくお願い致します。

こんにちは。

先日以下のURLで質問させて頂きました者です。
http://okwave.jp/qa/q8567085.html

そこで、教えて頂いたマクロは成功したのですが、
inputboxではない方法を知りたいです。

---前回頂きました回答を引用しております------------------------------
retu = "D"
word = InputBox(retu & "列に指定した文字が含まれていない行を削除します。" _
& vbCrLf & "検索する文字を入力してください。")
For i = Range("D" & "65536").End(xlUp).Row To 2 Step -1
If InStr(1, Range(retu & i).Value, word...続きを読む

Aベストアンサー

こんにちは!

ごく簡単に

Sub Sample1()
Dim i As Long
For i = Cells(Rows.Count, "D").End(xlUp).Row To 2 Step -1
If InStr(Cells(i, "D"), "検索したい文字") = 0 Then
Rows(i).Delete
End If
Next i
End Sub

こんな感じではどうでしょうか?

※ 「検索したい文字」そのものだけではなく、
「検索したい文字」が「含まれている」場合も適応されます。
「検索したい文字」そのものの場合は

>If InStr(Cells(i, "D"), "検索したい文字") = 0 Then
の行を
>If Cells(i, "D") <> "検索したい文字" Then
に変更してください。m(_ _)m

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

Qエクセルマクロ 特定の文字列を含む行を削除

マクロについて教えてください。
以下のなかから、りんごを含んでいる行のみ削除したいのです。
できれば、inputboxで削除したい文字列を入力するようにしたいです。
1|りんご|30
2|みかん|50
3|りんご|30
4|すいか|30
5|みかん|50
いろいろ調べましたがわかりません。。お願いします。

Aベストアンサー

>りんごを含んでいる行のみ削除
これは特定の列に削除文字列があれば削除するのですか? それとも列を限定せず1行のどこかに文字列があれば削除するのですか?

以下のサンプルはマクロ2行目で指定した列に指示した文字列がある行を削除していますが、マクロ中コメントアウトしている9行目を8行目のIf文と入れ替えると、1行のどこかに指定文字列があれば削除します。

Sub Macro1()
Const col As String = "A" '文字列が入力されている列
Dim idx As Long
Dim keyWord
keyWord = Application.InputBox("削除対象の文字列は?", Type:=2)
If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then
  For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1
    If InStr(Cells(idx, col).Value, keyWord) > 0 Then
'    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then
      Rows(idx).Delete
    End If
  Next idx
End If
End Sub

>りんごを含んでいる行のみ削除
これは特定の列に削除文字列があれば削除するのですか? それとも列を限定せず1行のどこかに文字列があれば削除するのですか?

以下のサンプルはマクロ2行目で指定した列に指示した文字列がある行を削除していますが、マクロ中コメントアウトしている9行目を8行目のIf文と入れ替えると、1行のどこかに指定文字列があれば削除します。

Sub Macro1()
Const col As String = "A" '文字列が入力されている列
Dim idx As Long
Dim keyWord
keyWord = Application.Inp...続きを読む


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

人気Q&Aランキング