[三流君 ] −−>
[VBAで楽しく ] −−>
[バックナンバー一覧 ]
StrConv関数のvbNarrow変換に似た処理、全角ABCを半角ABCへ変換する
発行内容
StrConv関数のvbNarrow変換に似た全角ABCを半角ABCへ変換する
どうも、三流プログラマーのKen3です。
今回は、
StrConv関数のvbNarrow変換に似た処理を作ってみます
/*
* 1. 今回のキッカケ
*/
http://h17-may.sazae.jp/Buy-Rakuten/Day09.html
で、書籍の売れ筋ランキングを紹介してます。
※儲かる、儲からないは今回は置いといて(でも自慢するくらい売りたいなぁ〜)
Windows Server 2003 Network
とか、
タイトルが全角の英数字になってます。
^^^^^^^^^^^^^^^^^^^^
これを半角の
Windows Server 2003 Network
にしたいです。
/*
* 2.関数の仕様
*/
文字列を渡したら、半角にした文字列を返してくれる、
そんな関数を作成して下さい。
アナタならどんな依頼をしますか?
値を返すんだから、Function 関数にして、
Function 全角ABCtoABC(strMOTO As String) As String
Dim strRET As String
'変換する
'ここの処理をヨロシクデス、
'変換結果を返す
全角ABCtoABC = strRET 'リターン値の代入(変換結果の代入)
End Function
と入出力を書いて、中身の処理をお願いするかな。
/*
* 3.標準関数のStrConv関数を使えよボケ
*/
お願いされたほうは(仕様を渡されたプログラマーは)、
仕様にしたがって処理を作成します。
思考の流れとしては、
文字列の変換で有名なのは、
StrConv関数なので、こいつを使ってみますか。
おっ、vbNarrowってパラメータが使えそうですね。
StrConv 関数の定数
vbNarrow 文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。
国別情報の設定が中国、韓国、および日本の場合に適用されます。
これなら、関数自分で作らないでもいいじゃん。
標準関数のStrConv関数使えよボケって感じだよね。
ちっ、あの先輩とはあまり話したくないからメールでも送るかな。
※派遣先の企業によってはメッセンジャーでやってたり、
メッセンジャー系は禁止になってたり、会社の方針ってイロイロだけど。
オイオイ違うだろ、口で報告しろって!!!(笑)仲良く仲良く・・・
----
先ほどの文字列変換関数の件ですが、
VBAの標準関数でStrConv関数があり、
StrConv("文字列", vbNarrow)
で変換することができます。
Sub test()
Dim strWORK As String
strWORK = "Windows Server 2003 Network"
MsgBox StrConv(strWORK, vbNarrow)
End Sub
----
よし、これでOK。
タバコ休憩しながら携帯のメールでもチェックするかな。今日の遊びの予定は・・・
実行結果↓
/*
* 4.全角のカタカナは変換したくないんですが・・・・
*/
今16時かぁ、定時までの1時間はWebでも見て遊んでいるかな。
クソ三流プログラマーのページでも見て時間つぶすかな。
http://www.ken3.org/
↑AB型の変わり者 三流プログラマー Ken3のHP
なんて考えながら席に戻ると先輩からの新着メールが、
----
To:プログラマー君
From:説明ベタSE
StrConv関数で変換するとカタカナまで半角となり、
html上で使用するのでカタカナを抜いて半角としてほしい
Windows デバイスドライバ入門
をテストで変換してみました。
Sub test()
Dim strWORK As String
strWORK = "Windows デバイスドライバ入門 "
MsgBox StrConv(strWORK, vbNarrow)
End Sub
以上、対応よろしく。
----
実行結果↓
↑デバイスドライバが半角カタカナとなってしまった。
/*
* 5.だったら初めから言えよ オレ様は悪くない
*/
はぁ〜、なんだこのメールは・・・理解に苦しむ。
だったら初めから言えよ、変な例題出してんじゃねぇよ。
Windows デバイスドライバ入門
を
Windows デバイスドライバ入門
に
変換したいと初めから言えよ。
仕様の出し方、依頼の仕方が悪いんだよ。だからオレ様は悪くない。
ちっ、しかたねぇ、プランを変更するか。
1文字単位で回して、ASC関数でコードの比較をして、変換してやるか。
ABCABCのコードをチェック
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=%82%60%82a%82bABC
1文字目は[A] をAscで変換すると-32160 さらにHexで16進数にすると8260
2文字目は[B] をAscで変換すると-32159 さらにHexで16進数にすると8261
3文字目は[C] をAscで変換すると-32158 さらにHexで16進数にすると8262
4文字目は[A] をAscで変換すると65 さらにHexで16進数にすると41
5文字目は[B] をAscで変換すると66 さらにHexで16進数にすると42
6文字目は[C] をAscで変換すると67 さらにHexで16進数にすると43
abcabcのコードをチェック
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=%82%81%82%82%82%83abc
1文字目は[a] をAscで変換すると-32127 さらにHexで16進数にすると8281
2文字目は[b] をAscで変換すると-32126 さらにHexで16進数にすると8282
3文字目は[c] をAscで変換すると-32125 さらにHexで16進数にすると8283
4文字目は[a] をAscで変換すると97 さらにHexで16進数にすると61
5文字目は[b] をAscで変換すると98 さらにHexで16進数にすると62
6文字目は[c] をAscで変換すると99 さらにHexで16進数にすると63
012012のコードをチェック
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=%82O%82P%82Q012
1文字目は[0] をAscで変換すると-32177 さらにHexで16進数にすると824F
2文字目は[1] をAscで変換すると-32176 さらにHexで16進数にすると8250
3文字目は[2] をAscで変換すると-32175 さらにHexで16進数にすると8251
4文字目は[0] をAscで変換すると48 さらにHexで16進数にすると30
5文字目は[1] をAscで変換すると49 さらにHexで16進数にすると31
6文字目は[2] をAscで変換すると50 さらにHexで16進数にすると32
こんな感じで、Aの次はB,0の次は1と文字コードが計算で求められるので、
全角のA〜Z,a〜z,0〜9の時だけ半角にしますか。
Function 全角ABCto半角ABC(strMOTO As String) As String
Dim strRET As String
Dim strCHK As String
Dim n As Integer
Dim lngCODE As Long
strRET = "" 'リターン値の初期化
'文字数分コードを調べて変換して、strRETに+する
For n = 1 To Len(strMOTO)
strCHK = Mid(strMOTO, n, 1) 'n番目の文字を取り出す
Select Case Asc(strCHK)
Case Asc("0") To Asc("9") '全角0〜9
strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
Case Asc("a") To Asc("z") '全角a〜z
strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
Case Asc("A") To Asc("Z") '全角A〜Z
strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
Case Else 'その他
strRET = strRET & strCHK '上記以外はそのまま+する
End Select
Next n
'変換結果を返す
全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入)
End Function
Sub test()
Dim strWORK As String
strWORK = "Windows 2003 デバイスドライバ入門 "
MsgBox 全角ABCto半角ABC(strWORK)
End Sub
こんな感じで、
Windows 2003 デバイスドライバ入門
を
Windows 2003 デバイスドライバ入門
に変換できたよ、文句無いだろこれで。
プログラムのポイント? 特に無いな・・・あまり考えないでやっつけ仕事です。
Select Case 文字コード
Case Asc("0") To Asc("9") '文字コードが全角0〜9
と判断して、strRET = strRET & StrConv(strCHK, vbNarrow)としただけです。
/*
* 6.ドットやカッコ・・・スラッシュ・ハイフンも・・・
*/
ここまで読むと読者の人はたぶん、
次ぎの展開が読めてしまうと思いますがしつこく行きます
Excel VBA(ブイビーエー) 2000/2002/2003対応
.NETエンタープライズWebアプリケーション開発技術大全(vol.2)
これも変換したいんだけど・・・
今日は時間切れ、これから女の子と作者(Ken3)は飲み会
※ウソです、意外と長編になったので、続きは次回、近日中に・・・
/*
* 7.終わりの挨拶
*/
今回は、
全角ABCを半角ABCへ変換する
そんな話でした。
次回に含みを持たせつつ、今回も逃げるように失礼します。
AB型の変わり者、三流プログラマーのKen3でした。
ページフッター
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
種類別のリンク や 広告など
Blogとリンク :[三流君の作業日記 ]/
[VBAやASPのサンプルコード ]/
広告-[通販人気商品の足跡 ]
[三流君(TOP ken3.org へ戻る) ]
/ [VBA系TOPへ ]
/ [VBA系バックナンバー目次へ移動 ]