プロが教える店舗&オフィスのセキュリティ対策術

2つのシートからVlookupを使って、データを呼び出そうと思っています。しかし、各シートの法人各表記が下記例のように
"マエカブ"、"ウシロカブ"、"スペースあり"、"スペースなし"と表記がシート毎にマチマチで違うのと、どちらも7000行以上の膨大なデータ量(MBクラス(?))になっているため、手作業でコツコツやるには時間が足りません。

過去回答例を見てデータ>区切り位置で法人各を取ってからvlookupをしようと思っていますが、データを揃える有効な方法を教えてください。※そもそもvlookupを使うことが間違いなのか・・・それも判断できないため、確実にできれば他の方法でも構いません。

(例)
【シート1の表記】
株式会社OKWAVE
OKwave(株)▲本社 ←▲はスペースを表しています

【シート2の表記】
(有)OKwave
オーケーwave(合)

法人格は置換でどちらか一方に合わせることが可能ですが、
その先でつまづいています。。。
明日夕方が締め切りで、かなり焦っていますが、どうぞよろしくお願いいたします。

A 回答 (5件)

こんにちは。



もう時間切れだとは思いますけれど、一言書かせていただきます。

表に出る表記は、勝手に変えてはいけないです。しかし、表計算独特というか、検索の時に使用するデータの基準というものが、前株なのか、後株なのかというよりも、そこに一定の基準を与えて、並べ替えていくことをしないと、その表の利用度としてはかなり下がってしまうと思いますし、文字数を減らして処理させるというのは、表計算の常套手段です。その時に、おおむね、(株)と(有)は、後に回すというのがということをします。そうしないと、並べ替えが不自然になるからです。また、法人格を切り離すと、検索に、VlookUpなどを使う関係で、検索が不自由になってしまいます。

いずれにしても、正式名称とは別に、集計用の名称が存在するという考え方をします。それは、経験的もので、そのような考え方で、#3のマクロは作られています。表計算のみでは、オフコンやデータベースソフトのようには行きません。また、移植しようにも、1~2日で間に合うような仕事ではありません。

表に出る資料と、内部資料とは別問題です。そうでもしないと、いちいち、相手まかせや入力者の都合で変換されたものに、従ったら、とても集計や統一的な作業が出来ません。すでに、そうした状況に陥ってしまったことは、精度として格段に落ちてしまっていますから、データとしての信頼性も落ちてしまっていますが、それは、もう言ってもしょうがないことです。

本来は、大分類-中分類-小分類というようなコードの別け方をして、コードを確定して統一させてしまうというのが、通例だと思いますが、表計算というものは、あまり、そういう方式には向かないようです。また、相手先が、本社なのか支店なのかの区別というのは、営業割り振りの場合は、そう簡単には統一できるわけではありません。

これは、本来、データベースのマスターで、オートコレクトにして出す方式やイニシャルで出すならならともかく、Excelのような表計算ですと、あまりうまくいきません。
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
おっしゃる通り、表計算ソフトを使っての管理に無理があり過ぎると思いました。全社で使用するSAPのような基幹ソフトと営業独自のアプリ間のデータに整合性が取れていないため、更にエクセルで・・・と本末転倒なことを求められ、せざるを得ない状況でした。
とりあえず、部署内マスターとして利用できるよう、コツコツと作業を始めました。

お礼日時:2008/05/29 20:31

すでに30日になってしまいましたが……。



法人格は「置換」して表記を統一するということで、どこに問題が生じるのかなぁ? 統一されていれば、VLOOKUPでもエラーは出ないですよね。VLOOKUPで別ブックから担当者とかを引っ張りだしたら、[形式を選択して貼り付け]コマンドで、「値」に変換しておいたほうがいいと思うけど。

一方で「■本社」みたいなのは、会社名じゃないから削除する方向か、もしどうしても必要なら、おっしゃる通り「区切り位置」コマンドを利用するなどして、もう1つ列を用意して、そこに出力するとか。

