アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

A 回答 (6件)

No4です。

以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。
    • good
    • 0
この回答へのお礼

助かりました

お礼が遅くなり大変失礼いたしました。
お忙しい中ご対応いただきこころから感謝しております。
(私事インフルで途中挫折しておりました。)

マクロの魔法がかかりました。。。。!!!!

ありがとうございます。
このコードを使わせていただいたら ちょっと変えて
できそうです!

わたしもエクセルの魔法を使えるようにがんばります。
この度は本当にありがとうございました。

お礼日時:2017/02/19 15:46

たとえばこういうことです。


A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

私でしたら、AとBの間に列を入れ、数字を1〜順番に入れます。また、Bの右列にも、同じく数字を1〜順番に入れます。そして、
Aと右列、Bとその右列 を関数で、組み合わせます。
そして、株式会社 や(株)で並び替えと抽出して比べてみて探します!
ペンでは、ミスし易く、多い数には、難しいのでは?

数の多い文字に関しまして、元の原本をコピーしたもの
をmicrosoft Access に移管して、あいまい検索されてはどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとう

救いの手を差し伸べてくださり、ありがとうございます。
お礼が遅くなり申し訳ありません。

なるほど!なるほど!そうすれば同じ文字を含むセルが両側に並ぶことになり、照合できるのですね☆☆☆

そうですね、access様☆ですね。accessも使うことはできるのですが
なるべく簡単な(私ができそうな)方法を使い
誰でも引き継いでできるようにエクセルでの関数を考えました。
どうもありがとうございます。

お礼日時:2017/02/19 15:51

No3です。


補足要求の回答ありがとうございました。
処理結果は添付図のように、一致した場合、C列に○、D列に一致したA列の企業の行番号を出力しますが、それでよいですか。
又、今回、添付図の黄色部分のように、B列に同じ会社が複数存在することもありますか。
(A列には同じ会社はないと考えていますが、B列がアンケート結果なので、念の為確認です)
「A列とB列の重複を抽出したいのですがA列」の回答画像4
    • good
    • 0
この回答へのお礼

お忙しいところ さっそくありがとうございます。

添付図のように、が理想です!!!

はい。A列には同じ会社名はありませんが、B列には同じ会社が複数存在することがあります。すみません、これも抜けていました。
基準は、企業の名前なのです。
重複がわかれば、そのあとは簡単な関数でカウントします。

どうぞよろしくお願いいたします。

お礼日時:2017/02/14 13:23

補足要求です。


質問1)
A1 (有)雪見酒      B1  雪見
は、一致として扱うのでしょうか? それとも不一致として扱うのでしょうか。

質問2)
A列の件数とB列の件数は、同じですか、違いますか。

質問3)
提示された例では、同じ企業が同じ列に並んでますが、実際は、A列の並びとB列の並びは、ばらばらと
理解しましたがそれであってますか。

質問4)
企業の件数はおよそ何件ですか。

質問5)
本件、マクロで処理することになりますが、質問1)のケース等を考慮すると、100%の正解を計算で
求めるのは無理があります。マクロで一旦、重複データを結果を表示し、のちに人間が目視で確認になりますが
それで良いでしょうか。
もし、それで良いとなった場合、列の配置をA列、B列でなく、A列とD列にすることをお願いするかもしれませんが、
良いでしょうか。
又、本件の提示例では、1行目は見出しではなく、データになっていますが、それで間違いないですか。
(1行目は見出しになっているのが一般的です)
    • good
    • 0
この回答へのお礼

お忙しいところありがとうございます。

詳しく書かずに申し訳ありません。
私どもの持つデータがA列とし
  アンケートで戻ってきたデータをB列にしました。
同じ企業を見つけ出したら削除するのが仕事です。
(株)があってもなくても企業名が同じであれば
一致とみなす条件です。

1)A1とB1 は一致して扱います。

2)A列の件数とB列の件数は違います。

3)お見込の通りです。
  実際はA列とB列はバラバラです。

4)企業の件数は、今回は
  A列が手持ちのデータで300件
  B列が別の集計データで400から500件です。
  (B列はアンケートによる集計結果です。)
です。

5)おっしゃるように最後は目視で確認します。

1行目はデータではなく見出しなのですね。
教えてくださりありがとうございます。勉強します。

マクロは3行マクロくらいまでしか経験がないのですが
仕組みはわかります。
今後のこともあり、エクセルがんばりますので、
お手数ですが、お手すきのときに
ご教示いただけたら幸いです。

どうぞよろしくおねがいします。

お礼日時:2017/02/13 15:37

例の1の場合は一致しないということでいいのでしょうか?


それともこれも一致するとみなすということなのでしょうか?
有限会社や株式会社の略し方も一通りではないということですか?括弧の半角全角や書かない場合もある等

IF文とFIND関数によって、全てのパターンを条件分岐させ、LENで文字数を把握し、RIGHT及びLEFTで抽出する。
という方法を取れば、設定したパターンのものにおいて会社名のみを抽出すること自体は可能です。
A列から抽出したものと、B列から抽出したものを比較し、一致するかどうかで判断させればよいでしょう。
ただ、全てのパターンを条件分岐させるのがこの場合非常に面倒と思われます。
例を示しますと
①「有限会社」で始まる場合
②「有限会社」で終る場合
③「株式会社」で始まる場合
④「株式会社」で終る場合
⑤⑥⑦⑧「(有限会社)」「(株式会社)」で始まる・終る場合 ()が半角です
➈⑩⑪⑫「(有限会社)」「(株式会社)」で始まる・終る場合 ()が全角です
場合によっては ○○株式会社△△支店 といったものも含まれるかもしれません。
他にも財団とか公益法人とか着いているかもしれません。
そういったものがないにせよ、例を見るだけで12パターンは最低存在しそうですね。
さらに例1を一致しているとみなすのであれば、どのような条件で一致すると見なせるのかを加えなければなりません。
その場合は非常に面倒くさいと思われます。

最も簡単であろう12パターンの場合、
いっそ全て消してしまうのはどうでしょう?
エクセルであれば検索・置換機能が使えます。
12パターン全て検索し、その部分をなくしてしまえば、後は一致するかどうかをIF文で判断すれば簡単かもしれません。
消してしまうのがまずければ、別のファイルにコピーして、今回専用のデータとして操作するのが良いでしょう。
    • good
    • 0
この回答へのお礼

さっそくの回答をありがとうございます。

はい、A1とB1はこれで一致とします。
私もいくつか関数をやってみたのですが....おっしゃる通りです。すみません、わたしにはいっぱいいぱいです。

検索機能でやってみるのが早いかもしれないですね。
ありがとうございました。

お礼日時:2017/02/13 15:31

私ならおそらくプリントアウトして蛍光ペン使います。

もしくは検索や置換を使うのが良いのではないでしょうか。

曖昧な表現を同一視させるには高度なプログラムを組む必要があると思いますし、精度も保証されません。なので仕事に使うならば、ダメですね。

こういうのはディープラーニングが得意そうですけど、、、
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。

プリントアウトして蛍光ペンが一番早そうです。

今後のこともあるので、エクセルがんばって勉強します。

お礼日時:2017/02/13 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!