<StrConv関数で半角を全角文字にしてみた>
こんにちは、三流プログラマーKen3です。 今回は、 StrConv関数で半角を全角文字にしてみた です。 気楽に読んでください。 /* * 1.文字列を囲う処理で、問題あり */ 下記のような ┌──────────┐ │文字列を囲ってみたい│ └──────────┘ なんて、文字列を作る処理の説明を /vba/backno/vba034.html の、[No.34 ┌ ─ ┐│└ ┘を使って、文字列を囲ってみたい]でやりました。 覚えてますか? 忘れていてもOKです。 In message "[VBAで楽しく No.034] - ┌ ─ ┐│└ ┘を使って、文字列を囲ってみたい", mag2 ID 0000099159さん wrote... >次回は今回作ったフォームの問題点とかを少しやります。 >・半角文字ABCを入れると一発で問題点がわかったりしてね -- と、自ら問題点に気が付いていました。 半角のABCを入れると ┌───────────┐ │半角のABCを入れると│ └───────────┘ と変換されてしまいます。 フォントがプロポーショナルとかの目の錯覚では無く、 あきらかに外枠のほうが長いです。 なんでだろ? /* * 2.処理を見直し原因の追及 */ ボタンを押した時の変換処理を下記のように作ってます。 Private Sub btnCONV_Click() Dim i As Integer Dim strLINE1 As String '1行目 Dim strLINE2 As String '2行目 Dim strLINE3 As String '3行目 '1行目を作る strLINE1 = "┌" '初めに左上端を代入 For i = 1 To Len(txtMOTO) '文字数分─を追加 strLINE1 = strLINE1 & "─" Next i strLINE1 = strLINE1 & "┐" '右上端を付ける '2行目を作る strLINE2 = "│" & txtMOTO & "│" '両端に│を付ける '3行目を作る strLINE3 = "└" '初めに左下端を代入 For i = 1 To Len(txtMOTO) '文字数分─を追加 strLINE3 = strLINE3 & "─" Next i strLINE3 = strLINE3 & "┘" '右下端を付ける '結果の代入 各ラインをvbCrLFでつなげただけ txtSAKI = strLINE1 & vbCrLf & strLINE2 & vbCrLf & strLINE3 End Sub う〜ん、自分が正しいと思って作った処理だから、 なかなか、原因のヶ所を見つけにくい。 そんな時、まずは、 正しい時と不具合が発生する条件をまとめてみる。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 正常な時:「VBAで楽しく」と全て全角文字 以上な時: 「VBAで楽しく」と半角のアルファベットが入っている時 あっ、よく見たら、 For i = 1 To Len(txtMOTO) '文字数分─を追加 strLINE3 = strLINE3 & "─" Next i の処理は、全角の─で横棒を作っているからだね。 Len(txtMOTO)で返ってきた文字数だと、マズイよね。 それにVBAと半角3文字みたいな奇数の時は、半角1スペース+して、 全角の横棒とサイズが合うように調整しないとね。 /* * 3.原因がわかったので、修正する */ なんだぁ、簡単ジャン。 半角文字がまずいんだろ、 だったら全角にしろよ全て。 えっと、客が言ってきた要望は何だったっけ。 In message "[VBAで楽しく No.034] - ┌ ─ ┐│└ ┘を使って、文字列を囲ってみたい", mag2 ID 0000099159さん wrote... >/* > * 1. やりたいこと >*/ > >VBAで楽しく >と >文字列を受け取ったら、 >┌───────┐ >│VBAで楽しく│ >└───────┘ >と、ワクで囲まれた文字列を作ってみたいです。 --- ほら、半角文字のことなんて書いてないよ。 なんか言ってきたら、 インターネット上で半角カナは使わないのが常識で、 それを防止するためにも、 半角文字は全角に直してワクを付けました。 って言えよ。 えっ、全てこちらの都合じゃないですか、 確認しないで勝手に仕様です、、、にしてしまって。 半角カナは私も賛成だけど、面倒だからって、 VBAの半角英数を全角に変換してしまうのはねぇ。 いいよ、時間かかるから、仕様にしといて。 お客がどうしても半角奇数文字を変換したかったら、 追加で工数とお金もらうから。 そんなんで、いいのかよ、、、と純粋なプログラマーの心が腐り始める瞬間でした。 なんて、くだらない話は、置いといて、 腐った先輩が言ってる、半角文字を全角にしてかわすには、 有名なStrConv関数を使います。 使い方は簡単で、 StrConv(文字列, 変換モードの定数) で、 StrConv("abcd", vbWide) とやると、 abcd に変換されます。 定数 内容 vbUpperCase 文字列を大文字に変換します。 vbLowerCase 文字列を小文字に変換します。 vbProperCase 文字列の各単語の先頭の文字を大文字に変換します。 vbWide 文字列内の半角文字 (1 バイト) を全角文字 (2 バイト) に変換します。 vbNarrow 文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。 vbKatakana 文字列内のひらがなをカタカナに変換します。 vbHiragana 文字列内のカタカナをひらがなに変換します。 vbUnicode システムの既定のコード ページを使って文字列を Unicode に変換します。 vbFromUnicode 文字列を Unicode からシステムの既定のコード ページに変換します。 といろいろ変換できます。 証拠隠滅も兼ねて、 txtMOTO = StrConv(txtMOTO, vbWide) '半角を全角に変換、データをキレイにする の1文を変換処理に入れます。 Private Sub btnCONV_Click() Dim i As Integer Dim strLINE1 As String '1行目 Dim strLINE2 As String '2行目 Dim strLINE3 As String '3行目 txtMOTO = StrConv(txtMOTO, vbWide) '半角を全角に変換、データをキレイにする '1行目を作る strLINE1 = "┌" '初めに左上端を代入 For i = 1 To Len(txtMOTO) '文字数分─を追加 strLINE1 = strLINE1 & "─" Next i strLINE1 = strLINE1 & "┐" '右上端を付ける '2行目を作る strLINE2 = "│" & txtMOTO & "│" '両端に│を付ける '3行目を作る strLINE3 = "└" '初めに左下端を代入 For i = 1 To Len(txtMOTO) '文字数分─を追加 strLINE3 = strLINE3 & "─" Next i strLINE3 = strLINE3 & "┘" '右下端を付ける '結果の代入 各ラインをvbCrLFでつなげただけ txtSAKI = strLINE1 & vbCrLf & strLINE2 & vbCrLf & strLINE3 End Sub 修正方法に納得いかないけど、こんな感じで不具合は無くなりました。 /* * 4.おわりの挨拶 */ 今回は、 ・不具合が発生したら、正常パターンと異常パターンを比べましょう ・不具合の内容を理解、修正方法の検討 ・StrConv関数を使って、半角文字を全角に変換 でした。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba039.lzh に test039-book.xlsが保存されています。 *test034持ってる人は、1行追加しただけなので、 練習兼ねて、自分で追加してみてください。 今回の小手先修正、仕様ですで逃げる方法、ふざけるな、、 と思ったアナタ、 正常なプログラマーさんですよキット。 仕様と言って逃げるのも1つの手だと思ったアナタ、 工数にキビシイ管理者になれるOr商売人やなぁ(ほどほどにね(笑)) どっちもケースによっては正解だけどね。 仕様のツメが甘いと後でもめるんだよね。 私はこんな感じをイメージしてない とか そんなの常識、アンタが非常識とかね。 はい、ここまで。 おっと、ここはVBA系のメルマガだった。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *そんなネタが多い愚痴系のメルマガは http://www.ken3.org/guchi/ で書いてるので、よかったら遊びに来てください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 PS.次回は純粋プログラマー半角文字と対決するのお話かなぁ(笑) *違うネタやるかもしれないけど、次回のメルマガもヨロシクです。
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]