統一する際には、「(株)」とかに略称ではなく、「株式会社」とかの正式名称にするのがいいと思う。で、法人格を前付けにするか、後ろ付けにするかというのは、登記にも関係してくるところだから、勝手に「前付けに統一」とかしないほうがいいと思います。そんなんだったら、そもそも法人格なんて付けなくていいかも。
    • good
    • 0
この回答へのお礼

区切り位置で分けて、地道な作業することにしました。
SAPのマスターが『(株)』←2バイトで登録されている自体で、信じられない会社です・・・。涙

お礼日時:2008/05/29 20:34

こんにちは。



私なども、そうした大変な場は何度もくぐっていますから、それは、まず、出来る部分からしてください。ただ、最終的に100%は、プログラム等でも不可能だというしかありません。入力したときの精度問題ですから、それをどう判定するかは最終的には人間に委ねられます。ただ、正直なところ、2年間のツケということになってしまいますし、オフコンの世界の話で、パソコンでは、すでに、その表は、精度が悪くて、設計の段階で失敗のようです。

>会社名の表記が一部違うためVlookupしても#N/Aが返ってくる物が発生する。

以下のデータが同じだとする根拠は、本来はありません。

Book1
2  有限会社ABC        佐藤

Book2
2  (有)ABC        東京都     ?

確かに、同じような気もするけれど、外部の人間には、それは、同じものだと判断する根拠がありません。それは、プログラムや関数でも同じことではないでしょうか?これが、同じものだと判断する前提を作ってあげなくては、それは同じものだとは判定できません。

ただ、今の段階では、ある程度、表記を統一させることだけを考えてみました。

出力例

株式会社OKWAVE  --- OKWAVE(株)
OKWAVE株式会社  --- OKWAVE(株)
(有)OKwave      --- OKwave(有)
オーケーWave(合)  --- オーケーWave(合)
オーケーwave(株)    --- オーケーwave(株)
有限会社ABC      --- ABC(有)

英数で半角にすべきものは半角に、カタカナは半角にはしない、前(株)は、後ろ(株)に、するなどの処理がほどこされています。

'標準モジュール

Sub ReplaceData()
  Dim rng As Range
  Dim buf As String
  Dim tbuf As String
  Dim c As Variant
  Dim i As Integer
  Dim Matches As Object
  Dim Match As Object
  Dim prAr As Variant
  Dim psAr As Variant
  Dim prSrWd As String
  Dim psSrWd As String
  
  '=====================================
  '出力列 4というのは、A列に対して、E列ということ。(D列ではありません)
  Const OUTCOL As Integer = 4
  
  '入力データ(選択した列の、1行目からデータの最後まで)
  With ActiveSheet
  Set rng = .Range(.Cells(1, Selection.Column), .Cells(65536, Selection.Column).End(xlUp)) ' Range("A1:A10")でも可能
  
  ''マウスの選択の範囲の場合 ''シングルクォーテーションを取って、上記にシングルクォーテーションをつける
  'Set rng = Selection
  End With
  
  '設定前値 コンマ(,) は半角のみ
  Const PREWORD As String = "株式会社,合資会社,有限会社"
  '設定後値 括弧()は、半角のみ
  Const POSTWORD As String = "(株),(合),(有)"
  '=====================================
  
  prAr = Split(PREWORD, ",")
  psAr = Split(POSTWORD, ",")
  prSrWd = "[" & PREWORD & "]"
  psSrWd = "[" & POSTWORD & "]"
  
  With CreateObject("VBScript.RegExp")
    .Pattern = "[!-~]+"
    .Global = True
    .IgnoreCase = True
    For Each c In rng
      If VarType(c.Value) = vbString Then
        buf = c.Value
        Set Matches = .Execute(buf)
        If Not Matches Is Nothing Then
          For Each Match In Matches
            buf = Replace(buf, Match.Value, StrConv(Match.Value, _
            vbNarrow))
          Next Match
        End If
        If buf Like "*" & prSrWd & "*" Then
          For i = 0 To UBound(prAr)
            tbuf = Replace(buf, prAr(i), "")
            If Len(buf) > Len(tbuf) Then
              buf = tbuf & psAr(i)
              Exit For
            End If
          Next i
        End If
        If buf Like psSrWd & "*" Then
          For i = 0 To UBound(prAr)
            tbuf = Replace(buf, psAr(i), "")
            If Len(buf) > Len(tbuf) Then
              buf = tbuf & psAr(i)
              Exit For
            End If
          Next i
        End If
        
        If buf <> "" Then
          c.Offset(, OUTCOL).Value = buf
        Else
          c.Offset(, OUTCOL).Value = c.Value
        End If
        buf = ""
      End If
    Next c
  
  End With
  Set rng = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ここまでしっかり書いていただき、お礼申し上げます。ありがとうございました。
