
2つのシートからVlookupを使って、データを呼び出そうと思っています。しかし、各シートの法人各表記が下記例のように
"マエカブ"、"ウシロカブ"、"スペースあり"、"スペースなし"と表記がシート毎にマチマチで違うのと、どちらも7000行以上の膨大なデータ量(MBクラス(?))になっているため、手作業でコツコツやるには時間が足りません。
過去回答例を見てデータ>区切り位置で法人各を取ってからvlookupをしようと思っていますが、データを揃える有効な方法を教えてください。※そもそもvlookupを使うことが間違いなのか・・・それも判断できないため、確実にできれば他の方法でも構いません。
(例)
【シート1の表記】
株式会社OKWAVE
OKwave(株)▲本社 ←▲はスペースを表しています
【シート2の表記】
(有)OKwave
オーケーwave(合)
法人格は置換でどちらか一方に合わせることが可能ですが、
その先でつまづいています。。。
明日夕方が締め切りで、かなり焦っていますが、どうぞよろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
こんにちは。
もう時間切れだとは思いますけれど、一言書かせていただきます。
表に出る表記は、勝手に変えてはいけないです。しかし、表計算独特というか、検索の時に使用するデータの基準というものが、前株なのか、後株なのかというよりも、そこに一定の基準を与えて、並べ替えていくことをしないと、その表の利用度としてはかなり下がってしまうと思いますし、文字数を減らして処理させるというのは、表計算の常套手段です。その時に、おおむね、(株)と(有)は、後に回すというのがということをします。そうしないと、並べ替えが不自然になるからです。また、法人格を切り離すと、検索に、VlookUpなどを使う関係で、検索が不自由になってしまいます。
いずれにしても、正式名称とは別に、集計用の名称が存在するという考え方をします。それは、経験的もので、そのような考え方で、#3のマクロは作られています。表計算のみでは、オフコンやデータベースソフトのようには行きません。また、移植しようにも、1~2日で間に合うような仕事ではありません。
表に出る資料と、内部資料とは別問題です。そうでもしないと、いちいち、相手まかせや入力者の都合で変換されたものに、従ったら、とても集計や統一的な作業が出来ません。すでに、そうした状況に陥ってしまったことは、精度として格段に落ちてしまっていますから、データとしての信頼性も落ちてしまっていますが、それは、もう言ってもしょうがないことです。
本来は、大分類-中分類-小分類というようなコードの別け方をして、コードを確定して統一させてしまうというのが、通例だと思いますが、表計算というものは、あまり、そういう方式には向かないようです。また、相手先が、本社なのか支店なのかの区別というのは、営業割り振りの場合は、そう簡単には統一できるわけではありません。
これは、本来、データベースのマスターで、オートコレクトにして出す方式やイニシャルで出すならならともかく、Excelのような表計算ですと、あまりうまくいきません。
お礼が遅くなりました。
おっしゃる通り、表計算ソフトを使っての管理に無理があり過ぎると思いました。全社で使用するSAPのような基幹ソフトと営業独自のアプリ間のデータに整合性が取れていないため、更にエクセルで・・・と本末転倒なことを求められ、せざるを得ない状況でした。
とりあえず、部署内マスターとして利用できるよう、コツコツと作業を始めました。
No.4
- 回答日時:
すでに30日になってしまいましたが……。
法人格は「置換」して表記を統一するということで、どこに問題が生じるのかなぁ? 統一されていれば、VLOOKUPでもエラーは出ないですよね。VLOOKUPで別ブックから担当者とかを引っ張りだしたら、[形式を選択して貼り付け]コマンドで、「値」に変換しておいたほうがいいと思うけど。
一方で「■本社」みたいなのは、会社名じゃないから削除する方向か、もしどうしても必要なら、おっしゃる通り「区切り位置」コマンドを利用するなどして、もう1つ列を用意して、そこに出力するとか。
統一する際には、「(株)」とかに略称ではなく、「株式会社」とかの正式名称にするのがいいと思う。で、法人格を前付けにするか、後ろ付けにするかというのは、登記にも関係してくるところだから、勝手に「前付けに統一」とかしないほうがいいと思います。そんなんだったら、そもそも法人格なんて付けなくていいかも。
区切り位置で分けて、地道な作業することにしました。
SAPのマスターが『(株)』←2バイトで登録されている自体で、信じられない会社です・・・。涙
No.3
- 回答日時:
こんにちは。
私なども、そうした大変な場は何度もくぐっていますから、それは、まず、出来る部分からしてください。ただ、最終的に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
ここまでしっかり書いていただき、お礼申し上げます。ありがとうございました。
情けないことに、マクロ未経験でせっかくいただいたアドバイスの理解が浅いですが、後の作業が楽になるならと勉強しようという気になりました。
No.2
- 回答日時:
◆やりかたいことがイマイチ解りませんが?
★こんなことなら
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 エクセル株式会社 埼玉県 ?
どこを着眼点に、どの手順でやれば良いのか混乱中です。再度よろしくお願いします。
関数も上手く組み合わせれば、便利なものなのですね。
今回は使えませんでしたが、教えていただいた関数は別件でも使えそうです。ありがとうございました。
No.1
- 回答日時:
やりかたいことがイマイチ解りません。
> 法人恪を取ってからvlookupをしようと思っていますが
これだと
株式会社OKWAVE、OKwave(株)▲本社、(有)OKwaveは全て同じ法人として扱われてしまいます。
こんなアドインがあります。
http://srcedit.pekori.jp/tool/excelre.html
正規表現による検索・置換ダイアログを使える要になるアドインですが、
オマケとして、正規表現のワークシート関数が使えるようになります。
ただ、ご要望の内容がはっきりしないので、目的に合っているかどうか...
この回答への補足
ありがとうございます。
説明わかりづらいですよね・・・。
会社PCを貸与されているので、フリーソフトを含めて勝手にDLができないので残念です。
自宅PCへDLして、作業をすれば良かったのですね。
教えていただいたURLは今後の参考にさせていただきます、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- その他(Microsoft Office) エクセルの数式で教えてください。 2 2023/01/12 13:51
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) エクセルに詳しい方 よく読んでからのご回答お願いします 外部からデータが来ますが、日付が202201 7 2022/06/29 16:15
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- Excel(エクセル) 【エクセル】COUNTIFの検索条件が可変する数字の場合の数式 1 2022/09/27 15:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルの複雑なシフト表から...
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
Office2021のエクセルで米国株...
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
他のシートの検索
-
【マクロ】左のブックと右のブ...
-
Amazonでマイクロソフトオフィ...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
【マクロ】列を折りたたみ非表...
-
【マクロ】オートフィルターの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報