[三流君] −−> [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でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]