VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して
セットする方法を教えて下さい。
あるファイルの項目として、「住所」という項目があるとします。
このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、
セットします。
この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、
”半角/全角文字混在”でデータが格納されています。
画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。
この様な条件で、単純に取得したデータを2分割すると、
取得したデータが、全て半角か全角なら問題はないのですが、
例えば、1文字目が半角で、以降が全て全角文字だった場合に、
最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。
また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、
うまく利用できていないようです。(コード体系の違いでしょうか?)
どなたかご教授下さい。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1で回答した者です。
#1で示したソースプログラムで理解されると思いますが
念のため補足を致します。
ソースプログラムを実行するとシフトJISコード換算で
住所の21バイト目が全角の2バイト目にあたる場合、
address1には19バイト分の文字列、address2には
20バイト目(全角の1バイト目)以降の文字列が格納されます。
例)
"123456789全角456789全角・・・" → address1="123456789全角456789"
├─ LenB(work)=21 ─┤ address2="全角・・・"
1つめに頂いたご回答とあわせて、ありがとうございました。
サンプルコードまでご提供頂き大変助かりました。
今後もなにかあればまたよろしくお願い致します。
No.2
- 回答日時:
シフトJISに変換して分割した後に、分割した部分が漢字の第一バイトと第二バイトの間かどうかをチェックしておいた方が良いでしょうね。
単純にバイト数で切ると、文字化けになる可能性があります。
No.1
- 回答日時:
Mid関数やLen関数は文字単位で処理されますので
全角も半角もそれぞれ1文字として扱われます。
また、MidB関数やLenB関数はバイト単位で処理されますが
VB内部ではUnicode仕様になっていて全角も半角もそれぞれ
2バイトとして扱われます。
ですので、次のようにStrConv関数を使って文字列をUnicodeでなく
システムの既定のコード体系(通常はSHIFT-JIS)に変換して処理すれば
うまく表示することが出来ると思います。
Dim address1 As String, address2 As String
Dim work As String
Dim ii As Integer
For ii = 1 To Len(address) '住所の文字数分繰り返す
work = Left(address, ii) '1文字,2文字・・・と順番に住所を切り出す
work = StrConv(work, vbFromUnicode) 'Unicodeからシステムの既定のコードに変換
If (LenB(work) > 20) Then '20バイトを超えたらEXIT
Exit For 'EXITするとaddress2の先頭文字位置がiiに格納される
End If
Next ii
address1 = Left(address,ii-1) '住所1
address2 = Mid(address,ii) '住所2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) エクセルでのデータの統一に関して リストを作成する際、元データをコピペでリストに転記しており、元デー 2 2022/08/31 15:33
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
全角入力
-
英数字のみ全角から半角に変換
-
word差し込み印刷 半角カタカ...
-
VBA 文字に半角が含まれて...
-
全角英数字の必要性が理解できない
-
char型全角数字から、int型半角...
-
空白を全て削除したい
-
エクセルにMicrosoft Barcode C...
-
小説の点々は……と繋がらなくて...
-
全角/半角キーをSendkeys関数で...
-
ACCESS VBA でのバイナリデー...
-
CString Format にて全角空白文...
-
全角数字を半角数字にする方法
-
プログラミングでは、半角括弧...
-
よくアカウント等に使われる 半...
-
掲示板で全角の英字はなぜいけ...
-
VB.net、テキストボックス入力...
-
VBで「全角」文字を「半角」に...
-
[Excel VBA] ODBCによる外部デ...
-
POM
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
エクセルにMicrosoft Barcode C...
-
プログラミングでは、半角括弧...
-
IEからEdgeへの移行に伴うIMEの...
-
全角英数字の必要性が理解できない
-
VBA 文字に半角が含まれて...
-
Accessのテキストボックスの入...
-
word差し込み印刷 半角カタカ...
-
COBOL・全角判定
-
全角入力
-
VB.net、テキストボックス入力...
-
COBOLでの全角文字の判定をした...
-
CString Format にて全角空白文...
-
メモ帳の段落の揃え方
-
ダブルコーテーションの置換
-
正規表現で、全角文字を半角文...
-
VBで、String型のデータが、...
-
よくアカウント等に使われる 半...
-
エクセルでの”々”の扱い
おすすめ情報