Last updated on

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