- 締切済み
エクセルでデータの照合、教えてください!
|A |B |C 1|番号 |名称 |管理番号 2|A001 |りんご1 |0001 3|A001 |りんご2|0001 4|A001 |りんご3 |0001 5|A002 |みかん1 |0002 6|A002 |みかん2 |0002 7|A003 |ばなな1 |0003 上記のようなデータがあり、これを番号別に分けてそのグループの管理番号も合ってるかのチェックを行いたいのですが、(例えばA001に属するものは全て管理番号0001になってるか)それは関数を使えば可能なのでしょうか? 今は取りあえず、番号毎の集計で番号毎にし、それを目でみてチェックしています。でも10万件以上あるデータなので何か良い方法がありましたら教えてください。 OS Win95 Excel97
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- moon00
- ベストアンサー率44% (315/712)
データ自体を見ないと、番号と管理番号の関係は分からない ということでしょうか? そのデータ以外に、「この番号にはこの管理番号」という 決まりはないんですね? それですと、#6さんのようにマクロを使うしかなさそうですね。 番号別にシートなり既に分かれていて、管理番号は数値であるとするなら、 =MODE(管理番号の範囲) として、最頻出値を取り出して対応表を作るというのも 考えてみましたが、そもそものデータ数が多いようですので あんまり実用的ではないようですね。
- imogasi
- ベストアンサー率27% (4737/17070)
オフラインバッチ処理(入力を一旦そこで打ち切り、今まで入力したまでの状態をチェックする方式)で良ければ、簡単なVBAでチェックできます。アクセスを使わなくても出来そうです。 オフラインバッチ処理に対するものが、入力した瞬間にチェックして誤りかどうか返すものですが、その場合はマスタ的なデータベースが不可欠になるでしょう。 (1)キーA列でソートしておきます。 (2)下記VBAを実行します。 Sub test01() Sheet1.Select d = Range("a1").CurrentRegion.Rows.Count maekey = Cells(1, "A") kanrino = Cells(1, "C") '--------- For i = 1 To d key = Cells(i, "A") If maekey = key Then If Cells(i, "C") <> kanrino Then Cells(i, "D") = "error" End If Else kanrino = Cells(i, "C") End If maekey = Cells(i, "A") Next i End Sub (4)同一キーの行に異なる管理番号があればerrorと D列に表示します。ある1つのキーの行で最初に現われる 管理番号を正しいと見なしています。第1行目が間違いの ケースもあり得ますが、見れば判ります。 エクセルは10万行の表は作れなかったと思うのでどうされますか。
お礼
VBAですか。そちらも初心者ですが、試してみたいと思います。 ちなみにエクセルは一旦アクセスでとりこんで並びかえた表を分割してエクセルで使ってます。。 かなり非効率ですよねー いろいろありがとうございました。
- whitepepper
- ベストアンサー率27% (683/2442)
やはりExcelはメジャーなソフトですね。皆さんよくご存じで、かつよく使いこなしておられますね。 でも、そもそもこういった作業はデータベースソフトが担うべき仕事だと思います。 》でも10万件以上あるデータなので となれば、なおさらです。というのは、Excelでは全データをメモリに取り込んで作業をします。データベースソフトではデータをディスク上に載せたまま行います。 データベースソフトですと「絞り込み」(Accessですと「クエリ」というのかな)は常套です。Aの値とCの値を比較して、一致しないものだけを抽出するのはいとも簡単です。メチャメチャ楽です。 データベースソフトで身近なのはMS-Accessです。ところが身近な割にとても使いにくいです。もしお持ちでなければ、いずれにせよ買わなければなりません。もしお買いになるのなら、いっそ「桐」をお勧めします。こちらのほうがはるかに取っつきはよいです。無料で90日間使えます。 以上、一つ別な意見としてご提案します。
- 参考URL:
- http://www.k3-soft.com/
補足
そうですね。 ホントはAccessが出来れば便利でしょうねー 実際、データを並び替えたりは10万件というデータ量はエクセルでは出来ないので、一度Accessで並びかえて、それを分割し、エクセルで修正をかけています。 ただ、ここでは省略してますが、他にも項目があり、それの照合やらもするとなると、Access初心者の私には厳しいような気がしたのでエクセルで行っています。 やはり近いうちAccessを勉強したいと思います。 ありがとうございました。
- moon00
- ベストアンサー率44% (315/712)
e3rinさん、こんにちは。 どういう形でチェックしたいかにもよりますが、 以下の方法ではどうでしょうか? 番号別に分けるのは、並べ替えで行うとして 準備として番号と管理番号の対応表を作ります。 |G |H 1|番号 |管理番号 2|A001 |0001 3|A002 |0002 4|A003 |0003 D列を使用します。 D2に =IF(C2=VLOOKUP(A2,$G$2:$H$4,2,TRUE),"○","×") とすると 番号と管理番号が合っていれば「○」 違っていれば「×」が表示されます。 これを用いて、条件付き書式とすることもできると思います。 番号をキーとすれば、 C列を選択して条件付き書式、「数式が」で =IF(C2=VLOOKUP(A2,$G$2:$H$4,2,TRUE),"○","×")="×" と入力、文字色を赤とすれば、 番号に合った管理番号でない場合、管理番号が赤く 表示されます。 条件の付け方は、他にもっとスマートなのがあるかもしれません。 お役に立てれば幸いです。
補足
あまりにもデータ量が多く、どうやって対応表をつくっていいものやらわかりません。 どうやって作るんでしょうか?何かヒントでもかまいませんので教えて下さい。
- wolv
- ベストアンサー率37% (376/1001)
ぱくります^^; もし、「A001」→「0001」のように、右から3文字が一致するという規則があるなら、D列を作業列として、D2に、 =IF(RIGHT(A2,3)=RIGHT(C2,3),0,1) と入力して下の行にコピーすれば、番号と管理番号があっていないと1を表示します。 D1を =sum(D2:D1000000) のようにしておけば、すべてあっていればD1が0になります。
お礼
ちょっと例が悪かったのですが、いやなことに規則性がないんです。やはり難しいのかな。。 回答ありがとうございました。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 もし、「A001」→「0001」のように、右から3文字が一致するという規則があるなら、D列を作業列として、D2に、 =IF(RIGHT(A2,3)=RIGHT(C2,3),"○","×") と入力して下の行にコピーすれば、番号と管理番号があっていないと"×"を表示します。
お礼
ちょっと例が悪かったのですが、いやなことに規則性がないんです。やはり難しいのかな。。 回答ありがとうございました。
- Jxiong
- ベストアンサー率17% (16/94)
エクセル)97でもたぶんこのような機能があるかとおもいますが [データ]⇒[フィルタ]⇒[オートフィルタ] をつかいます たぶんこれを使われているのだと思います。 逆にこれをオプション選択で逆抽出をしてください。 どういうことかというと、たとえば、A001を確認したいときまずAOO1を抽出して さらに管理番号のほうを001と等しくないと抽出すれば 間違ったもののみ抽出できます。 それで、チェックできるかと存じます たしか、97のときから使ってますから使えると思いますが、その機能があるかどうかが疑問ですので 自信なし
お礼
確かにそれでできると思いますが、何せデータが10万件以上あるので・・・ 回答ありがとうございました。
お礼
そう、管理番号には決まりがないのでやっかいなんです。。(>_<) でも別の機会に活用させていただきます。 いろいろありがとうございました。