- ベストアンサー
エクセルの関数によるデータ加工
- エクセルのデータ処理に困っています。シートA、シートB、シートCの3つのデータがあります。シートB・シートCはシートAからデータ抽出して追加加工したものです。シートAのうちどのデータがシートB・Cにて未加工かをフラグを立てて一目でわかる数式を教えてください。
- シートAには番号、氏名、内容の項目があります。シートB・Cには番号、氏名、住所の項目があります。氏名は変更される可能性があるため、共通する項目は番号のみです。
- シートBにはシートAのデータから抽出して加工したデータがあります。シートAの番号と氏名のデータの一致を確認するために、どの数式を使用すればいいでしょうか?また、シートCにはシートAのデータから抽出して加工したデータがあります。シートAの番号と氏名のデータの一致を確認するために、どの数式を使用すればいいでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
つまり、シートBにもシートCにも載っていない人に○を付ければいいのでしょうか。 それなら、シートAのD2に次の式を入力し、下へ必要なだけコピーしてください。シート名がわからなかったのでシートB・CをSheet2・3としてあります。 =IF(AND(COUNTIF(Sheet2!A:A,A2)=0,COUNTIF(Sheet3!A:A,A2)=0),"○","")
その他の回答 (4)
回答No.2です。式の説明をします。 COUNTIF(Sheet2!A:A,A2)=0 これは、Sheet2のA列(番号の列)に、A2(この場合101)がいくつあるか計算するものです。これが0ということは、101はないということになります。 COUNTIF(Sheet3!A:A,A2)=0 上と同じことを、Sheet3に対してやっています。 AND(COUNTIF(Sheet2!A:A,A2)=0,COUNTIF(Sheet3!A:A,A2)=0) 上記の2つCOUNTIF関数をAND関数でくくっています。これが成立するのは、Sheet2のA列にも、Sheet3のA列にも、101がない場合です。 関数全体としては、AND関数が成立するときに○を、そうでなければ空白を返すようになっています。 ---------------------------------------------------------------- お示しの式は正しいように思います。私も試してみましたが、ちゃんと笹田さんのところに○がつきました。 考えられるのは、L列のデータに数字に混じって文字列があるのではないか、ということです。 また、この式ではあるかないかしか判断していませんので、編集(加工)してあるかどうかを判断することはできません。
- imogasi
- ベストアンサー率27% (4737/17070)
>未加工かをフラグ・・ 未加工を発見する方法はどういうものになるかを、質問に具体的に書かないと、読んだものには、推測でしかものが言えない。 加工って、考え出したら、色々考えられるから。 シートAに在る番号が、シートB、シートCの決った列ににおいて、見つかるかどうかを調べたいのか?。それならそのように限定して、その関数による方法(関数式はどうなるか?)を聞かないと。 ーー もしそれならVLOOKUP関数のFALSE型やMATCH関数で調べられる場合であろう。ただチェックの相手が2シートあるので1列にサインを立てるのは式が複雑になる。 例データ Sheet1 A列 B列 a NF b c d f NF g Sheet2 A列 c d j Sheet3 A列 b g h ーーー Sheet1のB2の式は =IF(OR(NOT(ISERROR(VLOOKUP(A2,Sheet2!$A$1:$A$100,1,FALSE))),NOT(ISERROR(VLOOKUP(A2,Sheet3!$A$1:$A$100,1,FALSE)))),"","NF") 式を下方向に複写する。 結果は B列。 Vlookupで見つかったは、NOT(ISERROR(VLOOKUP(・・・))) で見つける。ORはどちらかのシートで見つかれば良いという式。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 私の読解能力が乏しいために 解釈が違っていたらごめんなさい。 質問の表をみると単純にSheetBかSheetCにデータがないものに「○」を付ける感じですので No.2さんの方ですでに回答は出ていると思うのですが、 質問の文章に >ただシートAのうちどのデータがシートB・Cにて未加工かを・・・ とありましたので 各Sheetに抽出後、データ入力(加工)していないものに「○」を付けるのかな? と思って顔をだしました。 ↓の画像で説明させていただくと SheetB・C共に作業用の列を使わせてもらっています。 両SheetのE2セルに =CONCATENATE(A2,B2,C2,D2) という数式を入れオートフィルで下へコピーします。 (数式は =A2&B2&C2&D2 でも構いません) そして、SheetAのD2セルに =IF(A2="","",IF(OR(COUNTIF(SheetB!$E$2:$E$100,CONCATENATE(A2,B2,C2)),COUNTIF(SheetC!$E$2:$E$100,CONCATENATE(A2,B2,C2))),"○","")) という数式を入れ、オートフィルで下へコピーすると 画像のような感じになります。 (数式は100行まで対応できるようにしていますが、データ量によってアレンジしてください) これでSheetAと変化していないものだけに「○」が表示されると思います。 以上、参考になれば幸いですが、 的外れなら読み流してくださいね。m(__)m
- DIooggooID
- ベストアンサー率27% (1730/6405)
シートB、 シートC の各項目に対し、 VLOOKUP関数を使って、シートA の項目と比較して、 一致/不一致 を見ることになると思います。 http://allabout.co.jp/gm/gc/3143/
補足
回答ありがとうございます。 こちらの数式で見本で作ったデータではうまく適用できた のですが実際のデータベースで列名など変更して貼り付け ましたが○が正しく付く場合と付かない氏名が出てきています。 おそらく式の意味をわからず変更してしまっているようです。 すみませんがこの式の考え方を教えていただけるでしょうか? 実際の列名はL列なので A→L に変更しています。 =IF(AND(COUNTIF(Sheet2!L:L,A2)=0,COUNTIF(Sheet3!L:L,A2)=0),"○","") お手数ですがよろしくお願いいたします。