dポイントプレゼントキャンペーン実施中!

2万件の顧客データのデータクリーニングをしています。
1セルに漢字やカタカナ、ひらがなが混在する場合、それぞれの抽出、
もしくはあるかないかがわかる方法はありますか?教えてください。

A 回答 (5件)

ANo.1です、手の内と、テストデータ(機密情報は適当にいじって)を開示していただかないと、遠回りするだけです。

結局、最初の回答に戻っています。
ユーザー関数で行う事例です。
Function extractAlphabet(targetString As String) As Variant
'下行の[]内の半角スペースを削除すると、一続きの半角英文字列のみがヒットします。
extractAlphabet = subMatchWord(targetString, "([A-z ]+)")
End Function

Private Function subMatchWord(targetString As String, matchString As String) As Variant
Dim regEX As Variant
Dim Matches As Variant
Dim match As Variant

Set regEX = CreateObject("VBScript.RegExp")
regEX.MultiLine = False
regEX.Pattern = matchString
regEX.ignorecase = True
regEX.Global = False
On Error GoTo errorHandle
Set Matches = regEX.Execute(targetString)

If Matches(0).subMatches.Count > 0 Then
subMatchWord = Matches(0).subMatches.Item(0)
Else
subMatchWord = CVErr(xlErrNA)
End If
Set Matches = Nothing
Set regEX = Nothing
Exit Function
errorHandle:
subMatchWord = CVErr(xlErrNA)
End Function
実用上は、データが2万もあれば、上記関数を使ってVBAでループを回して処理すべきです。
試験結果は下記の通り。
..............................................A.......................................B
..1...............................元データ.................半角英字抽出
..2...................hogecompanyltd...............hogecompanyltd
..3...............hoge company ltd...........hoge company ltd
..4..昔々あるところにお爺さんと...............................#N/A
..5................昔々an old manと......................an old man
..6.................................................=extractAlphabet(A5)
1行目は見出し
6行目はこんな式が入っていますという意味です。
    • good
    • 0
この回答へのお礼

データ的にはあのような企業情報が続くだけなのですが・・・。
VBAはちょっとわからないので、社内の人に見せて聞いてみます。
度々、ありがとうございました。

お礼日時:2008/08/01 22:10

A No.1です。


何をされたいのか、いまいち分かりません。
英語の社名というのは hoge company ltd.とかいうパターンなのでしょうか。とすると、半角スペースがあって当たり前のような気がしますが、半角スペースをみつけてどうされたいのでしょうか。

この回答への補足

半角スペースを見つけたいわけではありません。
データクリーニングをしていると、書いたんですが、
hoge company ltd.が正しい形として、データではhogecompanyltd.となっている可能性があります。
なので、英語部分だけをみつけて、入力を統一したいのです。

補足日時:2008/07/30 22:13
    • good
    • 0

A No.1です。


手の内を明かされる気はなさそうなので、2万セル×文字数だけループを回して判定しては如何。人間がやるよりは速いでしょう、きっと。
<テスト用データ> 1行目は単なる見出し、A2が試験用データです。
..............................A...............B...............C......................D
..1......テストデータ.........................1文字........JIS CODE
..2..Azヲ゜ァヶぁん亜........................................=CODE(C2)
亜の後ろには黒の変種の漢字が入れてありますが、表示されない...
<1セルを処理するコード>
Sub test()
Dim i As Long
Dim buf As String
Dim jisCode As Long

buf = ActiveSheet.Range("a2").Value
For i = 1 To Len(buf)
ActiveSheet.Range("c2").Value = Mid(buf, i, 1)
jisCode = ActiveSheet.Range("d2").Value
Select Case jisCode
Case 65 To 122
Debug.Print "半角英"
Case 166 To 223
Debug.Print "半角カナ"
Case 9505 To 9590
Debug.Print "全角カナ"
Case 9249 To 9331
Debug.Print "全角かな"
Case 12321 To 38700
Debug.Print "漢字"
End Select
Next i
End Sub
<処理結果>
半角英
半角英
半角カナ
半角カナ
全角カナ
全角カナ
全角かな
全角かな
漢字
漢字

※1文字ずつ、C2に入れて処理しているのは、ワークシート関数のcodeにあたる物が、VBAの関数になさそうなのと、VBAのASCWで、UNICODEにすると、正負が入り交じって、自分の手には負えないためです。全てコードでやりたければ、参考URLをご覧下さい。

参考URL:http://www.ken3.org/vba/backno/vba079.html
    • good
    • 0
この回答へのお礼

仕事中でしたので、返答遅れてしまいました。
申し訳ありません。

データは
1行目が数字
2行目が項目
3行目からデータ 
になります。
イメージ的にはこんな感じです↓

会社名 郵便番号 都道府県 市区郡 番地   電話番号・・・
00会社 146-8909 東京都  葛飾区 7-4-00 03-4347-0000・・

この会社名の中に、英語の社名などの社名の中に半角スペースが入る場合があり、簡単にわかる方法はないかと思い投稿いたしました。
エクセル初心者ですので、難しいことはわからないのですが、HP見てみます。
ありがとうございました。

お礼日時:2008/07/29 23:55

◆A1の文字列の中のカタカナの文字数を表示する式です


=COUNT(FIND("ー",A1,1))+SUMPRODUCT((CHAR(ROW($9505:$9590))=MID(A1,COLUMN(1:1),1))*1)

この回答への補足

ご回答ありがとうございます。
英語の場合の式も教えていただけると助かります!

補足日時:2008/07/29 14:51
    • good
    • 0

正規表現で、{一-龠}が漢字※、{ァ-ヶ}がカタカナ、{ぁ-ん}がひらがなといった感じで抽出できる可能性もありますが、どの様なデータなのか、例をある程度のバリエーションで見せていただかないと、イメージが湧きませんし、試行もできません。


正規表現については、「正規表現」もしくは「VBA 正規表現」でWEB検索していただくと、沢山情報が得られます。
ご参考まで。
※JISの第2、第3水準なのか、コード表にはもっと後ろまで難しい漢字が並んでおります。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています