VB.netでStrConvを使わずに全角半角変換を行うツールを作りました。
VB.netのStrConv関数は、一部の環境で正常に動作しない場合があります。
例えば、Windows7で互換モードでアプリケーションを動作させた場合に不具合が生じます。
半角、全角の文字を一文字ずつ変換するコードを書きました。
最初は、コツコツ書いていたのですが、
途中から面倒になって、StrConv関数を使って、
ソースコードをプログラムで書きました。
一応、その時に使ったコードも載せておきます。
RichTextBox1.Textに文字一覧を入力しておくと、
全角変換用と、半角変換用のコードを生成します。
Dim sText As String
Dim sCharArray() As String
sText = RichTextBox1.Text
sCharArray = sText.Split(” ”)
Dim s全角へ As String
Dim s半角へ As String
Dim s半角 As String
For i = 0 To UBound(sCharArray)
s半角 = StrConv(sCharArray(i), vbNarrow)
s全角へ &= “sText = sText.Replace(""" & s半角 & """, """ & sCharArray(i) & """)” & vbCrLf
s半角へ &= “sText = sText.Replace(""" & sCharArray(i) & """, """ & s半角 & """)” & vbCrLf
Next
RichTextBox2.Text = s全角へ & vbCrLf & s半角へ
半角から全角に文字列を変換する際、 濁点ありのカタカナを濁点なしのカタカナより先に変換する必要があります。
そうしないと、例えば、「パイナップル」を変換した場合、
「パイナップル」となってしまいます。
正しくは、「パイナップル」です。
「パイナップル」(半角の「゜」になってしまっている。)
「パイナップル」(正しい。)
半角を全角に変換するコード
Private Sub btn全角に変換_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn全角に変換.Click
Dim sText As String
sText = RichTextBox1.Text
数字を全角に変換(sText)
英字を全角に変換(sText)
‘濁点ありを濁点なしより先に処理する必要がある。
濁点ありカナを全角に変換(sText)
濁点なしカナを全角に変換(sText)
記号を全角に変換(sText)
RichTextBox2.Text = sText
End Sub
Private Sub 数字を全角に変換(ByRef sText As String)
sText = sText.Replace(“0”, “0”)
sText = sText.Replace(“1”, “1”)
sText = sText.Replace(“2”, “2”)
sText = sText.Replace(“3”, “3”)
sText = sText.Replace(“4”, “4”)
sText = sText.Replace(“5”, “5”)
sText = sText.Replace(“6”, “6”)
sText = sText.Replace(“7”, “7”)
sText = sText.Replace(“8”, “8”)
sText = sText.Replace(“9”, “9”)
End Sub
Private Sub 英字を全角に変換(ByRef sText As String)
sText = sText.Replace(“A”, “A”)
sText = sText.Replace(“B”, “B”)
sText = sText.Replace(“C”, “C”)
sText = sText.Replace(“D”, “D”)
sText = sText.Replace(“E”, “E”)
sText = sText.Replace(“F”, “F”)
sText = sText.Replace(“G”, “G”)
sText = sText.Replace(“H”, “H”)
sText = sText.Replace(“I”, “I”)
sText = sText.Replace(“J”, “J”)
sText = sText.Replace(“K”, “K”)
sText = sText.Replace(“L”, “L”)
sText = sText.Replace(“M”, “M”)
sText = sText.Replace(“N”, “N”)
sText = sText.Replace(“O”, “O”)
sText = sText.Replace(“P”, “P”)
sText = sText.Replace(“Q”, “Q”)
sText = sText.Replace(“R”, “R”)
sText = sText.Replace(“S”, “S”)
sText = sText.Replace(“T”, “T”)
sText = sText.Replace(“U”, “U”)
sText = sText.Replace(“V”, “V”)
sText = sText.Replace(“W”, “W”)
sText = sText.Replace(“X”, “X”)
sText = sText.Replace(“Y”, “Y”)
sText = sText.Replace(“Z”, “Z”)
sText = sText.Replace(“a”, “a”)
sText = sText.Replace(“b”, “b”)
sText = sText.Replace(“c”, “c”)
sText = sText.Replace(“d”, “d”)
sText = sText.Replace(“e”, “e”)
sText = sText.Replace(“f”, “f”)
sText = sText.Replace(“g”, “g”)
sText = sText.Replace(“h”, “h”)
sText = sText.Replace(“i”, “i”)
sText = sText.Replace(“j”, “j”)
sText = sText.Replace(“k”, “k”)
sText = sText.Replace(“l”, “l”)
sText = sText.Replace(“m”, “m”)
sText = sText.Replace(“n”, “n”)
sText = sText.Replace(“o”, “o”)
sText = sText.Replace(“p”, “p”)
sText = sText.Replace(“q”, “q”)
sText = sText.Replace(“r”, “r”)
sText = sText.Replace(“s”, “s”)
sText = sText.Replace(“t”, “t”)
sText = sText.Replace(“u”, “u”)
sText = sText.Replace(“v”, “v”)
sText = sText.Replace(“w”, “w”)
sText = sText.Replace(“x”, “x”)
sText = sText.Replace(“y”, “y”)
sText = sText.Replace(“z”, “z”)
End Sub
Private Sub 濁点なしカナを全角に変換(ByRef sText As String)
sText = sText.Replace(“ア”, “ア”)
sText = sText.Replace(“イ”, “イ”)
sText = sText.Replace(“ウ”, “ウ”)
sText = sText.Replace(“エ”, “エ”)
sText = sText.Replace(“オ”, “オ”)
sText = sText.Replace(“カ”, “カ”)
sText = sText.Replace(“キ”, “キ”)
sText = sText.Replace(“ク”, “ク”)
sText = sText.Replace(“ケ”, “ケ”)
sText = sText.Replace(“コ”, “コ”)
sText = sText.Replace(“サ”, “サ”)
sText = sText.Replace(“シ”, “シ”)
sText = sText.Replace(“ス”, “ス”)
sText = sText.Replace(“セ”, “セ”)
sText = sText.Replace(“ソ”, “ソ”)
sText = sText.Replace(“タ”, “タ”)
sText = sText.Replace(“チ”, “チ”)
sText = sText.Replace(“ツ”, “ツ”)
sText = sText.Replace(“テ”, “テ”)
sText = sText.Replace(“ト”, “ト”)
sText = sText.Replace(“ナ”, “ナ”)
sText = sText.Replace(“ニ”, “ニ”)
sText = sText.Replace(“ヌ”, “ヌ”)
sText = sText.Replace(“ネ”, “ネ”)
sText = sText.Replace(“ノ”, “ノ”)
sText = sText.Replace(“ハ”, “ハ”)
sText = sText.Replace(“ヒ”, “ヒ”)
sText = sText.Replace(“フ”, “フ”)
sText = sText.Replace(“ヘ”, “ヘ”)
sText = sText.Replace(“ホ”, “ホ”)
sText = sText.Replace(“マ”, “マ”)
sText = sText.Replace(“ミ”, “ミ”)
sText = sText.Replace(“ム”, “ム”)
sText = sText.Replace(“メ”, “メ”)
sText = sText.Replace(“モ”, “モ”)
sText = sText.Replace(“ヤ”, “ヤ”)
sText = sText.Replace(“ユ”, “ユ”)
sText = sText.Replace(“ヨ”, “ヨ”)
sText = sText.Replace(“ラ”, “ラ”)
sText = sText.Replace(“リ”, “リ”)
sText = sText.Replace(“ル”, “ル”)
sText = sText.Replace(“レ”, “レ”)
sText = sText.Replace(“ロ”, “ロ”)
sText = sText.Replace(“ワ”, “ワ”)
sText = sText.Replace(“ヲ”, “ヲ”)
sText = sText.Replace(“ン”, “ン”)
sText = sText.Replace(“ァ”, “ァ”)
sText = sText.Replace(“ィ”, “ィ”)
sText = sText.Replace(“ゥ”, “ゥ”)
sText = sText.Replace(“ェ”, “ェ”)
sText = sText.Replace(“ォ”, “ォ”)
sText = sText.Replace(“ャ”, “ャ”)
sText = sText.Replace(“ュ”, “ュ”)
sText = sText.Replace(“ョ”, “ョ”)
sText = sText.Replace(“ッ”, “ッ”)
sText = sText.Replace(“ー”, “ー”)
End Sub
Private Sub 濁点ありカナを全角に変換(ByRef sText As String)
sText = sText.Replace(“ヴ”, “ヴ”)
sText = sText.Replace(“ガ”, “ガ”)
sText = sText.Replace(“ギ”, “ギ”)
sText = sText.Replace(“グ”, “グ”)
sText = sText.Replace(“ゲ”, “ゲ”)
sText = sText.Replace(“ゴ”, “ゴ”)
sText = sText.Replace(“ザ”, “ザ”)
sText = sText.Replace(“ジ”, “ジ”)
sText = sText.Replace(“ズ”, “ズ”)
sText = sText.Replace(“ゼ”, “ゼ”)
sText = sText.Replace(“ゾ”, “ゾ”)
sText = sText.Replace(“ダ”, “ダ”)
sText = sText.Replace(“ヂ”, “ヂ”)
sText = sText.Replace(“ヅ”, “ヅ”)
sText = sText.Replace(“デ”, “デ”)
sText = sText.Replace(“ド”, “ド”)
sText = sText.Replace(“バ”, “バ”)
sText = sText.Replace(“ビ”, “ビ”)
sText = sText.Replace(“ブ”, “ブ”)
sText = sText.Replace(“ベ”, “ベ”)
sText = sText.Replace(“ボ”, “ボ”)
sText = sText.Replace(“パ”, “パ”)
sText = sText.Replace(“ピ”, “ピ”)
sText = sText.Replace(“プ”, “プ”)
sText = sText.Replace(“ペ”, “ペ”)
sText = sText.Replace(“ポ”, “ポ”)
End Sub
Private Sub 記号を全角に変換(ByRef sText As String)
sText = sText.Replace(”!”, ”!”)
‘ダブルクォーテーションはエディタで自動的に半角になってしまうので、
‘以下のように処理する必要がある。
sText = sText.Replace("""", ChrW(&H201D))
sText = sText.Replace(”#”, ”#”)
sText = sText.Replace(”$”, ”$”)
sText = sText.Replace(”%”, ”%”)
sText = sText.Replace(”&”, ”&”)
sText = sText.Replace(”’”, ”'”)
sText = sText.Replace(”(”, ”(”)
sText = sText.Replace(”)”, ”)”)
sText = sText.Replace(”*”, ”*”)
sText = sText.Replace(”+”, ”+”)
sText = sText.Replace(”,”, ”,”)
sText = sText.Replace(”-”, ”-”)
sText = sText.Replace(”.”, ”.”)
sText = sText.Replace(”/”, ”/”)
sText = sText.Replace(”:”, ”:”)
sText = sText.Replace(”;”, ”;”)
sText = sText.Replace(”<”, ”<”)
sText = sText.Replace(”=”, ”=”)
sText = sText.Replace(”>”, ”>”)
sText = sText.Replace(”?”, ”?”)
sText = sText.Replace(”@”, ”@”)
sText = sText.Replace(”[”, ”[”)
sText = sText.Replace(”\”, ”\”)
sText = sText.Replace(”]”, ”]”)
sText = sText.Replace(”^”, ”^”)
sText = sText.Replace(”_”, ”_”)
sText = sText.Replace(”`”, ”`”)
sText = sText.Replace(”{”, ”{”)
sText = sText.Replace(”|”, ”|”)
sText = sText.Replace(”}”, ”}”)
sText = sText.Replace(”~”, ”~”)
sText = sText.Replace(” ”, ” ”)
sText = sText.Replace(”、”, ”、”)
sText = sText.Replace(”。”, ”。”)
sText = sText.Replace(”・”, ”・”)
sText = sText.Replace(”「”, ”「”)
sText = sText.Replace(”」”, ”」”)
End Sub
全角を半角に変換するコード
Private Sub btn半角に変換_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn半角に変換.Click
Dim sText As String
sText = RichTextBox1.Text
数字を半角に変換(sText)
英字を半角に変換(sText)
濁点なしカナを半角に変換(sText)
濁点ありカナを半角に変換(sText)
記号を半角に変換(sText)
RichTextBox2.Text = sText
End Sub
Private Sub 数字を半角に変換(ByRef sText As String)
sText = sText.Replace(“0”, “0”)
sText = sText.Replace(“1”, “1”)
sText = sText.Replace(“2”, “2”)
sText = sText.Replace(“3”, “3”)
sText = sText.Replace(“4”, “4”)
sText = sText.Replace(“5”, “5”)
sText = sText.Replace(“6”, “6”)
sText = sText.Replace(“7”, “7”)
sText = sText.Replace(“8”, “8”)
sText = sText.Replace(“9”, “9”)
End Sub
Private Sub 英字を半角に変換(ByRef sText As String)
sText = sText.Replace(“A”, “A”)
sText = sText.Replace(“B”, “B”)
sText = sText.Replace(“C”, “C”)
sText = sText.Replace(“D”, “D”)
sText = sText.Replace(“E”, “E”)
sText = sText.Replace(“F”, “F”)
sText = sText.Replace(“G”, “G”)
sText = sText.Replace(“H”, “H”)
sText = sText.Replace(“I”, “I”)
sText = sText.Replace(“J”, “J”)
sText = sText.Replace(“K”, “K”)
sText = sText.Replace(“L”, “L”)
sText = sText.Replace(“M”, “M”)
sText = sText.Replace(“N”, “N”)
sText = sText.Replace(“O”, “O”)
sText = sText.Replace(“P”, “P”)
sText = sText.Replace(“Q”, “Q”)
sText = sText.Replace(“R”, “R”)
sText = sText.Replace(“S”, “S”)
sText = sText.Replace(“T”, “T”)
sText = sText.Replace(“U”, “U”)
sText = sText.Replace(“V”, “V”)
sText = sText.Replace(“W”, “W”)
sText = sText.Replace(“X”, “X”)
sText = sText.Replace(“Y”, “Y”)
sText = sText.Replace(“Z”, “Z”)
sText = sText.Replace(“a”, “a”)
sText = sText.Replace(“b”, “b”)
sText = sText.Replace(“c”, “c”)
sText = sText.Replace(“d”, “d”)
sText = sText.Replace(“e”, “e”)
sText = sText.Replace(“f”, “f”)
sText = sText.Replace(“g”, “g”)
sText = sText.Replace(“h”, “h”)
sText = sText.Replace(“i”, “i”)
sText = sText.Replace(“j”, “j”)
sText = sText.Replace(“k”, “k”)
sText = sText.Replace(“l”, “l”)
sText = sText.Replace(“m”, “m”)
sText = sText.Replace(“n”, “n”)
sText = sText.Replace(“o”, “o”)
sText = sText.Replace(“p”, “p”)
sText = sText.Replace(“q”, “q”)
sText = sText.Replace(“r”, “r”)
sText = sText.Replace(“s”, “s”)
sText = sText.Replace(“t”, “t”)
sText = sText.Replace(“u”, “u”)
sText = sText.Replace(“v”, “v”)
sText = sText.Replace(“w”, “w”)
sText = sText.Replace(“x”, “x”)
sText = sText.Replace(“y”, “y”)
sText = sText.Replace(“z”, “z”)
sText = sText.Replace(” ”, "")
End Sub
Private Sub 濁点なしカナを半角に変換(ByRef sText As String)
sText = sText.Replace(“ア”, “ア”)
sText = sText.Replace(“イ”, “イ”)
sText = sText.Replace(“ウ”, “ウ”)
sText = sText.Replace(“エ”, “エ”)
sText = sText.Replace(“オ”, “オ”)
sText = sText.Replace(“カ”, “カ”)
sText = sText.Replace(“キ”, “キ”)
sText = sText.Replace(“ク”, “ク”)
sText = sText.Replace(“ケ”, “ケ”)
sText = sText.Replace(“コ”, “コ”)
sText = sText.Replace(“サ”, “サ”)
sText = sText.Replace(“シ”, “シ”)
sText = sText.Replace(“ス”, “ス”)
sText = sText.Replace(“セ”, “セ”)
sText = sText.Replace(“ソ”, “ソ”)
sText = sText.Replace(“タ”, “タ”)
sText = sText.Replace(“チ”, “チ”)
sText = sText.Replace(“ツ”, “ツ”)
sText = sText.Replace(“テ”, “テ”)
sText = sText.Replace(“ト”, “ト”)
sText = sText.Replace(“ナ”, “ナ”)
sText = sText.Replace(“ニ”, “ニ”)
sText = sText.Replace(“ヌ”, “ヌ”)
sText = sText.Replace(“ネ”, “ネ”)
sText = sText.Replace(“ノ”, “ノ”)
sText = sText.Replace(“ハ”, “ハ”)
sText = sText.Replace(“ヒ”, “ヒ”)
sText = sText.Replace(“フ”, “フ”)
sText = sText.Replace(“ヘ”, “ヘ”)
sText = sText.Replace(“ホ”, “ホ”)
sText = sText.Replace(“マ”, “マ”)
sText = sText.Replace(“ミ”, “ミ”)
sText = sText.Replace(“ム”, “ム”)
sText = sText.Replace(“メ”, “メ”)
sText = sText.Replace(“モ”, “モ”)
sText = sText.Replace(“ヤ”, “ヤ”)
sText = sText.Replace(“ユ”, “ユ”)
sText = sText.Replace(“ヨ”, “ヨ”)
sText = sText.Replace(“ラ”, “ラ”)
sText = sText.Replace(“リ”, “リ”)
sText = sText.Replace(“ル”, “ル”)
sText = sText.Replace(“レ”, “レ”)
sText = sText.Replace(“ロ”, “ロ”)
sText = sText.Replace(“ワ”, “ワ”)
sText = sText.Replace(“ヲ”, “ヲ”)
sText = sText.Replace(“ン”, “ン”)
sText = sText.Replace(“ァ”, “ァ”)
sText = sText.Replace(“ィ”, “ィ”)
sText = sText.Replace(“ゥ”, “ゥ”)
sText = sText.Replace(“ェ”, “ェ”)
sText = sText.Replace(“ォ”, “ォ”)
sText = sText.Replace(“ャ”, “ャ”)
sText = sText.Replace(“ュ”, “ュ”)
sText = sText.Replace(“ョ”, “ョ”)
sText = sText.Replace(“ッ”, “ッ”)
sText = sText.Replace(“ー”, “ー”)
End Sub
Private Sub 濁点ありカナを半角に変換(ByRef sText As String)
sText = sText.Replace(“ヴ”, “ヴ”)
sText = sText.Replace(“ガ”, “ガ”)
sText = sText.Replace(“ギ”, “ギ”)
sText = sText.Replace(“グ”, “グ”)
sText = sText.Replace(“ゲ”, “ゲ”)
sText = sText.Replace(“ゴ”, “ゴ”)
sText = sText.Replace(“ザ”, “ザ”)
sText = sText.Replace(“ジ”, “ジ”)
sText = sText.Replace(“ズ”, “ズ”)
sText = sText.Replace(“ゼ”, “ゼ”)
sText = sText.Replace(“ゾ”, “ゾ”)
sText = sText.Replace(“ダ”, “ダ”)
sText = sText.Replace(“ヂ”, “ヂ”)
sText = sText.Replace(“ヅ”, “ヅ”)
sText = sText.Replace(“デ”, “デ”)
sText = sText.Replace(“ド”, “ド”)
sText = sText.Replace(“バ”, “バ”)
sText = sText.Replace(“ビ”, “ビ”)
sText = sText.Replace(“ブ”, “ブ”)
sText = sText.Replace(“ベ”, “ベ”)
sText = sText.Replace(“ボ”, “ボ”)
sText = sText.Replace(“パ”, “パ”)
sText = sText.Replace(“ピ”, “ピ”)
sText = sText.Replace(“プ”, “プ”)
sText = sText.Replace(“ペ”, “ペ”)
sText = sText.Replace(“ポ”, “ポ”)
End Sub
Private Sub 記号を半角に変換(ByRef sText As String)
sText = sText.Replace(”!”, ”!”)
‘ダブルクォーテーションはエディタで自動的に半角になってしまうので、
‘以下のように処理する必要がある。
sText = sText.Replace(ChrW(&H201D), """")
sText = sText.Replace(”#”, ”#”)
sText = sText.Replace(”$”, ”$”)
sText = sText.Replace(”%”, ”%”)
sText = sText.Replace(”&”, ”&”)
sText = sText.Replace(”'”, ”’”)
sText = sText.Replace(”(”, ”(”)
sText = sText.Replace(”)”, ”)”)
sText = sText.Replace(”*”, ”*”)
sText = sText.Replace(”+”, ”+”)
sText = sText.Replace(”,”, ”,”)
sText = sText.Replace(”-”, ”-”)
sText = sText.Replace(”.”, ”.”)
sText = sText.Replace(”/”, ”/”)
sText = sText.Replace(”:”, ”:”)
sText = sText.Replace(”;”, ”;”)
sText = sText.Replace(”<”, ”<”)
sText = sText.Replace(”=”, ”=”)
sText = sText.Replace(”>”, ”>”)
sText = sText.Replace(”?”, ”?”)
sText = sText.Replace(”@”, ”@”)
sText = sText.Replace(”[”, ”[”)
sText = sText.Replace(”\”, ”\”)
sText = sText.Replace(”]”, ”]”)
sText = sText.Replace(”^”, ”^”)
sText = sText.Replace(”_”, ”_”)
sText = sText.Replace(”`”, ”`”)
sText = sText.Replace(”{”, ”{”)
sText = sText.Replace(”|”, ”|”)
sText = sText.Replace(”}”, ”}”)
sText = sText.Replace(”~”, ”~”)
sText = sText.Replace(” ”, ” ”)
sText = sText.Replace(”、”, ”、”)
sText = sText.Replace(”。”, ”。”)
sText = sText.Replace(”・”, ”・”)
sText = sText.Replace(”「”, ”「”)
sText = sText.Replace(”」”, ”」”)
End Sub