人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelについてです。

ある列に「xx株式会社」「(株)yyy」といった文字列が羅列してあります。別に、文字列(会社名)とそのコード(証券コード)の対応表があります。
セル範囲内に、対応表に合致する文字列があるかどうかを検索し、あったならばその横の列に対応するコードを次々と付加していく。ただし、文字列には表記ゆれ(株式会社→(株)など)があるために正規表現が使えるなど、検索の柔軟さが確保されていることが条件です。(別に用意したtxtファイルなどから、表記ゆれ条件を指定できるとなおよいです。)

そういうマクロ/プログラムを、どこかで頒布/販売していないでしょうか?

●質問者: miyatyu
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Excel txt コード セル ファイル
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● minkpa
●27ポイント

http://www.relief.jp/itnote/archives/000721.php

◎質問者からの返答

素早い反応はうれしいのですが、質問内容と関係ないことをお答えいただいても困ります。


2 ● きゃづみぃ
●27ポイント

表記のゆれがあるならば、一括で 置換しちゃえばいいでしょう。

たとえば 株式会社を(株)に置換する(逆でもいいですが)

それから Vlookupで取得して表示させればいいでしょう。

http://www.yoshikawa.co.jp/ybs/skilup/ybs0308.htm

◎質問者からの返答

回答ありがとうございます。

確かにそうなんですが、それを一々数百ファイルに対してやるのは面倒&マクロを一から書くのも(自分のレベルでは)大変。

ただ、同じように表記ゆれを許容したvlookupを実現したい人は結構いそうなので、それを一括でやってくれるマクロやソフトウェアはないかなと思っています。


3 ● hiramatsu_kg
●26ポイント

http://www.geocities.jp/happy_ngi/

◎質問者からの返答

「はてなの人力検索がGoogleを超える日は来るのか?」

ずいぶんと婉曲な表現でしたが、hiramatsu_kgさんの仰りたいこと分かりました。


4 ● airplant
●10ポイント ベストアンサー

正規表現で記載したリストに基づき、元データを変更するマクロを作ってみました。

これをVLOOKUPすれば出てきます。

●シート側

A B C
(株)はてな =ConvByRegExp(会社, ゆれリスト) vlookup(正規化会社,....

(関数は、手打ち以外に、関数の挿入→ユーザ定義関数でも入れられます)


●名前定義の前提(全部をA:Aとか、D20:E23のように書いてもいいですが、、、)

A列:会社

B列:正規化会社

どこか:ゆれリスト(→別シートにして、同じ物を全部使う。マクロのExcelに入れておくといいと思う)

D E
20 \(株\) 株式会社
21 \(有\) 有限会社
22 [\((]有限[\))] 有限会社
23

→もし名前付けが分からないときは、下記を参照ください。

http://d.hatena.ne.jp/airplant/20070808#1186598203

●マクロ

Option Explicit

'正規表現リストを元に文字列を変更する
'
'表記方法 ConvByRegExp(ソース文字列, 正規表現リスト)
' 出力:正規表現で置換え後の文字列
'Excel内からの呼び出し:
' = ConvByRegExp(Src, ExpList)
' Src:ソースの列に名前を付けるか、A:Aのように指定
' ExpList:「s/from-pattern/to-pattern/」のfromとtoのパターンリストを
'      配列として囲んだものを指定する。リストの最後はNull。
' \(株\) 株式会社
' \(有\) 有限会社
' [\((]有限[\))] 有限会社


Function ConvByRegExp(strSrc As String, ParamArray RGEPattern() As Variant) As String
 
 Dim oRge As Variant
 Dim lnI As Long
 Dim strRep As String
 
 '引数2(正規表現リスト)がなければ#N/Aエラー返して終わり
 If IsMissing(RGEPattern) Then
 ConvByRegExp = CVErr(xlErrNA)
 Exit Function
 Else
 If Not IsArray(RGEPattern) Then
 ConvByRegExp = CVErr(xlErrNA)
 Exit Function
 End If
 End If
 
 Set oRge = CreateObject("VBScript.RegExp")
 With oRge
 .IgnoreCase = True '大小文字無視
 .Global = True '文字列全体が対象
 lnI = 1
 Do While RGEPattern(0)(lnI, 1) <> ""
 .Pattern = RGEPattern(0)(lnI, 1) '検索パターン
 If .Test(strSrc) Then 'マッチしたら文字列変更
 strRep = RGEPattern(0)(lnI, 2)
 ConvByRegExp = .Replace(strSrc, strRep)
 Set oRge = Nothing
 Exit Function
 End If
 lnI = lnI + 1
 Loop
 End With
 ConvByRegExp = strSrc
 Set oRge = Nothing

End Function

上記で動作することは、確認済みです。

他の諸条件(正規表現でのゆれを現す件数や、ファイルが別なのか、同じなのかなど)が不明なので、これ以上は作っていません。ファイル数が多いようなので、自動でオープンしたり、今回作った関数を貼り付けるのを自動でということが必要なのかも知れません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