こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2003-06-04 19:14:37

QNo.566115

困ってます

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

#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
それにしても面倒ですね。

投稿日時 - 2003-06-04 22:55:56

お礼

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

投稿日時 - 2003-06-05 09:56:47

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

PHONETIC(ASC(A1))は動きませんので念のため。

投稿日時 - 2003-06-04 19:59:28

お礼

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

投稿日時 - 2003-06-05 09:54:06

ANo.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

投稿日時 - 2003-06-04 19:51:39

お礼

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

投稿日時 - 2003-06-05 09:53:49

あなたにオススメの質問