- ベストアンサー
抽出の方法
excelで表が作ってあって、 担当者名、支店コード、部コード、課コード があります。 で、支店コードが00で、なおかつ部コードが11の人で 課コードの11,12,13、20以外の人を抽出したいのですが、思いつく方法は まず、支店コードと部コードの人をオートフィルタで抽出し、そのデータをコピーし、違うシートに貼り付け、目で課コードの11,12,13,20の人を見つけて削除してるのですが もっと、簡単に抽出できませんか?? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
担当者名,支店コード,部コード,課コードがそれぞれA,B,C,D列にあり,2行目からデータが始まっていると仮定すると,2行目の最後に =IF(AND(B2=0,C2=11),IF(AND(OR(D2<11,13<D2),D2<>20),1,0),0) という関数を入れると抽出対象者は1,抽出対象外の人は0が出力されます. その結果をオートフィルターで抽出しても良いですし,関数を入力した列を使って並べ替えてから削除(順番が復元できない場合には,先に並べ替えて順番を戻せるように通し番号をつけておく)するという方法でもできます.
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでは下記が1例です。 J=30は余白部の行番号数を指定。 Case文のこの書き方の方が、関数式より判りやすいと思うのですがどうでしょう。 For i = 1 To 20の20は最下行行番号数です。 case case や case else end select はその行間に何も書いてないので、何もしない、即ち処理をしないことを表現できます。 Sub test02() j = 30 For i = 1 To 20 Select Case Cells(i, "A") Case "00" Select Case Cells(i, "B") Case "11" Select Case Cells(i, "C") Case "11" Case "12" Case "13" Case "20" Case Else Cells(j, "A") = Cells(i, "A") Cells(j, "B") = Cells(i, "B") Cells(j, "C") = Cells(i, "C") Cells(j, "D") = Cells(i, "D") j = j + 1 End Select Case Else End Select Case Else End Select Next i End Sub
- snoopy64
- ベストアンサー率42% (337/793)
#2の方の方法が簡単だと思います。 ただ、#1の方への補足を見ますと文字列だとのことですので、それを考慮に入れて補足させていただきます。 E2セルに次の式を入力します。 =IF(AND(B2="00",C2="11",NOT(ISBLANK(D2)),SEARCH(D2,"11,12,13,20")>0),"削除","") E2セルを下方に必要なだけコピーします。 オートフィルタでE列=削除を選択して行削除 どうでしょうか。頑張ってくださいヽ(^。^)ノ ・・・と書いているうちに自己解決したようですね(>_<)
補足
うーん...#VALUE!のエラーがでます。
- mshr1962
- ベストアンサー率39% (7417/18945)
フィルタにこだわるなら 別のシートに 支店コード、部コード、課コード 00 11 11 12 13 20 として 「データ」「フィルタ」「フィルタオプションの設定」で 抽出条件に上記の範囲を設定してください。
補足
課コードは11,12,13,20以外なので <>11<>12<>13<>20としても 抽出されないのです。すいません。ありがとうございます。
- adol37
- ベストアンサー率36% (26/72)
課コードにどんな要素があるかわかりませんが、オートフィルタの中のオプションを選択して最初の条件に「1?」で「始まらない」、並列条件をorにして2つ目の条件に「20」で始まらないとすればいいんじゃないでしょうか?
お礼
このコードは関数を利用して抽出したので文字列になっています。そのせいかどうかわかりませんが??? 課コードがうまく抽出されず、20で始まる人が入っていたり、12の人が入ってしまったりしてしまいます。
お礼
""つけてできました。 ありがとうございます。 ただ、関数をいれるのが結構大変でした。 (^^ゞ