• 締切済み

Excelで「正」とするデータとの比較。

Excelで「正」とするデータとの比較。 ■添付資料あり(例として簡単にしたものです) わかる方、教えてください。 やりたいこと:「正しい市町村名」と「入力ミス、存在しない市町村名」のチェック ・A列は、変換ミスや、存在しない市町村名が記載されたデータが約10000件くらいあります。 ・C列は総務省のページから正しい市町村名を並べています。 ・C列を「正」としてA列の間違ったデータをB列に何らかの形で検出したいです。 「その他条件」(あまり関係ないかもしれませんが) ・A列は重複したデータは沢山ありますが、それはOKです。 ・A列もC列も県名と市町村の間に全角スペースが入っています。 私、関数が苦手でLookUPでやるのか、EXACTでやるのか、何をどうすればいいのか 非常に困ってます。よろしくお願いします。

みんなの回答

  • kon555
  • ベストアンサー率52% (1738/3334)
回答No.11

No.10ですが、タブのインデントが消えているのでそのままでは使えませんな。 これでどうかなー 'ここから Sub 不一致検出() Dim i, α1, α2 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row  α1 = Cells(i, 1).Value  Set α2 = Range("C:C").Find(What:=α1)  If α2 Is Nothing Then Cells(i, 2).Value = "不一致" Next i MsgBox "完了しました" End Sub 'ここまで

  • kon555
  • ベストアンサー率52% (1738/3334)
回答No.10

こういう質問には空気を読まず「VBAでやればいいのに」と回答するのがお約束なのだな。やればいいのにー。 関数でやるとかなり大変そうだけど、試しに組んだらシンプルに出来たので一応置いときます。 'ここから Sub 不一致検出() Dim i, α1, α2 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row α1 = Cells(i, 1).Value Set α2 = Range("C:C").Find(What:=α1) If α2 Is Nothing Then Cells(i, 2).Value = "不一致" Next i MsgBox "完了しました" End Sub 'ここまで 【使い方】 1.この作業をしたいファイル開いた状態で、キーボードの「Alt」と「F11」を同時に押す。 (他に開いてるファイルがあったら一旦閉じて) 2.よくわからない何かが出てくるけど落ち着いて、画面の上側の「挿入(i)」をクリックする。 3.その下に表示される「標準モジュール(M)」をクリックする。 4.それまで灰色だった部分が白くなるので、そこに上の『ここから』『ここまで』の間をコピーして貼り付ける 5.手順2で開いた良く分からないヤツを閉じる。 6.作業用のブックに戻るので、キーボードの「Alt」と「F8」を同時に押す 7.「不一致検出」を選択した状態で「実行」をクリックする 動作は一応確認済みです。一致していないセルの横、B列に「不一致」と入ります。 なお 8.頑張って仕事しているフリをしておく 9.適当な頃合で、出来ました、と報告してサッサと帰る。 この辺りも念のため手順に追加しておくとベストかも。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.9

今晩は If関数にISNA関数とVLOOKUP関数を入れ子にしました 添付図中B2の式は =IF(ISNA(VLOOKUP(A2,$C$2:$C$1900,1,FALSE)),"",VLOOKUP(A2,$C$2:$C$1900,1,FALSE)) です。 B2をB列の他のセルにコピペしました。 次に,BIにフィルタ(添付図の赤枠)をかけて、空白行のみ表示して同じ行のA列正しい市区町村名にするとそれがB列に表示されます。

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.8

http://www.e-stat.go.jp/municipalities/number-of-municipalities に依れば、全国の市町村数は2,000弱のようなので、[No.5]で提示した式中の「C:C」は「C$2:C$2000」に変更した方が計算が早くなるかも。

回答No.7

【念の為に】データが約10000件くらいあります。 もしかして、比較するとは添付図のようでは・・・。例示のデータだと、ソートして目で見たら判る筈と思うが・・・。それに、1万件というのも・・・。

回答No.6

【参考までに】Excelの関数もVBAも知らないド素人のアイデア =DLookup("SELECT 'OK' AS 判定 FROM [住所正誤表$B1:C15000] WHERE 正しいデータ='"& B2 & "'",,,"X")  この式をA2に書いてズズーッと下に。でも、多分、OK! >面白い。試してみよう! なら、DLookup() を紹介します。 《難点》SQL文の綴りをミスなくが最初はシンドイ!が、難しいExcelの関数を書く必要はない。

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.5

B2: =IFERROR(INDEX(A:A,SMALL(IF(A$2:A$11000="","",IF(COUNTIF(C:C,A$2:A$11000),"",ROW(A$2:A$11000))),ROW(A1))),"") 【お断り】上式は必ず配列数式として入力のこと

Cyber-r
質問者

補足

よくこんな関数かけますね。ちょっとこのまま使ってみます。 ありがとうございす。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

