- ベストアンサー
Excel2003で数字が8個連なった行のみを抽出し、他の行は削除する方法
- Excel2003でA列の各セルに存在するさまざまな文字列から、数字が8個連なった行のみを抽出し、他の行は削除する方法を教えてください。
- データの個数が日々増減しているため、毎回特定の行を削除するだけでは解決できない状況です。
- また、抽出作業をマクロ記憶しておきたいと思っています。Excel2003での方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
'これでよいのか分かりませんが数値の行だけ残るようにしてます。 Sub Macro1() GYOU = Range("A65536").End(xlUp).Row '終了行 RETU = 6 '作業列 For i = 2 To GYOU '開始行と終了行 Select Case Val(Cells(i, 1)) Case 0 Cells(i, RETU) = "" Case Else Cells(i, RETU) = 1 End Select Next i Columns(RETU).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Columns(RETU).ClearContents End Sub '開始行 2行目 作業列 6列目(F列)にしてます。
その他の回答 (5)
- KURUMITO
- ベストアンサー率42% (1835/4283)
2行目から下方にデータがあるとして、作業列としてF2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(LEN(A2)=8,ISNUMBER(A2)),MAX(F$1:F1)+1,"") シート2では抽出されたデータを表示させるわけですがA2セルには次の式を入力してE2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OUNTIF(Sheet1!$F:$F,ROW(A1))=0,"",INDEX(Sheet1!$A:$E,MATCH(ROW(A1),Sheet1!$F:$F,0),COLUMN(A1))) これでシート1に新たなデータが追加されても、削除があっても、その結果は自動的にシート2に反映されます。 マクロで実行させることは全く必要ないでしょう。
お礼
回答ありがとうございます。 高い知識を持った沢山の方々が回答してくださって感謝しきりです。 ありがとうございます。 KURUMITOさんがくださった回答は、 個人的にコピペして保存しておき、 いつでも使えるようにしておきたいと思います。 本当にありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外していたらごめんなさい。 条件がはっきり判らないのですが、8桁の数字・・・ということですが 文字と数字が入っている場合もあるのでしょうか? もしそうであればお役に立たないと思いますが・・・ あくまで数値の桁数は考えずに、A列が数値の場合のみをSheet2に抽出するようにしてみました。 ↓の画像でSheet2のA2セルに =IF(COUNT(Sheet1!$A$2:$A$1000)<ROW(A1),"",INDEX(Sheet1!A$2:A$1000,SMALL(IF(ISNUMBER(Sheet1!$A$2:$A$1000),ROW($A$1:$A$999)),ROW(A1)))) これは配列数式になってしまいますので、この画面からコピー&ペーストしただけではエラーになると思います。 貼り付け後、F2キーを押す、又はA2セルをダブルクリック、又は数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定してください。 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、数式はSheet1の1000行目まで対応できるようにしています。 以上、参考になれば良いのですが 最初に書いたように大きく外している可能性がありますので その場合は読み流してくださいね。m(__)m
お礼
回答ありがとうございます。 今回は少し求めていたものと違ったのですが、 勉強用に数式をコピーさせていただきます。 関数もっと勉強しなきゃな。
- keithin
- ベストアンサー率66% (5278/7941)
例えば。 数値に書式でゼロを足して表示しているんじゃなく,間違いなく「00000001」のような8個の文字で記入されているデータなら,さくっとオートフィルタで絞って削除してしまうので十分かと思います。 sub macro1() activesheet.range("1:1").insert activesheet.range("A:A").autofilter filed:=1, criteria1:="<>0???????" activesheet.cells.delete shift:=xlshiftup end sub ご相談に掲示されたサンプル通りであれば上述のようで大丈夫ですが,実際のデータはどうなってるのか判りません。 実際にオートフィルタを取り付けて,どういう絞り込みをしたら要らない行をきっちり絞り出せるのか,あなたが持っている実際のデータで少し検討してからマクロに組み込んでみてください。
お礼
回答ありがとうございます。 オートフィルタは何をやっても無理でした。 いや、何かしら方法はあるのかもしれなかったですが、 私の力では無理でした。 ですが私も経験を重ねkeithinさんの下さったような案が 出せる人間になりたいと思います。 今回の数式を保存して、勉強用とさせていただきます。 ありがとうございました。
- popuplt
- ベストアンサー率38% (31/81)
作業列を作成して削除します。 [F1]=(LEN(A1)=8)*ISNUMBER(A1*1) F列を選択して、[検索]-[検索条件=0](オプションの検索対象=数値)で[すべて検索] [CNTL]+[A]を押して、検索されたすべてのセルを選択します。(0のセルだけが反転します。) 選択されたセルの上で右クリックして[削除]-[行全体]-[OK] 作業列は削除。 こんな感じかな?
補足
とりあえず家の2007でやってみたのですが、 Test No自体も選択されてしまいうまくいきませんでした… 私が何か違っているのでしょうか。 実務ではTest Noにあたる部分のものを使い、 Vlookで参照しながら仕事をするので そこが消えてしまうのはまずいです。 とりあえず、明日、会社の2003でもう一度試してみます。
- mar00
- ベストアンサー率36% (158/430)
データの並べ替えを行ってから 削除するようにしては? >また、この抽出作業をマクロ記憶しておき、 手間を省きたいと思っています。 イメージが出来ているならマクロを作ってから うまくいかないところを質問した方が早いのでは?
補足
会社のデータをまるまる使うのはどうかと思いましたし、 かといって自分で煩雑なデータを作るのは正直面倒でした。 会社のデータは、もともとエクセルではないデータを無理やりExcelに飛ばしている形式なので、 図のように整然とされていなく、 同じ列に空白や文字列、記号など様々なセルが混ざっています。 昇順、降順を行っていただけでは思い通りにならず、 上部に固まって出てくる文字列と下部に固まる文字列を削除しなければなりません。 そしてその数字の部分が出す時期によって量がことなるので、困っているのです。 ちなみにVBAなどは簡単になら読めますが、 記述する能力はありません、ごめんなさい。
お礼
回答ありがとうございます。 『数値の行を残す』こそが実際私がしたかったことでした。 イマイチな説明から求めていた回答をくださった、 mar00さんの回答をベストアンサーとしたいと思います。 ありがとうございました。 さっそく使わしていただいてます。
補足
回答してくださったみなさん、 ありがとうございます。 ちょっと忙しくて現在すべての項目を試すことができてません。 ごめんなさい。 時間ができ次第、試してみたいと思います。 そのときに個別にお礼をさせていいただきます。