VB6で文字列操作をスマートに行う方法はあるか?

このQ&Aのポイント
  • VB6で文字列操作を行う際に、センセーショナルな方法はありますか?
  • VB6の文字列操作において、指定のデータから特定の値を抽出する方法について教えてください。
  • VB6での文字列操作において、特定の値を抽出するためのスマートな方法があれば教えてください。
回答を見る
  • ベストアンサー

文字列操作

VB6です。 質問させてください。 ↓例、Buffer変数に取得データが入ります 最終的に下記の3つの値を取得したいです。 Value(1) = "ABC" Value(2) = "DEFGHIJKL" Value(3) = "MN" 少し長いと思います。スマートな方法はございますか? ----- Dim Buffer As String Dim Temp1 As String Dim Temp2 As String Dim Value() As String Buffer = "?ABC-?DEFGHIJKLMN-" '取得データ '前後?-を除きます。 Temp1 = Right(Temp1, Len(Buffer)-1) Temp1 = Left(Temp1, Len(Temp1)-1) 'この時点で、4文字目、5文字目の-?を除きます Temp1 = Left(Temp1, 3) Temp2 = Right(Temp1, 11) '"ABCDEFGHIJKLMN"を取得 Value = Temp1 & Temp2 '"ABC"を取得 Value(1) = Left(Value, 3) '"DEFGHIJKL"を取得 Value(2) = Right(Value(2), Len(Value)-3) Value(2) = Left(Value(2), Len(Value)-2) '"MN"を取得 Value(3) = Right(Value, 2)

noname#187796
noname#187796

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

  • ベストアンサー
  • nak777r
  • ベストアンサー率36% (49/136)
回答No.2

変換のルールがわからないので、なんともいえませんが ヒントとして Split 関数を使用すれば楽です Dim Value() As String Buffer = "?ABC-?DEFGHIJKLMN-" '取得データ なら、 Value = Split(Buffer,"?") とか、 Value = Split(Buffer,"-") とか、 Value = Split(Buffer,"-?") あたりで確認

noname#187796
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.1

文字の長さがわかってるのであれば、MID関数で抜けばいいじゃん。 '前後?-を除きます。  ↓ここで文字の長さ指定してるのに Temp1 = Right(Temp1, Len(Buffer)-1) Temp1 = Left(Temp1, Len(Temp1)-1) 'この時点で、4文字目、5文字目の-?を除きます ↓ここで文字長固定なのはなぜ? Temp1 = Left(Temp1, 3)   <-3文字取り出してTemp1に入れているので Temp2 = Right(Temp1, 11)  <-ここでそのTemp1をつかってTemp2は無理だろ

関連するQ&A

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 文字列の最後が空白なら削除する

    Sub test() Dim mystr As String mystr = "abc " If Right(mystr, 1) = " " Then Debug.Print Left(mystr, Len(mystr) - 1) End If End Sub これで、最後の1文字が空白なら削除できるのですが、 "abc "のように、最後に空白が2つある場合が対応できないのですが そういう場合でも対応できるコードはありますか?

  • 文字列を変数名として扱う方法

    vb6.0 か vb.net で文字列を変数名として扱うにはどうすればいいでしょうか? 例をあげると下記のようなことです。 -------------------- dim abc as string dim x as string abc = "テスト" x = "b" msgbox "a" & x & "c" -------------------- これをそのままvb6.0で実行すると"abc"という文字が表示されますが "abc"ではなく"テスト"と表示させたいのです。 つまり msgbox abc とした場合と同じようにしたいのですが可能でしょうか? ご存知の方教えてください。 よろしくお願いします。

  • 文字列操作

    VB6の質問です。 下記のような桁数不定の取得データがございます。 桁数不定の為、Mid, Left, Right関数が使用できません。 Buffer = "A12345...B678910...C" 区切り文字A、B、Cを除いてデータを取り出したのですが、どのような方法がございますか? Data1 ="12345..." Data2 ="678910..."

  • 文字列を返すVCで作成したDLL関数をVBで呼ぶと...

    VC++で文字列を返すDLL関数を作成しました。 LPCSTR GetVcString(void) これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。 1. Dim Ret As String 2. Ret=GetVcString() 3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている 4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる 2行目と3行目の間に、 Ret=Left(Ret,InStr(Ret,vbNullChar)-1) を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

  • エクセルの文字列・数値【長文です】

    昨日、LEFT関数の使い方を教えていただきましたが、これですとLEFT関数を用いたところが【文字列】として認識されました。【数値】として認識させる方法を教えてください。 初心者で申し訳ございません。 昨日の質問・いただいた回答は以下の通りでした。 ≪質問≫ [123456/あいうえお/abc][234567/かきくけこ/efg]のようなデータがいくつかあって(例えばA列に)、B列に[123456][234567]、C列に[あいうえお][かきくけこ]、D列に[abc][efg]と表記できるような【関数】を教えてください。 ≪いただいた回答≫ A1にデータがあったとして。 B列 =LEFT(A1,SEARCH("/",A1,1)-1) C列 =LEFT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),1)-1) D列 =RIGHT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)))-SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1))))

  • VB2008の文字列の操作について

    プログラムを最近、始めなければならなくなった初心者です。 一行の長い文字列を指定の文字数で分割するプログラムを書かなければならないのですが。どうしても文字数がずれてしまいます。 webを参考に下記のようなプログラムを書いてみました。 Public Class Form1 Public NN As Long = 1 Dim sR As New IO.StreamReader("C:\testtex.DAT",System.Text.Encoding.GetEncoding("shift_jis")) Dim AR As String, AT As String AT = sR.ReadToEnd NN = NN + 指定文字数 AR = Strings.Mid(AT, NN, 指定文字数) TextBox1.Text = AR sR.Close() 文字列は(Shift_jis)型のようです。データの無い部分にはスペースが含まれています。これが原因かは分かりませんが  Left関数や、Mid関数を利用して分割する方法では文字数がずれてしまいます。 Textpad等のテキスト編集アプリを利用して文字数を調べたところ文字数と桁数に違いがあるようです。 文字数と桁数の違いに何かあるような気がするのですが検索してもそれらしきがみつかりません。 LenやLengthで全体の文字数を調べてみたところ全体の文字数もずれているようです。(指定文字数の倍数にならない。TextPadで調べた桁数と1違います。) .DATという拡張子ですが、送られてくるデータがDATという拡張子で送られてくるため原因かもしれないのでそのままにしています。 指定文字数ごとに分割することは可能なのでしょうか。可能であればどのような方法でもいいのでご教授ください。よろしくお願いします。

  • 文字列操作が分かりません

    VB2008で文字列を加えるプログラムを組んでいるのですが、下記のリストのようにダブルクォーテーションで囲まれた文字列が旨く処理出来ません。 ダブルクォーテーションをダブルクォーテーションで括るのはできないのでしょうか。 どなたかご教授下さいませ。 よろしくお願いいたします。 1. Dim data1 As String = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">" //W3Cの//で(式が必要です)エラーがでます。 演算と間違われているのでしょうか。 2. Dim data2 As String = "<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">" "<meta http-equiv=" この箇所でエラーが出ており、以下のエラー文です。 (文字定数には一文字のみを指定しなけばならない) 以上 よろしくお願い致します。

  • ExcelVBAで文字列の制御をしたいのですが

    セルに5文字の数字を文字列として取り込む入力規制をしているのですが、現段階では小数点を入力してもチェックにはじかれません。 小数点その他記号等チェックではじきたいので以下のようなマクロを組みました。 Dim A As String  ’値の取得用の変数 Dim i As Integer 'ループカウンタ For i = i To 5 '左からi個の数値を取り出す A = Left(target.Text, i) '取り出した数の右側の文字を検索(小数点があるとすればこの位置) If Len(A) = 2 Then A = Right(A, i) End If If Len(A) = 3 Then A = Right(A, i) End If If Len(A) = 4 Then A = Right(A, i) End If If Len(A) = 5 Then A = Right(A, i) End If '取り出した文字が数値以外ならメッセージを表示 If IsNumeric(A) = False Then Call MsgBox("数値以外が入力されています", vbExclamation) Next これでも何とか希望通りの動きはしたのですが、あまりスマートなプログラムに思えません。 不勉強で申し訳ありませんが、関数で○文字目、ひと文字だけを検索できるもはないのでしょうか? そうすればスマートにいきそうなのですが... このプログラムをもっとスマートな形にできる方法をご存知の方がいらっしゃれば、ご教授お願いします。

  • VBA バイナリ―から文字列にする方法

    この度はお世話になります。 現在、バイナリ―ファイル(xxxx.bin)をVBAで読み込み、バイナリ―データを文字列化して、エクセルで解析できるようなシートを作っています。 バイナリ―ファイルの中身が31 39 32 31 ・・・・・となっていたら、31393231・・・と文字列化にしたいです。 そこで、自分でプログラムを考えてみたのですが、バイナリ―が 01 などの場合、など“1”として読み込まれて、“0”が入らず、ずれてしまいます。 Sub 電文解析プログラム() Dim Deciphering_file As Variant '読み込みファイル Dim buf As Byte '1バイト格納 Dim fLen As Long 'ファイルサイズ Dim TEMP(1) As String ' Dim S_JIS As String '文字コード(2バイト) Dim str As String '文字列データ Dim i As Long Deciphering_file = Application.GetOpenFilename("BINファイル(*.bin),*.bin") fLen = FileLen(Deciphering_file) Open Deciphering_file For Binary As #1 For i = 1 To fLen Get #1, i, buf S_JIS = Hex(buf) If buf = 0 Then S_JIS = "00" End If TEMP(0) = Mid(S_JIS, 1, 1) TEMP(1) = Mid(S_JIS, 2, 1) str = myChr & TEMP(0) & TEMP(1) Next i End Sub ホントは3行くらいで済みそうな気がするんですが、あまりプログラミングをやったことありません。なので、すみませんがご教授お願いいたします。