VLOOKUP関数の第1引数にA列の1セルデータを、第2引数の参照表をC列($C$1:$C$xxx。絶対番地範囲にすること。)、第3引数は、普通は隣列のデータをもってきたりするが、本件は存在のチェックのために表を引くので、1、第4引数をFALSEとして(間隔に存在でなく、一致したものを探すのでFALSE)して、 D1に式を入れて、下方向に式を複写する。 D列に、見つからないという内容の、エラーが出た行をチェックする。 VLOOKUP関数は、エクセルの有名な筆頭関数です。WEBを調べるとすぐ例も見つかる。 http://www.excel-list.com/vlookup.HTML他多数 ISERRORを使いたければ、Googleで「vlookup関数 iserror」で照会のこと。 http://kokoro.kir.jp/excel/vlookup-iserror.html エクセル使いでVLOOKUP関数を思いつかなようではね。 MATCH関数もエラー検出というところは同じ働きをさせられる。 VLOOKUP関数の第3引数のような余分なことを、考えなくてよい。 ーー 質問者が、実際やってみて、思うところがあれば別質問する。 他のチェック点はプログラムの作成のスキルが要るので、質問者には無理だろう。 ==== お勧めの、意外に良い方法は、(コピーを別に取っておいて)A列をソートして、人間の目視(教養)で、チェックすることだ。 間違いや、変なものは、別の行ブロック(カタマリ)の間に、紛れて出てくるので、一見してよくわかる。数千行ならチェックはすぐ終わるよ。

Cyber-r
質問者

補足

ありがとうございます。たすかります。

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.3

No1への補足コメントへの返信です。 > 横のB列に何かしら印が検出できれば良いです No1の式をB2に入れて下にコピー(フィル)すれば画像でのB7とB8に間違いと表示されると思います。

Cyber-r
質問者

補足

=IF(ISERROR(MATCH(A2,$C:$C,0)),"間違い","") B2にこれを入れて、下にコピーですね。 あ!できました!ありがとうございます。

  • mabyos
  • ベストアンサー率52% (61/117)
回答No.2

vlookupを使用して検索ヒットするものはOKとみなし、それ以外はエラーということが最善策な気がしますが、一般的に元データの表記揺れというものがあり、これはエクセルでは難しいことがよくありますので、上記のチェックであぶり出された エラーデータを最終目で見て判断する必要があると思います。 vlookupの使用上の注意が下記にまとまっています。 https://global-wing.com/activity/excel_vlookup_error.html

Cyber-r
質問者

補足

ありがとうございます。初心者の私には難しいページですが何回か読んでみたいとおもいます。 私が求めてたのは https://www.excelspeedup.com/syougou/ これが近いんですが、うまくいきません。

