どうも、三流プログラマーのKen3です。 今回は、 プログラムの修正・追加のいろいろな方法? として、 縦に羅列と配列でループ を比べて少し書いてみます。 自分でも読み返すとあまり参考にならないのですが、 せっかく書いたので発行しちゃいます。 読者の声:あっ、そのネタ知ってるよ。内容は・・・だろ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ またまたぁ・・・先に心の中でネタ先読みしないでよ。 私が最近、金曜日の夜に見ているドラマ タイガー アンド ドラゴンの客じゃないんだからさ -- 余談 -- 落語を元ネタにして、よくできたドラマだと思う。 話の作り方とかテンポの切り替え方、落語のネタと現在の話の混ぜ方が絶妙かなぁ。 脚本家がすごいんだろうなぁ。 私のメルマガでもテンポの切り替え方とか取り入れたいけど・・・ と言いつつ、チョイ役の売れない洋服屋の女性店員がタイプで見てたり(笑)/* * 1. 今回のキッカケ */
前回のメルマガ No.173 プログラムの修正・追加のいろいろな方法? http://www.ken3.org/vba/backno/vba173.html で、 下記の全角英数字を半角にする下記のサブルーチンを作成した。
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 Asc("(") '( カッコ strRET = strRET & "(" '半角の(を+する Case Asc(")") ') カッコ strRET = strRET & ")" '半角の)を+する Case Asc("/") '/ スラッシュ strRET = strRET & "/" '半角の/を+する Case Asc(".") '.ドット strRET = strRET & "." '半角の.を+する Case Else 'その他 strRET = strRET & strCHK '上記以外はそのまま+する End Select Next n '変換結果を返す 全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入) End Function |
Sub test() Dim strWORK As String Debug.Print "テスト結果:" & Now '2005-05-18 テスト strWORK = "Excel VBA(ブイビーエー) 2000/2002対応" Debug.Print 全角ABCto半角ABC(strWORK) strWORK = ".NETエンタープライズWebアプリケーション開発技術大全" Debug.Print 全角ABCto半角ABC(strWORK) '2005-05-25 テスト strWORK = "Visual C#.NETプログラミング入門" Debug.Print 全角ABCto半角ABC(strWORK) strWORK = "Microsoft Visual C++ .NETランゲージリファレンス" Debug.Print 全角ABCto半角ABC(strWORK) End Sub |
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 Asc("(") '( カッコ strRET = strRET & "(" '半角の(を+する Case Asc(")") ') カッコ strRET = strRET & ")" '半角の)を+する Case Asc("/") '/ スラッシュ strRET = strRET & "/" '半角の/を+する Case Asc(".") '.ドット strRET = strRET & "." '半角の.を+する '2005-05-25 条件追加 Case Asc("#") '#シャープ strRET = strRET & "#" '半角の#を+する Case Asc("+") '+プラス strRET = strRET & "+" Case Asc(" ") '□(全角スペース) strRET = strRET & " " '半角のスペースを+する Case Else 'その他 strRET = strRET & strCHK '上記以外はそのまま+する End Select Next n '変換結果を返す 全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入) End Function |
Function 全角ABCto半角ABC(strMOTO As String) As String Dim strRET As String Dim strCHK As String Dim n As Integer Dim lngCODE As Long '2005-05-25 追加 Dim str全角(8) As String Dim str半角(8) As String Dim nLOOPCNT As Integer 'ループのカウンタ '配列に文字をセットする str全角(0) = " ": str半角(0) = " " '□(全角スペース) str全角(1) = "(": str半角(1) = "(" '( カッコ str全角(2) = ")": str半角(2) = ")" ') カッコ str全角(3) = "/": str半角(3) = "/" '/ スラッシュ str全角(4) = ".": str半角(4) = "." '.ドット str全角(5) = "#": str半角(5) = "#" '#シャープ str全角(6) = "+": str半角(6) = "+" '+プラス str全角(7) = "−": str半角(7) = "-" '−マイナス、ハイフン 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 'その他 '配列の文字と一致するかチェックする 2005-05-25修正 For nLOOPCNT = 0 To 7 If strCHK = str全角(nLOOPCNT) Then 'チェックする全角文字と一致するか? strCHK = str半角(nLOOPCNT) '対応する半角文字をセットする Exit For 'ループを強制的に抜ける End If Next nLOOPCNT strRET = strRET & strCHK 'strCHKを+する End Select Next n '変換結果を返す 全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入) End Function |
Function 全角ABCto半角ABC(strMOTO As String) As String Dim strRET As String Dim strCHK As String Dim n As Integer Dim lngCODE As Long '2005-05-25 追加 Dim str全角 As Variant '*1 変数をVariantで宣言 Dim str半角 As Variant Dim nLOOPCNT As Integer 'ループのカウンタ 'Array関数で配列を初期化する str全角 = Array(" ", "(", ")", "/", ".", "#", "+", "−") str半角 = Array(" ", "(", ")", "/", ".", "#", "+", "-") 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 'その他 '配列の文字と一致するかチェックする 2005-05-25修正 For nLOOPCNT = 0 To 7 If strCHK = str全角(nLOOPCNT) Then 'チェックする全角文字と一致するか? strCHK = str半角(nLOOPCNT) '対応する半角文字をセットする Exit For 'ループを強制的に抜ける End If Next nLOOPCNT strRET = strRET & strCHK 'strCHKを+する End Select Next n '変換結果を返す 全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入) End Function |
Function 全角ABCto半角ABC(strMOTO As String) As String Dim strRET As String Dim strCHK As String Dim n As Integer Dim lngCODE As Long '2005-05-25 追加 Dim str全角 As String Dim str半角 As String Dim nSERCH As Integer '場所を覚える変数 '全角の文字列と半角の文字列を作成する str全角 = " ()/.#+−*" str半角 = " ()/.#+-*" 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 'その他 '変換候補の変数 str全角の中に存在するか?チェックする 2005-05-25修正 nSERCH = InStr(str全角, strCHK) 'InStr関数でstr全角からstrCHKを探す If nSERCH > 0 Then '見つかった、場所が0以上か? strCHK = Mid(str半角, nSERCH, 1) '半角のn番目を代入する(に置き換える) End If strRET = strRET & strCHK 'strCHKを+する End Select Next n '変換結果を返す 全角ABCto半角ABC = strRET 'リターン値の代入(変換結果の代入) End Function |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]