『異なる2つのファイルのシートを比較し、2つの条件にあったものに印(*)をつけたい』(困りました・・・) エクセルマクロ初心者です・・・ 異なる2つのファイルシートAとBで、条件にあったものに * をつけたいのですが、 なかなか上手くいきません・・・ 【条件】 ファイルシートA M列(M4〜) ファイルシートB D列(D2〜) ファイルシートA N列(N4〜) ファイルシートB E列(E2〜) が同じならば、ファイルシートB の L列に * を入れたいのです。 ファイルシートA A B C D E F G H I J K L M N ・・・ 4 あ い う え お か き く け こ さ し す せ 5 そ た ち つ て と な に ぬ ね の や ゆ よ ファイルシートB A B C D E F G H I J K L M N ・・・ 2 た ち つ す と な に ぬ ね の は *  3 ま や ら わ よ ん あ い う え お *  条件が、2つあり、どのように処理したらよいか??です・・・ どなたかお知恵をお貸しいただけませんでしょうか? よろしくお願いいたします。 ---- どちらか一方の組みが同じだったら「*」で良いんですかね? Bシートの L2=IF(AND(COUNTA(A!M4,B!D2,A!N4,B!E2)>0,OR(A!M4=B!D2,A!N4=B!E2)),"*","") 下にコピー。 (HANA) ---- ブックも違ったのですね。 AシートがAと言う名前のブックに有るとして (Aシートが開いている状態の時の式です) Bシートの L2=IF(AND(COUNTA([A.xls]A!M4,[A.xls]A!N4,D2,E2)>0,OR([A.xls]A!M4=D2,[A.xls]A!N4=E2)),"*","") 下にコピー。 (HANA) ---- 横から失礼します。(別の人の質問に入ると掟破りになるでしょうか?) HANAさん、私は出来ました。 以前、重複の自分の質問でシート間の重複を調べたい旨、書かせていただきましたが 「 困りました・・・」さんの質問が、同じような感じだったので、 HANAさんの式のセルをすべて1(A!M1・・・等)に作り変えてみたところ、みごと 思い通りの結果を出すことが出来ました。 重複で教えていただいた方法(式)の応用だと思いますが、 自分で、ここまでの応用は、できませんでした。(色々チャレンジしてみたのですが) 明日から仕事で生かすことができます。ありがとうございます。 「 困りました・・・」さん、横からごめんなさい。 (ranmal) ---- ranmalさん 出来ましたか。良かったです。 (困りました・・・)さんの困ったも解決出来ていると良いのですが・・・。 >重複で教えていただいた方法(式)の応用だと思いますが、 えっと・・・違います。(多分) [[20061018231154]]『同じ行データの検索』(ranmal) あれは、COUNTIF関数を使ったものですよね。 これはIF関数を使って単純に見比べています。 「あるセルと同じ順番に並んでいる別のセルとの内容を見比べたい」 とか言う時に便利だと思います。 「どこにあるか分からないけど、とにかくこれと同じものがあれば・・・」 とか言う時には向かないでしょう。 (もしかして >Y13=IF(COUNTIF($X$13:X13,X13)>1,"TRUE","FALSE") こっちの話だったのですかね?これなら似ていますが・・・・・) (HANA) ---- >Y13=IF(COUNTIF($X$13:X13,X13)>1,"TRUE","FALSE") >こっちの話だったのですかね?これなら似ていますが・・・・・) そうです。この式の応用と考えてしまったのですが・・ ・ まだまだですね。私。(^_^.) >「あるセルと同じ順番に並んでいる別のセルとの内容を見比べたい」 私の場合は両シートとも、列NO.は違っても、同列に同じ内容のデータが並んで いるので、結果が出せたのですね。 マクロを使わない場合は、元データが50位あって、シート内のどこにあるか 分からないけど、それと一致するものを探し出す・・なんてことは出来ませんよね。 ctrl+Fキーでの検索では1個ずつしか探せないし・・ 仕事で使うデータは大抵並んでいるので便利に使うことが出来ています。 HANAさん、今後とも宜しく指導お願いいたします。(^_^) (ranmal) ---- ははぁ、やっぱりIF関数の話でしたか。 どちらもIF関数を使っていますが 前の方法を知ったからその「応用」で今回の方法が分かるか・・・ と言うと、そうは言えないと思います。 IF関数は単に「この場合はA、そうでなければB」と 場合分けをするだけの関数で、重要なのは「この場合は」 の部分の式をどの様に設定するかだと思います。 どちらかというと「Y13=TRUE」と書いた部分 (条件付き書式を設定した時の数式です)の方が 今回の式を思いつくのに近かったのかもしれません。 今回の式の「この場合は」の部分を見てみると AND(COUNTA(A!M4,B!D2,A!N4,B!E2)>0,OR(A!M4=B!D2,A!N4=B!E2)) この部分ですが・・・・・COUNTA関数の方は単にエラー処理で 重要なのはOR関数で纏められた方です。 OR関数はご存じですよね?(今回は二つなので)「どちらかがTRUEならTRUE」です。 “どちらか”の片方を取り出すと「A!M4=B!D2」ですね。 「シートAのM4セルの値とシートBのD2セルの値は同じですか?」 を確認する式になっています。 「Y13=TRUE」とよく似てると思いませんか? こちらは「Y13セルの値はTRUEと言う値と同じですか?」ですよね。 応用を試みるか別の方法を探すのかの分かれ目は 「あ、この関数見たことがある」ではなく 「あ、この考え方つかえるかも」だと思います。 そのためには、式の考え方が何となくでも分かる事が必要でしょう。 と、言うことで >マクロを使わない場合は、元データが50位あって、シート内のどこにあるか >分からないけど、それと一致するものを探し出す・・なんてことは出来ませんよね。 この部分は、例えば「列は特定出来るがどの行に有るか分からない」と言うだけなら 「COUNTIF関数ってどんな関数?&  前回どうして同じ内容かどうかが分かったんだっけ?」 ってのが分かったら 「それと一致するもが存在するかどうかチェックする」 方法は案外簡単に見つかるかもしれません。 (HANA) ---- 出来るということなのですね? 考えて見ます。 出来たら、必ず書き込みます(時間はかかるかもしれませんが・・) (ranmal) ---- HANAさん、報告が大変遅くなりました。 HANAさんから課題を頂いたという認識で HANAさんの大事なコメントを読み流してしまい 自分の世界で考えすぎていました。 IF関数を使うということだけ、HANAさんのコメントにてINPUTされていたのですが なんとか自力で思い、MATCH関数、INDERECT関数、DGET関数、それから 馬鹿な方法でVLOOKUP関数の1列指定(苦し紛れです。情けない・・) ・・と色々挑戦して、全部・・方向が違うということに気づき、 HANAさんのことだから、今まで教えていただいたこと以外の方法での 課題は出さないと思いつき(今更ですが・・) 再度、上記コメントをじっくり、読み、分かりました。 出来たんですぅーーーーっ。すごく嬉しいです。 リスト(検索する元データ)がシート2のC1からC10にあるとして 検索対象がA列にある場合。 =IF(COUNTIF(Sheet2!$C$1:$C$10,A3)=1,"*","") この式をしたまで式コピーして、あっという間に検索できました。 HANAさんをはじめ、今まで私に教えてくれた先生方などが この質問と、私の「時間はかかるかも・・」という答えを見て 歯がゆさと、じれったさと、何今まで聞いていたんだ(教わっていたんだ) と思っていたのだろうな・・と顔から火が出る思いです。 でも、大分回り道しましたが、悩んだ分、しっかり理解できた感じです。 そして、すご〜〜く、嬉しいです。(~o~) 思い込みが激しく違った方向に行きがちな私ですが これからも、ご指導宜しくお願いいたします。 (ranmal) ---- 出来ましたか、良かったです。 一日待って定時(5時の事では無いですよ)迄に書込がなかったら 「思いが違うのかも」とサンプルを書こうと思ってました。 まずは >=IF(COUNTIF(Sheet2!$C$1:$C$10,A3)=1,"*","") ですが・・・・これってSheet2!$C$1:$C$10に重複があったら 困ったことになりませんか? もちろん「重複無し」と言う事なら十分使えると思いますが。 そして >MATCH関数、INDERECT関数、DGET関数、それから >馬鹿な方法でVLOOKUP関数の1列指定・・と色々挑戦して、 「INDERECT関数、DGET関数」この辺りはどの様に使うのか思いつかないのですが MATCH関数とVLOOKUP関数は(私はCOUNTIF関数よりなじみ深いので) 無駄に使ったりします・・・・。その無駄さ加減がこちらの過去ログ。 [[20060921231356]]『別シートにある同内容の行を削除したい』 >大分回り道しましたが、悩んだ分、しっかり理解できた感じです。 いくら時間がかかっても、それはranmalさんの時間ですから じっくりゆっくりのんびりやっても、ここの人は誰も文句なんて言わないでしょう。 ・・・心配はするかもしれませんが。 大分回り道した時に諦めた式も、もう一度見てみると どこに気が付けば諦めなくて済んだのか 分かるかもしれませんね。 (どちらもISERROR関数をプラスで使うことになりそうですが) (HANA) ---- >サンプルを書こうと思ってました。 ありがとうございます。m(__)m >ですが・・・・これってSheet2!$C$1:$C$10に重複があったら >困ったことになりませんか? >もちろん「重複無し」と言う事なら十分使えると思いますが。 私の場合、sheet2は元データ(重複無しのリスト)なので 大丈夫でした。 『別シートにある同内容の・・・』拝見しました。 そして、また教えていただきたいことが出来てしまいました。 2つあるのですが、 初歩的なことだと思うのですが、 >一度きりの作業なら >シート1のA列を挿入して作業列を作ります。 >A1=MATCH(B1&C1,Sheet2!$A$1:$A$1000&Sheet2!$B$1:$B$1000,FALSE) >を入力して、【Ctrl+Shift+Enter】 で確定して下さい。 >数式が { } で囲まれたら、必要行フィルドラッグ。 【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、 何故、{ }で囲むのか。 もちろん、その操作をしないと全部エラーになり、 HANAさんの教えのとおりにやって、正しい結果が出ました。 もう一つは、 >Sheet1にA〜C列を挿入して >A1=D1&E1 >B1=Sheet2!A1&Sheet2!B1 >としたら >C1=VLOOKUP(A1,B:B,1,0) > (エラー値以外が重複有り) 範囲でB:Bというのと、列で1行を指定することです。 式を拝見したときと、実際に試して、このような式が成立するので 驚きました。 ただ、私は結果が出ませんでした。 結果を出すことが出来た、MATCH関数と同じデータで試してみたのですが 以下のようになってしまいます。何かが抜けているのかもしれません。 sheet1( C1=VLOOKUP(A1,B:B,1,0)の式を入れてコピーした結果) A B C D E 1 122 101 #N/A 12 2 2 143 113 #N/A 14 3 3 164 126 #N/A 16 4 4 185 158 #N/A 18 5 5 206 1610 206 20 6 6 227 1821 227 22 7 7 248 1922 248 24 8 8 269 206 #N/A 26 9 9 2810 227 #N/A 28 10 10 3011 248 #N/A 30 11 sheet2 A B 1 10 1 2 11 3 3 12 6 4 15 8 5 16 10 6 18 21 7 19 22 8 20 6 9 22 7 10 24 8 宜しくお願いいたします。 (ranmal) ---- えっと、じっくり検証出来て居ないのですが・・・ どうなる事を予想してますかね? 重複が3件ではないのですか? うっかりしていたのでデータによってはうまく行きません。 たとえば、A:B列が11:2 と 1:12 のものは、同じものとして扱われてしまいます。 問題がそこにある様ならA1&B1のところをA1&"-"&B1にかえてみてください。 うまく行きますかね? それとも、私が何か勘違いしてます? (HANA) ---- HANAさん、ごめんなさい。 私の勘違いでした。(ーー;) 結果は上の表通り、ちゃんと出ていました。 「勘違い」という言葉で、今、私が勘違いしていることに気づきました。 またまた私の思い込み&勘違いで、ご迷惑おかけしてしまいました。 m(__)mm(__)mm(__)m (ranmal) ---- 勘違いでしたか。 良かったです。 続きは夜にします。 (HANA) ---- 「続きは夜に・・・」なんて書きましたが 大したことがあるわけではなく・・・ >【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、 >何故、{ }で囲むのか。 この数式は「配列数式」と呼ばれるもので「その様に確定するもの」なのです。 『エクセル 配列数式』として検索エンジンで検索して ヒットしたページを見るのが分かりやすいと思います。 おそらく『日経PC21 / エクセル(Excel)「配列数式」講座』 http://pc.nikkeibp.co.jp/pc21/special/hr/index.shtml このページが一番上に来ると思いますが・・・。 >A1=MATCH(B1&C1,Sheet2!$A$1:$A$1000&Sheet2!$B$1:$B$1000,FALSE) 「B1&C1」と言う組合せのものを「A1:A1000とB1:B1000」を上から順に 組み合わせていったものの中から完全一致で探しなさい 『上から順番だから、勝手に組み合わせて見比べてね』 とお願いしたりするときに、その様な式を作り 【Ctrl+Shift+Enter】で確定すると、エクセル君は 「そう言うことをご希望ですか」と、お願いを聞いてくれます。 だから、単にEnterだけだと「何いってんの?」って言われちゃいます。(涙) (HANA) ---- HANAさん、よく分かりました。 毎回のことですが、分かりやすい説明ありがとうございます。 今回は、(困りました・・)さんの質問から始まり 様々なことを勉強させていただきました。ありがとうございす。 これからも宜しくお願いいたします。 (ranmal) ---- 補足ですが・・・・ リンク先は「二つの並び順が同一のものが存在するかしないか」を見るものなので 今回の(困りました・・)さんの意図する「二つのどちらかが存在したら」 と言う場合には使えません。 また、双方並び順も含め合致したら「*」を表示させたい場合は ISERROR関数でエラー値かどうかを調べ、IF関数を使って TRUEの場合(エラー値となった場合)は空欄、 FALSEの場合(同じ並び順が有った場合)は「*」を表示 と言う数式に組み込む必要があります。 そうそう、 >【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、 この部分ですが、「エクセルに関する【Ctrl+Shift+Enter】で確定」と言うことで、 グーグル等で『エクセル Ctrl+Shift+Enter』として検索してみると 「配列数式」と言う言葉にたどり着けたかもしれませんね。 (HANA) ---- >今回の(困りました・・)さんの意図する「二つのどちらかが存在したら」 >と言う場合には使えません。 はいm(__)m(困りました・・・)さんの質問を私が横取り(乗っ取り?)して、 途中から私の質問に 変えてしまいました。申し訳なく思っております。 >(どちらもISERROR関数をプラスで使うことになりそうですが) 前回、回答をいただいたときに、最後に記載されていたので 気になり、私なりに関数辞典やネットで調べてみました。 これを使うと色々応用するときに 便利な関数ですね。 とても勉強になりました。 >『エクセル Ctrl+Shift+Enter』として検索してみると >「配列数式」と言う言葉にたどり着けたかもしれませんね。 つい、甘えて、そのまま直に聞いてしまいました。(ーー;) 自分だけで考え悩んでいると、一つのことに固まって抜け出せなくなりますが 質問・回答をいただき、新たな関数に出会えたり、応用方法を学べたりで 感謝しています。 でも、基本的なことは自分で調べて勉強しなくては駄目ですよね。 気をつけたいと思います。(^_^) (ranmal) ---- >>・・・と言う場合には使えません。 これは、「後でちらっとこのスレを見た人が思い違いをしないように」 と思って書いただけですので、ranmalさんは気にしないで下さい。 > つい、甘えて、そのまま直に聞いてしまいました。(ーー;) 「こうやったら分かったでしょ!!」 と言うことではなく、「検索ワードの選定の参考」です。 (・・・参考になればですが。) >自分だけで考え悩んでいると、一つのことに固まって抜け出せなくなりますが 最初に思いついた方法って、なかなかあきらめがつかないものですよね。 To be or not to be, that's the question. (HANA)