• ベストアンサー

EXCEL 一覧表の頭記号と一致した行のみ削除

規格部品として頭に2桁又は3桁の記号+数字が付いた規格部品があります。(一覧表有り) 例) PA, PG, QA, SB, BAA等複数<記号の後に続く数字の桁数は不統一です。> 今回作成する個別リスト上のE列に全部品の品番が記載されていますが、規格部品が記載されている行のみを一括削除出来ればと考えています。 そのようなことが可能なのかわかりませんが、マクロの詳しい方がおりましたら是非教えて下さい。 尚、一覧表は別ファイルですが、別シート(SHEET2)に貼り付けてからでも可能です。 宜しくお願いします。 PS: EXCEL2003を利用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.2・3です。 No.2の画像通りの配置だとすると Sheet2の「規格品コード」の数字より前の部分がSheet1のE列と同じ場合、その行を削除すればよい訳ですよね? コードを↓に変更してみてください。 Sub Sample2() Dim i As Long, k As Long, lastRow As Long, lastCol As Long Dim str As String, buf As String, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row For k = 1 To Len(wS.Cells(i, "A")) str = Mid(wS.Cells(i, "A"), k, 1) If Not str Like "[0-9]" Then buf = buf & str Else Exit For End If Next k .Range("A1").AutoFilter field:=5, Criteria1:=buf & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Range(.Cells(2, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Delete shift:=xlUp End If .AutoFilterMode = False buf = "" Next i End With Application.ScreenUpdating = True End Sub ※ 今回もNo2の画像の配置通りとします。 (列は1行目の項目が入っていれば何列あっても構いません)m(_ _)m

yasuhito_s1
質問者

お礼

お世話になります。 再度回答有難うございます。 大変恐縮ですが、やはり上手くいきませんでした。 リストのデータが全て消えてしまいます。 明日、もう一度トライしてみます。

yasuhito_s1
質問者

補足

お世話になります。 ご連絡が遅くなり申し訳ありません。 再度トライしたところ、Sheet2に記載の規格部品リストの行間が所々空白になっているところが有り、空白が無いようにして再トライしてみました。 感激です。 完璧に一括削除出来ました。 有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.6

>削除されず残っている行は末尾に記号付きのもののように思います 再掲: >シート2のA2以下に、削除したい言葉そのものを記入する  PA  PG  QA  BAA  : >のように 回答で説明さしあげている通り,たとえば AH06130MBF なら,実際に削除したい対象となる文字だけを残して AH となってなきゃダメということです。 後ろにまた文字が現れるというのは「元々は無かった条件」なので,当然ダメですね。 やり直し: sub macro0()  dim i as integer  for i=0 to 9  worksheets("Sheet2").range("A:A").replace what:=i & "*", replacement:="", lookat:=xlpart  next i end sub 他は先の回答の手順通りなので,間違えないようよく見直しながら実施して下さい。

yasuhito_s1
質問者

お礼

お世話になります。 お忙しいところ回答有難うございます。 Sheet1の本リスト上では「頭記号+数字+記号」のまま、他部品品番と複数混在していますが、Sheet2の規格部品リストA列上では頭記号のみになっています。 その状態でメインマクロを実行してみましたが、規格部品全てを削除することが出来ませんでした。 ※1行目のタイトル行も消えてしまいます。 説明不足でも想定して対応して頂き、大変感謝しています。 有難うございました。

全文を見る
すると、全ての回答が全文表示されます。
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

マクロが目的でしょうか?この程度の処理なら下記の手順で可能です。いつも、マクロを書くよりも速く終わっています。やっていることが見えるのが一番いいです。目的のデータにエラーを発生させ一括処理の対象としてつかめるようにしています。 ご参考に。 規格部品の表がH11:H13にあったとして、例えばF列が使えるとして、 1.添付図のような状態でF2セルに  =IF(ISERROR(VLOOKUP(E2,$H$11:$H$13,1,0)),E2,1/0) と入力し、下にコピーします。規格部品の場合、エラーになります。 2.F列の算式をすべて選択状態のまま、ファンクションキーF5を押します。 3.ジャンプダイアログボックスでセル選択ボタンをクリック。 4.選択オプションダイアログボックスで数式のエラー値のみにチェックしてOK。 5.カレントセルで右クリックして「削除」を選択。 6.削除選択ボックスで「行全体」をオンにしてOK。 7.終わったらF列は始末します。

yasuhito_s1
質問者

お礼

お世話になります。 回答有難うございます。 私の説明不足なのか、規格部品についてもなぜか?エラーが出ませんでした。 でも、マクロ以外でも遣り方があるのだと勉強になりました。 お手数おかけしました。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です。 タイトルの >・・・一覧表の頭記号と・・・ を見逃していました。 前回のコードは完全一致となりますので、 No.1さんの方法が正しいです。 どうも失礼しました。m(_ _)m

yasuhito_s1
質問者

お礼

コメント頂き有難うございます。 失礼だなんて少しも思いません。 条件次第でいろいろと変わるものだと勉強になります。 お手数おかけしました。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! ↓の画像のように元データは左側のSheet1にあり、 規格品コードは右側のSheet2のような配列になっているという前提です。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim i As Long, lastRow As Long, lastCol As Long Dim c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row Set c = .Range("E:E").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then .Range("A1").AutoFilter field:=5, Criteria1:=wS.Cells(i, "A") Range(.Cells(2, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Delete shift:=xlUp End If .AutoFilterMode = False Next i End With Application.ScreenUpdating = True End Sub ※ 元データそのものを削除するようにしていますので 別Sheetでマクロを試してみてください。m(_ _)m

yasuhito_s1
質問者

お礼

お世話になります。 お力をお貸しして頂き有り難く思っていますが、なぜか全て削除されてしまいます。 まだまだ私には力不足で、どう修正するべきかもわかりませんが、回答して頂き感謝しています。 有難うございます。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

シート1の1行目にタイトル行 2行目からデータ E1セルにE列のタイトルとして「何某」と記入されている 準備: シート2のA1セルにシート1のE1と同じ「何某」と記入する シート2のA2以下に、削除したい言葉そのものを記入する PA PG QA BAA : のように 【参考】 手を動かして元リストから不要な数字を削除することがどーしてもできない場合: シート2のA1以下に 何某 PA123456 PG22345 BAA333456  : のように、元データをとにかく列挙する ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro0()  dim i as integer  for i=0 to 9  worksheets("Sheet2").range("A:A").replace what:=i, replacement:="", lookat:=xlpart  next i end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する 以上で削除したい正しいリストが準備出来たら 本番: ALT+F11を押す 標準モジュールを挿入する 下記をコピー貼り付ける sub macro1()  worksheets("Sheet1").select  range("E:E").advancedfilter _   action:=xlfilterinplace, _   criteriarange:=worksheets("Sheet2").range("A1").currentregion, _   unique:=false  range("E2:E" & range("E65536").end(xlup).row).specialcells(xlcelltypevisible).entirerow.delete shift:=xlshiftup  activesheet.showalldata end sub マクロを実行して完成。

yasuhito_s1
質問者

お礼

お世話になります。 お忙しい中いつも有難うございます。 申し訳ありませんが、規格部品全てが削除されず、いろいろと試しているのですが上手くいきません。 一つだけ質問させて頂いても良いでしょうか? 規格部品の品番ですが、頭に「記号+数字」と記載しましたが、下記のように「記号+数字+記号」となっている部品品番もあります。 例) AH06130MBF AH05065M QP10010P 削除されず残っている行は末尾に記号付きのもののように思いますが、何かマクロの改良が必要なのでしょうか? ご教示して頂けると助かります。 お手数おかけします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • おねがします。仕入部品の単価一覧表を作成したいのです。

    おねがします。仕入部品の単価一覧表を作成したいのです。 部品コード 部品名 単価 と項目があります。 単価の入力制限を設けたいのですが、どうしたらよいか分かりません。 入力規則かとも思い試したのですがうまくいきません。 単価の入力規則は、桁数の制限です。 8桁と少数は2桁 つまり、 12345678.12 入力のデータは 100 159 854625 1500 10.15 100.1 1.44 一応、1000万に対応すべく8桁にして、少数は0.44のように2桁としたい。 この規則以外は入力できないようにしたいのです。 どうかおねがいします。

  • Excel シート1の雛型からシート2の一覧表作成へ

     お世話になります。  私は会社でExcelを使い事務をしております。  式を入力して少し事務を簡素化する事は出来ますが、マクロやVBには明るくありません。  シート1の雛型1箇所に入力すると同時に、シート2に一覧表が作成される様には出来ないものでしょうか?  頑張ってマクロを使ってみましたが、シート1のB1を入力するとシート2のB1の数値まで変わってしまいます。(表を参考にしてください)  シート1(雛型)    A       B        C 1 固定数  入力した数字  数式A/B  シート2(一覧表)     A           B         C 1 シート1A1の数字 シート1B1の数字 シート1C1の数字  2 シート1A1の数字 シート1B1の数字 シート1C1の数字 3 シート1A1の数字 シート1B1の数字 シート1C1の数字 4 シート1A1の数字 シート1B1の数字 シート1C1の数字  分かりにくい説明で申し訳ありません。  皆さまのお知恵をお待ちしております。  よろしくお願いします。

  • エクセルにて複数のファイル(一覧表)から参照を切替えて検索するには?

     部品調達部門で仕事をしていますが、今、新たに関連資料の作成で頭を痛めています。    A      B       C       D        マークII   クレスタ   チェイサー   1 タイヤ   ○○    ○○      ○○ 2ハンドル  ○○    ○○      ○○ 3ホイール  ○○    ○○      ○○ 4シート   ○○    ○○      ○○ 5ダッシュ  ○○    ○○      ○○ と言うような表があり、別のシートに部品別に納品予定表を組もうと考えています。A列の構成部品は車種により違います。(車種により部品有/無がある)  またこの一覧表はシリーズ毎に複数あり、(カローラ/スプリンター)(ハイエース/グランビア)色んなシートが存在します。  そこで予め、生産予定に従って部品別の納品予定を次のようにしたいのです。  11月度予定  計   タイヤ番号  1マークII   300    ○○  2ハイエース  50      ○○  3クレスタ    100      ○○  4カローラ    500      ○○ と言う風に、VLOOKUP+MATCH,又はINDEX+MATCH+INDIRECT関数を複合、切替えてA列車種に応じた一覧表ファイルからタイヤ番号を表引きしたいのです。  元データー一覧表が複数あるためにこれをINDIRECT+セル範囲名前で切替えたいのですが、テキスト活用例にあまり載っていないのでよく分かりません。INDIRECTをどこに入れれば良いでしょうか?他に簡単に切替える方法、関数の組み合わせはありますか?  車種がマークIIならマークII一覧表のタイヤデーター番号を検索し別表に表示させたいのです。IF+OR/IF+AND/IF+文字検索関数ではかなり式が長くなるように思います。一番簡単に表引きが可能な方法を教えてください。  

  • 条件に一致する行を削除するマクロの書き方

    お世話になります。 EXCELのシート(添付参照ください)で受発注管理をしてます。 「No.」は(月2桁)(日2桁)(連番=01~無限。これまでの最大は3桁)+アルファベット(1文字以上) で自動的に振られます。 ここから別ファイルをつくりたいのですが。 0)シートを新しいブックに「コピー」 1)「出荷数」に何らかの数字がある行を削除 2)「メモ」に特定の言葉(この表では”倉庫”)がある行を削除 3)作業日(この表では0912XXa=9月12日)から1か月以前のデータの行を削除   (つまり8月13日以降のデータを残す) 4)表全体を選択して「No.」をキーにして並び替え 5)セルA1を選択 6)名前を付けて保存(形式は 「(特定の言葉)+(西暦年4桁)(月2桁)(日2桁)+データベース.xls) これを一連のマクロで処理したいと考えております。 0、1、2、4、5、6は何とかなりそうなのですが、3)が私の技量ではできません。 1か月前ということは上に書きました通り、8/13~のみ残すということなのですが、 アタマに0813が付くデータはありません。この場合は0828~を残します。 2か月前でしたら同じく0713XXxのデータはありませんので、 0714~以降を残すことになります。 これはどうやって記述すればうまくいくでしょうか? ご教示いただければ幸いです。 ※すみません。再掲です。  「何とかなりそう」と書いたのですが、ほかの部分も怪しいです。  可能でしたら0~6すべて書いていただけると喜びます。

  • エクセルでこんな表を自動的に作りたいです

    エクセルで下記のような停止値一覧表があります。 <停止値一覧> 記号  停止値 a    3 b    2 c    5 d    4 e    10 上記のデータを元にして、下記のような記号別の連番表を別シートに自動的に作りたいのです。。。 <連番表> No  記号 0   a 1   a 2   a 0   b 1   b 0   c 1   c 2   c 3   c 4   c 0   d 連番表の「No」は連続データで、 ・開始値=ゼロ、 ・停止値=<停止値一覧>の停止値からマイナス1した値、 ・増分=1 です。 関数で簡単に出来ますでしょうか?それともマクロか何かになるのでしょうか..? 分かりにくい説明で恐縮ですが、いい方法をお分かりの方、助けて頂けないでしょうか。 よろしくお願いします。 追記:エクセルは2002を使用しています

  • エクセル2010 一覧表から抽出したい

    一覧表の中に複数の業者があり、それを別の表に1種類(1業者毎に)づつ表示する事はできますか? 言葉がわからないので抽出と書きました F列に自分で業者名を書いて合計を出すことはできますが、自分で書かなくても 自動で重複することなく並べたいです。 また、別シートにも同じように重複することなく並べたいと思っています 画像を添付しますので宜しくお願い致します 説明が下手ですいません

  • 資格一覧表について

    エクセル2010を使用しています。 何度か関数についてお聞きしてデータがうまくいったのですが、 社員が入れ替わる度にデータを変換をしなければいけなく大変な処理になってしまいました。 一番いいのは「アクセス」が使えると楽だと思うのですが、現状では「アクセス」を使えるほどのスキルがありませんので、エクセルにて教えて頂けたらと思います。 まず各部署のシートにそれぞれの記入をします。 記入をしたら全社員一覧表にそれぞれ関数にて記入される状態にしたいのです。 (シート等が移動になっても) 管理番号の所に数字を記入をされたら氏名とその人の資格一覧枠に記入が入る状態にしたいのです。 また、資格一覧枠には資格を取得をしたら「○」の記号を入れたいと思っています。 自分なりにLOOKUP等を使ってしようと思ったらセル入力が並んでないとできない感じだったのです。(なんらかの方法でできる?) 申し訳ありませんが、エクセルに詳しい方、得意な方、こんな管理の仕方もあるよ、ってご存知の方お忙しいと思いますがご協力をお願い致します。

  • &♯9829等の一覧表

    &♯9829(ホントは小さいシャープですが)と 入力すると、ハートマークになりますよね。 数字の部分が違うと別なマークになると思うの ですが、どこかのHPで一覧表はありますか? よく行くチャットでハートマークを使用している のですが、それしか知らないんです。 過去の質問を見ても、一覧表に関する事は 無かったので、質問しました。 よろしくお願いいたします。

  • EXCELファイルの一覧表形式での取込について

    EXCELで以下のような事を実現しようとしています。 まだマクロや関数等の知識が少なく、どう作っていけばいいのかよくわからないため、 教えていただけますでしょうか。 <やりたい事> ・図1の様なEXCELフォーマットに内容を入力し、別ファイルのEXCELシート(図2)に  一覧表の形で取り込む。・・・図2の一覧表で発注状況を管理。 ・新たに発注するような場合は、図1のフォーマット(シート)をコピーし、内容を入力。  →その都度 図2の一覧表に追加(最終行の後に追加)。 ・図1はブック形式で、発注日付毎にシートを分けて保存。図2へは、表示している  シートの内容のみ取り込む。(取り込みボタンを作る等考えています)。 ・空欄の場合は図2の一覧表には取り込まない。 ・図1と図2は別ファイル(リンクしないファイル)として保存。

  • エクセルのひと月の一覧表から誰が、いつ、どれだけの量を使用したか抽出したい

    エクセルのひと月の一覧表から誰が、いつ、どれだけの量を使用したか抽出したい 月集計表(シート名) 氏名|番号| 1 | 2 | 3 | 4 | 5 | 6 | 7 | A氏| 1 | | | | |500| | | B氏| 2 | |150|213| | | | | C氏| 3 | | | | | | | | D氏| 4 | | | | |534| | | 今の上のような月の一覧に使用した量を入力しています。 番号の列の数字はその左のセルにある各顧客の管理番号、一番上の行にあるのが月の日付です。 これが6月の各顧客の一覧だとして 使用回数(シート名) 氏名|番号|_1回目_|_2回目_|_3回目_|→4,5,6回目と続く A___|1___|6/4|500|___|___|___|___| B___|2___|6/2|150|6/3|213|6/7|100| C___|3___|___|___|___|___|___|___| D___|4___|6/5|534|___|___|___|___| 管理番号の並びは変えずにこのような一覧を別シートに作りたいのです。 月の一覧に入力したら自動的にこちらにも入力されるような方法はあるでしょうか?あったら方法もお願いします。

専門家に質問してみよう