• ベストアンサー

半角カタカナを全角カタカナに変換したい

Windows2000/Microsoft Excel2000です。 入力されている文字列のカタカナが半角になっているのを 全角に一括変換する数式はありますでしょうか? 英数字は半角のまま残したいのですが。 JISを使うと英数字も全角になってしまいます。 ヘルプいただけると大変助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1のご回答は半角カナの濁点半濁点が全角になったとき1字化するのに苦労されているのではないでしょうか。 そこで=JIS(A1)のように関数を使うと、関数の方でその点は解決してくれるので、一旦全角にして、英字+数字だけを半角にプログラムで戻す方がやや簡単になるのではないかと思いました。 C3セルに全角文字列を入れてテスト。 Sub test01() s = Cells(3, 1) z = "0123456789" z = z & "abcdefghijklmnopqrstuvwxyz" z = z & "ABCDEFGHIJKLMNOPQRSTUVWXYZ" h = "0123456789" h = h & "abcdefghijklmnopqrstuvwxyz" h = h & "ABCDEFGHIJKLMNOPQRSTUVWXYZ" sn = "" For i = 1 To Len(s) s1 = Mid(s, i, 1) For j = 1 To Len(h) If s1 = Mid(z, j, 1) Then h1 = Mid(h, j, 1) sn = sn & h1 GoTo p01 End If Next j sn = sn & s1 p01: Next i MsgBox sn End Sub それにしても面倒ですね。

0406tgcckk
質問者

お礼

みなさん、どうもありがとうございました。 時間がなかったので、 まずJISを使ってすべてを全角にし、 その後Wordに貼り付けて文字校正で全角英数字を半角英数字に変えました。 ひとつひとつ見ないといけなかったので 結構大変でした。。。 ご提案くださった方法はあとでゆっくり試してみます。 詳しくご説明下さって、どうもありがとうございました。

その他の回答 (2)

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.2

一括ではできないかも。マクロの助けがいるんじゃないかな。 別法。 B1=asc(A1)ですべてが半角になります 。 B1のデータをコピーし、C1に「値のみ」で貼り付けます。 D1=Phonetic(C1) これでカタカナは全角、英数は半角になるはずです。 (振り仮名の設定はデフォルトのままで。) PHONETIC(ASC(A1))は動きませんので念のため。

0406tgcckk
質問者

お礼

ありがとうございました。

noname#4564
noname#4564
回答No.1

下記のVBA関数で可能です。 Option Explicit Public Function KanaWideConv(ByVal strSource As String) As String Dim strTmp As String Dim lngStrLength As Long Dim lngTmpLength As Long Dim i As Long Const AscKuten As Integer = &HA1 '半角句点のAscii文字コード Const AscDakuOn As Integer = &HDE '半角濁音のAscii文字コード Const AscHanDakuOn As Integer = &HDF '半角半濁音のAscii文字コード lngStrLength = Len(strSource) Select Case lngStrLength Case Is > 1 '2文字以上ある場合。 '先頭の文字に濁音、半濁音が格納されている場合、エラーとなるので、 '2文字めから処理。(先頭の文字のみ、別処理) For i = lngStrLength To 2 Step -1 strTmp = Mid$(strSource, i, 1) Select Case Asc(strTmp) '濁音、半濁音の処理。(直前の文字と2文字1組で処理) Case AscDakuOn, AscHanDakuOn '変換後、文字数が変わるため、変更前の文字数を取得。 lngTmpLength = Len(strSource) strSource = Replace(strSource, _ Mid$(strSource, i - 1, 2), _ StrConv(Mid$(strSource, i - 1, 2), vbWide), _ , _ , _ vbBinaryCompare) '文字数の変更に合せてカウンタを変更。 i = i - (lngTmpLength - Len(strSource)) 'その他の半角カナ Case AscKuten To &HDD Mid$(strSource, i, 1) = StrConv(strTmp, vbWide) End Select Next i '先頭文字の処理。 strTmp = Mid$(strSource, 1, 1) Select Case Asc(strTmp) Case AscKuten To AscHanDakuOn Mid$(strSource, 1, 1) = StrConv(strTmp, vbWide) End Select Case 1 '1文字のみの場合。 Select Case Asc(strSource) Case AscKuten To AscHanDakuOn strSource = StrConv(strSource, vbWide) End Select End Select KanaWideConv = strSource End Function

0406tgcckk
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう