VBで全角文字をバイト参照する方法

このQ&Aのポイント
  • VBでテキストから参照した全角文字を一バイトずつのエリアに設定する方法を教えてください。
  • 取得した値をVB(Windows?)が正しく認識できないため、文字化けしてしまいます。
  • どのようにすれば内容を壊さずに全角文字を取得できるでしょうか?
回答を見る
  • ベストアンサー

VBで全角文字をバイト参照したい

こんばんは またまた壁にぶちあたっています! VBでテキストから参照した全角文字をMidB関数等で部分参照し、 それぞれ一バイトずつのエリアに設定したいのですが、取得した値を VB(Windows?)が認識出来ない為か「?」となります。 内容を壊さずに取得する方法があれば教えて頂きたいのですがm(__)m サンプル Dim strBuff1 As String * 1 Dim strBuff2 As String * 1 txtInput = "西" strBuff1 = LeftB(StrConv(txtInput,FromUnicode),1) strBuff2 = RightB(StrConv(txtInput,FromUnicode),1) 以上のコーディングで「strBuff1」、「strBuff2」にそれぞれ「?」が 設定されます

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

なるほど・・・ 以前に何度かここの掲示板で似たようなものを載せてるので、それを一行にまとめた関数を書いておきます。 Sub Main()   MsgBox fixStr("12345678901234567890", 4, 10)   MsgBox fixStr("12345ああ6789ああ01ああ234567890", 4, 10)   MsgBox fixStr("うううううう12345678901234567890", 4, 10) End Sub '引数1:文字列 '引数2:開始バイト目 '引数3:バイト長 Private Function fixStr(inStrings As String, inByteStart As Long, inByteLen As Long) As String   fixStr = StrConv(MidB(StrConv(inStrings, vbFromUnicode), inByteStart, inByteLen), vbUnicode) End Function

rukaandkaito
質問者

お礼

どれどれ、早速試してみよう・・・ ・・・お~本当だ! 上手く行きました。 そうですね、Unicode変換して元に戻してあげないと行けないんですね うっかりしてました^^ とても助かりました、有難う御座います!

その他の回答 (2)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

byte配列に変換した方がやりやすい Dim b() As Byte b = StrConv(txtInput, vbFromUnicode)

rukaandkaito
質問者

お礼

それは質問内容にも書いてあるとおりですよね・・・ し、しまったスペルを間違えてる ×:FromUnicode ○:vbFromUnicode 失礼しました^^

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

何がしたいのかが良くわかりません。 2バイト文字の情報を1バイトに分割してどうするのですか? 文字情報が壊れるのは当然ですよ。 分解して得た情報 [strBuff1] と [strBuff2] から「西」という文字を作成したいのですか? どのような結果を求めているのかがわかりません。

rukaandkaito
質問者

補足

説明不足でしたか? 結論から言うと半角全角混在のエリアを10バイトずつで切った情報にしたい と言う事なのですが、PCと汎用機とのデータ移動のためのツールを作成しています

関連するQ&A

  • VB2008で全角半角の判定

    VB2008で全角半角の判定 VB6 では下記のようにして判定していましたが、VB2008では どのようにすればよいのかお教えください。  dim moji as string dim zhN as integer  zhN = LenB(StrConv(moji, vbFromUnicode)) mojiには1文字格納されており、  半角なら zhN = 1 全角なら zhN = 2 となる。  これをVB2008で実現する方法がわかりません。  よろしくお願いします。

  • vb2008 MIDB関数

    VB2008を勉強しながら、プログラム開発を行っています。 VB6の時にはMIDB関数が存在したのですが、VB2008では、MIDB関数が無くなっていました。 プログラム作成にあたり、文字列のバイト操作が必要になり、Leftb、RitghB、MIDBを 作成しているのですが、全く分からない状態です。 SHIFT-JISコードに変換してバイト配列よりすればいいと他のサイトに載っていたので それを参考にしていたのですが、全角文字が存在した時に、文字化けをおこしてしまい 正常な文字で表示されないようになってしまいました。 全角文字の半分の1バイトの場所での指定だったので文字化けを起こしている事は 分かったのですが、これを空白にする事は可能なのでしょうか? また、バイト操作を行うサンプル等がありましたら、教えて頂けないでしょうか? 以上

  • VB2005のRegexで全角文字のマッチ

    VB2005のRegexで、インターネットのソースコードを取得し”次の10件"というキーワードの位置を取得しようとしていますが、どうもソースコードの時点で、全角文字(2バイト文字)が認識されていないようです。どうすれば、マッチできるでしょうか?教えてください。 仮に、下記のルーチンに、Debug.Print(inputString)を入れて表示させてみると、全角の表示がされていません。 よろしくお願いいたします。 Sub DumpHrefs(ByVal inputString As String) Dim r1 As Regex Dim m1 As Match r1 = New Regex("次の10件≫") m1 = r1.Match(inputString) While m1.Success Debug.WriteLine("次の10件" & " at " & m1.Groups(1).Index.ToString())  m1 = m1.NextMatch()  End While End Sub

  • ExcelVBA 全角と半角文字

    恐れ入ります。 ExcelVBAの質問ですが、 ********************************************************** Function AscEx2(strOrg As String) As String Dim strRet As String Dim intLoop As Integer Dim strChar As String strRet = "" For intLoop = 1 To Len(strOrg) strChar = Mid(strOrg, intLoop, 1) If (strChar >= "A" And strChar <= "Z") _ Or (strChar >= "a" And strChar <= "z") Then strRet = strRet & StrConv(strChar, vbNarrow) Else strRet = strRet & strChar End If Next intLoop AscEx2 = strRet End Function ********************************************************** 上記のコードで、カタカナを全角、アルファベットを半角にできたのですが、 下記のこの部分の意味がいまひとつ理解できません。 「strRet = "" strRet = strRet & StrConv(strChar, vbNarrow)」 どういった解釈になるのか、お分かりになられる方は、 ご教示を宜しくお願い致します。

  • Excel : 正規表現を利用して2文字の全角数字を半角数字に変換するには?

    アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。 2文字の全角数字を半角数字に変換します。 かつ、3文字以上の全角数字は変換しません。 下記のようにコードを書いたのですが、希望通りに動作してくれません。 どこが悪いのでしょうか? ご指摘いただければ幸いです。 よろしくお願いいたします。 ※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に  チェックは入れています。 Sub sample()   Dim str   Dim strPattern As String   Dim strReplacement As String      str = ActiveCell.Value   str = myRegExp(str, "([^0123456789])([0123456789]{2})([^0123456789])", "$1$2$3")   ActiveCell.Value = str End Sub Private Function myRegExp(str, strPattern, strReplacement)   Dim objRegExp As RegExp   Dim test As String   Set objRegExp = New RegExp   With objRegExp     .Pattern = strPattern     .IgnoreCase = False     .Global = True     myRegExp = .Replace(str, "$1" & StrConv("$2", vbNarrow) & "$3")   End With   Set objRegExp = Nothing End Function

  • 左から3文字だけ全角にし残りの6文字は半角のままにしたい。

    全部半角の"123456789"と言う文字列があります。 これを"123456789"にしたいのですがうまくいきません。 Sub 左から3文字目までを全角にする() Dim 文字列 As String 文字列 = "123456789" 文字列 = StrConv(Left(文字列, 3), vbWide) End Sub これを実行すると 文字列は"123"になってしまいます。 "123456789"にするにはどうすればいいのでしょうか? よろしくお願い致します。

  • BASE64による全角文字のエンコード・デコードのコーディング(VB)

    こんにちは、初めて質問します。 私は現在BASE64(VB)を制作中の者です。半角英数のエンコード・デコードのコーディングは完成したのですが、全角文字となると手も足も出ない状態です。 そこで、これのついて御存知の方、全角文字のエンコード・デコードのコーディング方法を教えて下さい。 サンプルコードも見せていただければ幸いです。 宜しくお願いします。

  • VBAを使って制作しているのですが

    VBAを使って制作しているのですが、テキストボックス内でのカーソル位置の取得は出来ないのでしょうか? テキストボックスを MultiLine = true にして使用しているのですが、 textbox_Change にLeftBを指定してn文字以上は書き込めないようにしています。 Dim DATE_CONV As String Dim DATE_FONT As String DATE_CONV = StrConv(元データ, vbFromUnicode) DATE_CONV = LeftB(DATE_CONV, 制限文字数) DATE_FONT = StrConv(DATE_CONV, vbUnicode) その結果、カーソルがどの位置にあっても、n文字を超えてしまった場合、 カーソルが最後に移動してしまいます。 なにかいい方法がないか教えてくださいお願いします。

  • VB .NetのDLL参照について

    名前付パイプの処理をしているのですが、DLLが参照できません。 Public Class ClsJi01   Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer  Public Sub M_Pipe()   Dim r As Integer   Dim rpipe As Integer   Dim err_code As Integer   r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)  End Sub End Class Point.DLLは以前VB6.0の時に使用していたDLLで自作です。 これで実行すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ます。 どうしたら良いのでしょうか?

  • VBA(Excel2003)で文字列の切り出し

    下のプロシージャーで全角半角混じりの文字列を切り出し、別の文字列で結合しようと思いますがうまくいく場合といかない場合があります。 イミディエイト・ウィンドウ上とCell上で動作が違います。 Cell上でうまく表示させるにはどうしたらいいでしょうか? Sub Test() Dim myString(2) As String Dim i As Integer myString(0) = "airueo" myString(1) = "かきくけこ" myString(2) = "さシすせそ" For i = 0 To 2 Debug.Print MidMbcs(myString(i), 1, 5) & "...テスト" Cells(i + 1, 1).Value = MidMbcs(myString(i), 1, 5) & "...テスト" Next i End Sub Function LenMbcs(ByVal str As String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function Function MidMbcs(ByVal str As String, start, length) MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode) End Function