情けないことに、マクロ未経験でせっかくいただいたアドバイスの理解が浅いですが、後の作業が楽になるならと勉強しようという気になりました。

お礼日時:2008/05/29 20:36

◆やりかたいことがイマイチ解りませんが?


★こんなことなら
      A              B
1  株式会社OKWAVE    100
2  OKwave(株)▲本社       8

=LOOKUP(1,0/FIND("okwave",ASC(LOWER(A1:A2))),$B$1:$B$2)
★上の式なら、 8

=INDEX(B1:B2,MATCH(FALSE,INDEX(ISERROR(FIND("okwave",ASC(LOWER(A1:A2)))),),0),)
★この式なら、 100 が表示されます

★ヒントになればいいのですが

この回答への補足

説明が悪くてすみません。再度書いてみますが、ご理解いただけるか・・・。過去2年の売上記録を集計をしたいのですが、それぞれ40,000行くらいありました。

【やりたいこと】独立した2つのbook(シートでも)があります。
一方には担当者名が入っていて、別のBook2には担当者名は入っていません。そこでbook1データを元に担当者を導き出したいと思いますが、会社名の表記が一部違うためVlookupしても#N/Aが返ってくる物が発生する。

(book1)
      A          B
1    会社名         担当       
2  有限会社ABC        佐藤
3  エクセル株式会社▲本社   鈴木

(book2)
      A          B     C
1    会社名        住所     担当       
2  (有)ABC        東京都     ?
3  エクセル株式会社     埼玉県     ?

どこを着眼点に、どの手順でやれば良いのか混乱中です。再度よろしくお願いします。

補足日時:2008/04/29 09:56
    • good
    • 0
この回答へのお礼

関数も上手く組み合わせれば、便利なものなのですね。
今回は使えませんでしたが、教えていただいた関数は別件でも使えそうです。ありがとうございました。

お礼日時:2008/05/29 20:38

やりかたいことがイマイチ解りません。


> 法人恪を取ってからvlookupをしようと思っていますが
これだと
株式会社OKWAVE、OKwave(株)▲本社、(有)OKwaveは全て同じ法人として扱われてしまいます。

こんなアドインがあります。
http://srcedit.pekori.jp/tool/excelre.html
正規表現による検索・置換ダイアログを使える要になるアドインですが、
オマケとして、正規表現のワークシート関数が使えるようになります。

ただ、ご要望の内容がはっきりしないので、目的に合っているかどうか...

この回答への補足

ありがとうございます。
説明わかりづらいですよね・・・。
会社PCを貸与されているので、フリーソフトを含めて勝手にDLができないので残念です。

補足日時:2008/04/29 12:27
    • good
    • 0
この回答へのお礼

自宅PCへDLして、作業をすれば良かったのですね。
教えていただいたURLは今後の参考にさせていただきます、ありがとうございました。

お礼日時:2008/05/29 20:39

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