VB.netのStrConv関数は、一部の環境で正常に動作しない場合があります。
例えば、Windows7で互換モードでアプリケーションを動作させた場合に不具合が生じます。
半角、全角の文字を一文字ずつ変換するコードを書きました。
最初は、コツコツ書いていたのですが、
途中から面倒になって、StrConv関数を使って、
ソースコードをプログラムで書きました。
一応、その時に使ったコードも載せておきます。
RichTextBox1.Textに文字一覧を入力しておくと、
全角変換用と、半角変換用のコードを生成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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半角へ |
半角から全角に文字列を変換する際、
濁点ありのカタカナを濁点なしのカタカナより先に変換する必要があります。
そうしないと、例えば、「パイナップル」を変換した場合、
「パイナップル」となってしまいます。
正しくは、「パイナップル」です。
「パイナップル」(半角の「゜」になってしまっている。)
「パイナップル」(正しい。)
半角を全角に変換するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
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 |
全角を半角に変換するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
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 |