関連するQ&A

  • エクセルのデータ比較

    シート1のA行のデータとB行のデータをすべて比較して、同じデータがあれば C列にそのデータを書き出したいのですが、どうすればよろしいのでしょうか。 行数(比較するデータの数)はそれぞれ数千行あります。 例(a~hはデータです) シート1     A列 B列 a c b d  c f d h の場合、比較した結果をC列に次のように表示させます。 A列 B列  C列 a c c b   d d c f d h どなたかよろしくご教示くださるよう、お願いします。

  • エクセル人事データの行の削除・抽出

    莫大な人事データがあります。A列には部門コード10桁 B列には部署名1 C列には部署名2 D列には名前・・・基本給・手当・住所・連絡先等々列だけでも100はあります。行は個人別に並んでおり、名前は重複しませんが、部門コードは重複します。 10005500 財務 10005550 人事 10006000 総務 といった形でデータマスターは完成させました。部署も300ほどあるので、オートフィルタで行を抽出することは困難に近いです。チェックボックスをクリックしまくるのは億劫とミスの元です。 さて、そんなデータがあるなか、シート2に部門コード表を作成し、シート1のマスターのうち部門コードに該当する列だけを抽出したいのです。 難なく使える機能はLOOKUP関数、条件付き書式、フィルタ、条件書式などです。 大量の複数条件を指定して、マスターをいじることはできますか。 よろしくお願いいたします。

  • エクセルで既出データを自動入力したい

    エクセルで既出データを自動入力したい 具体的には以下の通りです. A列がデータ特有のID番号で,B列はA列に対応したデータです。 B列のデータは重複することがあります。 A列 B列 12345 A 33456 B 12345 A 99999 C 12345 A 32372 A ・ ・ に対して、次にA列に"33456"を入力すると、B列に"B"を返す関数を教えていただきたく存じます。 既出データでない場合は手動でデータを入力します。 lookup系の関数かと思いますが、調べた範囲でよくわかりませんでした。 大体1300行ほどのデータがあります. よい方法があれば教えていただけると大変ありがたいです. EXCELは2003と時々2007を使います。

  • 「エクセル」で重複したデータだけを呼び出したい。

    「Excel2000」を使用しています。 「重複しているデータだけ抽出する」 ということは出来るでしょうか? たとえば「A列」に名前が入っていて、 「B列」に住所、「C列」に電話番号が 入っているとします。 重複した名前だけを呼び出して、 なおかつ「B列」「C列」の データも表示させたいのですが…。

  • エクセル データ抽出

    A列には、年月6桁の数値 例/200501 B列には、サブグループを示す文字列 黒、白 のいずれか C列には、100刻みの整数(各サブグループ毎に連続した値となるが、最小値と最大値      は都度変化する。→個数・行数が変動) データが変化するたびに各グループごとに、自動でC列のデータ種類一覧を表示 させたい(重複を除いて、昇順)のですが、どのような方法がありますでしょうか。 LOOKUPとMAX(MIN)を併用するようなイメージを持ったのですが可能でしょうか? 例えば、下の場合、グループ「200501」のC列のデータ種類は200、300、400、500、というように。    A   B  C 1 200501 黒 300 2 200501 黒 400 3 200501 黒 500 4 200501 白 200 5 200501 白 300 6 200502 黒 400 7 200502 黒 500 ・ ・ ・ お手数ですがよろしくお願いします。

  • エクセルでデーターを比較削除したいのですが。

    エクセルでの質問です。 エクセルで、A列に1万件ほどの電話番号が入っているとしまして、B列に1000件ほどのやはり電話番号が入っているとします。A列のデーターとB列のデーターを比較しまして、もしB列のデーターと同じものがA列にある場合、A列の該当しますデーターを削除したいのですが、エクセルでそのような事が出来るのでしょうか?重複データーの削除で検索してみたのですが、いまいちよく理解できなかったものですから投稿させて頂きました。ご存知のお方がいらっしゃいましたらば、御教示頂きたいのです。エクセルは、2007を使用しております。宜しくお願い致します。

  • エクセルで同じ内容のセルを探し出したい

    いつも活用させてもらっています。同じ質問がないようなので(上手な言葉が見つけられないだけかもしれませんが)質問させていただきます。 知りたいことは市町村合併によってなくなった市町村名を探し出したいのです。 次の2つのエクセルデータがあります。 1つ目のデータ    A   B    C     D     E・・・  通し番号 県の番号 都道府県名 郵便番号  市区町村名・・・ 2つ目のデータ    A          B     C   D・・・  合併後市町村名 合併した市町村名1 その2 その3・・・ 1つ目のデータのC(市区町村名)と2つ目のデータのB~Dに合致するデータををぬきだして、1つ目のデータを新しい市町村名にするか削除するかしたいと思います。 ご教授の程よろしくお願いいたします。

  • エクセルでのデータの表示

    エクセルでのデータの表示 次のような表が在ります。 A列   B列   100    2   100    2      101    6   101    2   101    6   102    6   102    6   103    2   103    2   103    2    104    6   104    2  ・     ・  ・     ・  ・     ・   これを、次のように、C列に「◎」と「×」を表示させるようにするには、どのようにすれば可いですか? つまり、「A列のナンバーが重複していて、且つ、B列の数字が異なる二種類の場合は、C列に◎」、「A列のナンバーが重複していて、B列の数字は一種類の場合は、Cれつに×」と表示させたいのです。 A列  B列  C列 100    2  × 100    2  ×   101    6  ◎ 101    2  ◎ 101     6  ◎ 102    6  × 102    6  × 103    2  × 103    2  × 103    2  × 104    6  ◎ 104    2  ◎ ・      ・  ・ ・       ・  ・ 宜しくお願い致します。

  • 重複データについて

    accessで重複しているデータを抽出したいのですが、初心者のためよくわかりません。 1列目 2列目 A   2  A   3 B   4 C   5 C   5 C   5 というデータがあった場合、1列目は重複していて2列目は重複していないデータだけを抽出したい場合、どういうクエリにすればいいでしょうか? 重複クエリではこの場合、Cも出力されてしまうためどうしたらいいのか悩んでおります。 よろしくお願いいたします。

  • Excelで2列にまたがるデータを比較したい

    こんばんは。 A列とB列の比較に困っています(>_<) 例えば、  ======A===========|=========B==========|=======C======== 2 セパタクロー==========ペタンク==============  3 ペタンク==============カモギー==============    4 クリケット============ブズカシ==============    5 ブズカシ==============ホルヌッセン==========ホルヌッセン 6 コクボル==============ヤールギレッシュ======ヤールギレッシュ 7 ハーリング============クロッケー============クロッケー 8 カモギー==============タスポニー============タスポニー ・            ・             と、データが並んでおりまして、この中から「B列にはあるがA列にはないデータ」を、C列に抽出したいのです。 この場合「ホルヌッセン」「ヤールギレッシュ」「クロッケー」「タスポニー」が、B列にはあるがA列にはないデータなので、関数などを使ってC列にそのデータをそのまま抽出したいのですが、どの関数を使えばいいのか頭を悩ませています・・・。 B2「ペタンク」という文字列を、A列全てを検索範囲として検索し、もしA列に「ペタンク」という文字列があれば、C2には“空白”を返します。 もし、A列全てから検索しても「ペタンク」という文字列がなかった場合、C2にはそのまま「ペタンク」を返します。 それによって最終的に、「A列にはないがB列にはあるデータ」を、C列に抽出したいのです。 皆様のお力をお借しいただきたい次第です(>_<) よろしくお願いします<m(__)m>

専門家に質問してみよう