No.4ベストアンサー
- 回答日時:
板汚しすみません。
まだ半角スペース残ってた=CHOOSE(LEN(A2),,LEFT(A2,1)&REPT(" ",5)&RIGHT(A2,1),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",B2-1))&REPT(" ",3)&REPLACE(RIGHT(A2,3-B2),2,0,REPT(" ",2-B2)),
IF(MOD(B2,2),LEFT(A2,B2)&REPT(" ",3)&RIGHT(A2,4-B2),
REPLACE(LEFT(A2,2),2,0," ")&" "&REPLACE(RIGHT(A2,2),2,0," ")),
IF(OR(B2=1,B2=4),LEFT(A2,B2)&REPT(" ",2)&RIGHT(A2,5-B2),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",3-B2))&" "&REPLACE(RIGHT(A2,5-B2),2,0,REPT(" ",B2-2))),
LEFT(A2,B2)&" "&RIGHT(A2,6-B2),A2)
No.5
- 回答日時:
こんにちは。
とても気になった質問なので、私も本格的に試してみました。
なかなか手間の掛かる準備が必要です。
VBA系とは違う種類のプログラムですが、あえて、それをVBAでやってみました。
当然、VBAだけでは、不可能ですし、当然、関数だけでも不可能です。形態素解析のツールのkakasi を使って分かち書きをするわけですが、ただ、本来は人名辞典が必要です。MS-IMEの辞書は、今は抜き取れないのでしょうか?昔のWXの時代なら、取り出せたのですが。
Vector には以下のような人名辞書があります。WXIII用のものもあるようです。これは、テキストファイルですから、容易に抜き出せます。
http://www.vector.co.jp/vpack/filearea/data/writ …
今回は、私にとっても初めての組み込みで、デフォルトの辞書のままでやってみました。
「田中一」なら、反応するのに、「田中角栄」には反応しないという矛盾とも思える現象があります。
まず、Kakasi というプログラムを手に入れてください。
kakasi-2.3.4.zip
http://www.namazu.org/win32/
1)Windowsへの「kakasi」の導入方法
http://language-and-engineering.hatenablog.jp/en …
ここらを参考にしてみてください。Path をコンパネのシステムから加えるのもお忘れなく。
辞書は、mkkanwa.exe を使って作ります。
まだ、細かい所はチェックしていませんが、仕組みは分かっていただけるはずです。
'//
Sub KakasiForVBA()
Dim ret As Variant
Dim myName As String
Dim c As Variant, k As Long, k2 As Long
Dim fmt1 As String, fmt2 As String
Dim faName As String, fiName As String
With Range("B2", Cells(Rows.Count, 2).End(xlUp))
.ClearContents
.Font.Name = "MS ゴシック"
End With
For Each c In Range("A2", Cells(Rows.Count, 1).End(xlUp))
Application.ScreenUpdating = False 'ループが終わったら見えるようにする
Do
myName = Replace(c, Space(1), "", , , vbTextCompare)
Loop Until InStr(1, myName, Space(1), vbTextCompare) = 0
If c.Value Like "[一-龠]*" Then
ret = DivideName(CStr(c.Value))
ret = Application.Clean(ret)
ret = Trim(ret)
If ret <> "0" Then
k = InStr(ret, Space(1))
k2 = InStr(k + 1, ret, Space(1))
If k > 0 Then
'family name
If k2 = 4 Then
faName = Trim(Mid(ret, 1, k2 - 1))
Else
faName = Trim(Mid(ret, 1, k - 1))
End If
faName = Replace(faName, Space(1), "")
Select Case Len(faName)
Case 1: fmt1 = "@" & Space(3)
Case 2: fmt1 = "@ @"
Case 3: fmt1 = "@@@"
Case 4: fmt1 = "@@@@"
End Select
faName = Format$(faName, fmt1)
'first name
If k2 = 4 Then
fiName = Trim(Mid(ret, k2 + 1))
Else
fiName = Trim(Mid(ret, k + 1))
End If
fiName = Replace(fiName, Space(1), "")
Select Case Len(fiName)
Case 1: fmt2 = Space(4) & "@"
Case 2: fmt2 = Space(1) & "@" & Space(1) & "@"
Case 3: fmt2 = "@@@"
Case 4: fmt2 = "@@@@"
End Select
fiName = Format$(fiName, fmt2)
c.Offset(, 1).Value = Space(1) & faName & Space(1) & fiName
faName = "": fiName = ""
End If
End If
End If
Application.ScreenUpdating = True
Next
End Sub
Function DivideName(ByVal myName As String)
Dim WShell As Object
Dim oExec As Object
Dim sResult As String
Dim sCommand As String
Dim execmd As String
Dim nowDir As String
nowDir = ThisWorkbook.Path 'CurDir()
Set WShell = CreateObject("WScript.Shell")
ChDir "c:\kakasi"
execmd = " c:\kakasi\bin\kakasi.exe -w"
sCommand = "cmd /c echo " & myName & " |" & execmd 'kakasi -w"
Set oExec = WShell.Exec(sCommand)
Do Until oExec.Status: DoEvents: Loop
If Not oExec.StdErr.AtEndOfStream Then
sResult = oExec.StdErr.ReadAll
ElseIf Not oExec.StdOut.AtEndOfStream Then
sResult = oExec.StdOut.ReadAll
End If
If sResult <> "" Then
''Debug.Print sResult
DivideName = sResult
Else
DivideName = "0"
End If
ChDir nowDir
End Function
'//
注:このkakasiは、姓と名の分かち書きを任せているにすぎず、細かな調整をしているわけではありません。
No.3
- 回答日時:
一部半角スペースになっていたのを修正
=CHOOSE(LEN(A2),,LEFT(A2,1)&REPT(" ",5)&RIGHT(A2,1),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",B2-1))&REPT(" ",3)&REPLACE(RIGHT(A2,3-B2),2,0,REPT(" ",2-B2)),
IF(MOD(B2,2),LEFT(A2,B2)&REPT(" ",3)&RIGHT(A2,4-B2),
REPLACE(LEFT(A2,2),2,0," ")&" "&REPLACE(RIGHT(A2,2),2,0," ")),
IF(OR(B2=1,B2=4),LEFT(A2,B2)&REPT(" ",2)&RIGHT(A2,5-B2),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",3-B2))&" "&REPLACE(RIGHT(A2,5-B2),2,0,REPT(" ",B2-2))),
LEFT(A2,B2)&" "&RIGHT(A2,6-B2),A2)
No.2
- 回答日時:
長いです。
文字数で分岐、B列名字の文字数(2文字と7文字の場合はいらないけど)=CHOOSE(LEN(A2),,LEFT(A2,1)&REPT(" ",5)&RIGHT(A2,1),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",B2-1))&REPT(" ",3)&REPLACE(RIGHT(A2,3-B2),2,0,REPT(" ",2-B2)),
IF(MOD(B2,2),LEFT(A2,B2)&REPT(" ",3)&RIGHT(A2,4-B2),
REPLACE(LEFT(A2,2),2,0," ")&" "&REPLACE(RIGHT(A2,2),2,0," ")),
IF(OR(B2=1,B2=4),LEFT(A2,B2)&REPT(" ",2)&RIGHT(A2,5-B2),
REPLACE(LEFT(A2,B2),2,0,REPT(" ",3-B2))&" "&REPLACE(RIGHT(A2,5-B2),2,0,REPT(" ",B2-2))),
LEFT(A2,B2)&" "&RIGHT(A2,6-B2),A2)
No.1
- 回答日時:
「金田一太郎」…さて、このかたは「かねだ いちたろう」さんでしょうか、「きんだいち たろう」さんでしょうか。
どこで区切るかを細かく指定する非常に大きなデータベースを抱えたプログラムになるので、
現状のやり方で良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Excelで文字間にスペースを一発で入れられる方法を教えてください。
Excel(エクセル)
-
連名で2人の名前の文字数が違う場合
式場探し・ウェディングドレス・結婚準備
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「等々」は「とうとう」「など...
-
「はや」の表記
-
「恩恵にあずかる」は「与る」...
-
「翔」の字の読み方
-
「以上」と「超」の意味の違い
-
多岐にわたる、は、亘る OR ...
-
「一言一句」「一字一句」と「...
-
「目的」と「概要」の違いを分...
-
七面六臂(しちめんろっぴ)に...
-
眩光の読み方
-
意味を教えてください(国語の...
-
天婦羅と天麩羅の違いを教えて...
-
「はぐらかす」は漢字でどう書...
-
図る?計る?測る?量る?諮る...
-
文量は正しい日本語ですか?
-
向かい入れる? 迎い入れる?
-
漢字の読み方
-
「必然」「必至」 「必定」の違...
-
「終わる」でも良くなったの?...
-
「耳をダンボにする」という言...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
多岐にわたる、は、亘る OR ...
-
「等々」は「とうとう」「など...
-
「はや」の表記
-
「以上」と「超」の意味の違い
-
「恩恵にあずかる」は「与る」...
-
「一言一句」「一字一句」と「...
-
「目的」と「概要」の違いを分...
-
「翔」の字の読み方
-
文量は正しい日本語ですか?
-
図る?計る?測る?量る?諮る...
-
「拠点」と「拠店」の意味の違...
-
七面六臂(しちめんろっぴ)に...
-
経験を活かす?それとも生かす
-
合意の上・下の使い分け
-
「できるか、できないか」を熟...
-
「終わる」でも良くなったの?...
-
エクセルで「印」のしるしを書...
-
「~より」と「~から」
-
ラテン語で「繋ぐ」をおしえて...
-
漢字を教えてください。。。テ...
おすすめ情報