• ベストアンサー

文字列の括弧について(初心者)

textに自分で入力した値を変数文字列として扱う場合に、括弧を使いたいのですが、 例 Dim A as string Dim B as string A = Text1.text B = "abc" としてコマンドボタンを押したときにAとBの値が同じ場合(Aがabc)は1をAとBの値が違うときは0を出力するプログラムを作ったのですが、これに追加で括弧()や[]をつけても1を出力するプログラムが作りたいのですが、よくわかりません。 Text1.textの値が(abc)か[abc]でも1を出力、 [ab]cやa(b)cでも1を出力、(abcやa)bc(やa(b(cのときは0を出力するプログラムが作りたいのです。 どうか教えてください。 おねがいします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

'()または、[]がペアになっているか調べてなっていれば取り除いて=かどうか調べる Dim bucketL, bucketR,a,b a=Text1.text b="abc" bucketL = InStr(a, "[") bucketR = InStr(a, "]") If bucketL < bucketR And bucketL * bucketR <> 0 Then a = Replace(a, "[", "", , 1) a = Replace(a, "]", "", , 1) End If bucketL = InStr(a, "(") bucketR = InStr(a, ")") If bucketL < bucketR And bucketL * bucketR <> 0 Then a = Replace(a, "(", "", , 1) a = Replace(a, ")", "", , 1) End If if a = b then '同じ MsgBox 1 else '違う MsgBox 0 end if

gosutero
質問者

お礼

回答ありがとうございます。 またお世話になります。 プログラムに対する説明が1部わからないのでどうか教えてください。 >bucketL = InStr(a, "[") '文字列aの中に[が何文字目にきているか調べて、その値をbuketLにいれる' >bucketR = InStr(a, "]") '' '文字列aの中に]が何文字目にきているか調べて、その値をbucketRにいれる' >If bucketL < bucketR And bucketL * bucketR <> 0 >Then 'bucketLがbucketRより小さい値で、bucketLとbucketRをかけた値が0以外のとき' >a = Replace(a, "[", "", , 1) '指定された文字列の1部を、別の文字列で指定された回数分で置換してaにいれる。 Replaceは関数 aは置換する文字列を含む文字列 "["は検索する文字列 ""は置換する文字列(?) はスペース(?) 1は検索開始位置(1文字目から)'

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2> >""は置換する文字列(?) >はスペース(?) >1は検索開始位置(1文字目から)' ""は、長さのない文字列 つまり、長さのない文字列で置き換える つまり、取り除くってことですね。 a = Replace(a, ")", "",ココ , 1) "ココ"は、置換を開始する位置を数値で書きます 省略すると1が想定されます。 その後の1は、置き換える回数で、省略すると全部置き換えされます。ここでは、1を指定しているので、1回置き換えます。 結果が1になる場合、カッコのペアたかだか1回であるということを想定しているからです。(実際は違うのかもしれませんが、質問文からはそう思えました。)もし、1回以上であったり、順序が逆の場合は、除去されないカッコが残るので、当然カッコを含まない文字列とは一致しないということですね。

gosutero
質問者

お礼

回答ありがとうございます。 わかりやすい説明ありがとうございます。 括弧の数は決まってないですが、たぶん1個ずつのセットしかでてこないので大丈夫だと思います(説明不足でした、すいません) スペースは開始する位置を示していたんですね。 そして最後の1は回数だったのですね。 If bucketL < bucketR And bucketL * bucketR <> 0 Thenの*や<>も使い方をよく知らなかったので勉強になりました。 本当にありがとうございました。

回答No.1

instr関数でできると思います。 if instr(text1.text, "ABC") <> 0 then '文字列あり else '文字列なし end if でいけるかと思います。instr関数はHELPで確認してみて下さい。

gosutero
質問者

お礼

回答ありがとうございます。 おかげで(ABC)や[ABC]はできました。 instrは文字列に文字が何番目に含まれているか教えてくれる命令コードですよね。 なぜか調子悪くてHELPは使えないので検索などで調べています。

関連するQ&A

  • 文字列の括弧について(初心者)2

    文字列の括弧について(初心者) http://oshiete1.goo.ne.jp/kotaeru.php3?q=1110818 の質問の続きなのですが、 文字列の中で( )を1セットで使う方法を教えてもらったので自分の使用するプログラムに少し直したのですが、やはり2つ以上の括弧(カッコ)にも対応しなければならなくなりました。 どのようなプログラムになるのでしょうか? 私はInstrは文字列を左からよんでいって最初にある指定した文字(下記の例だと"("など)の場所を何文字目か示してくれるだけなので1つの括弧にしか対応できないと考えています。 なので文字列の中に指定した文字が何個含まれているか調べて、それぞれ何文字目か示してくれるプログラムが あればできると考えています。 どうか教えてください、おねがいします。 ↓今のプログラム Dim bucketL as Long Dim bucketR as Long Dim a as String Dim b as String a=Text1.text bucketL = InStr(a, "(") bucketR = InStr(a, ")") If bucketL < bucketR And bucketL * bucketR <> 0 Then Text2.text = "OK" End If

  • ASP.NETの質問なのですが、文字列の引き算は可能でしょうか?

    ASP.NETの質問なのですが、文字列の引き算は可能でしょうか? dim a as string = "abcde" dim b as string = "cde" dim c as string c = a- b このようなコードでcの答えをabとして表示できるでしょうか? ご存知の方がいらっしゃりましたらアドバイスお願いいたします。

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

    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 とした場合と同じようにしたいのですが可能でしょうか? ご存知の方教えてください。 よろしくお願いします。

  • 文字列を配列に…。

    VBはまだ始めたばかりで本当に初歩的なことかもしれませんが分かる方がおられたら是非教えて下さい。 text1.textから取り込んだ文字列を”一文字ずつ”(Dim a(100) as stringで宣言した)配列に格納したいのですがどうしたらいいのでしょうか?? <例>text1.textに"abc"と入力しcommandbuttonを押すとa(0)に"a"がa(1)に"b"がa(2)に"c"が格納されるといったかんじです。 ちなみに今私がしたいのはtext1.textに、ある文字列を入れその文字列を文字コードに変換しそれを一文字分ずつ+1してまたそのコードを文字に直しtext2.textに出力するというものです(ようは簡単な暗号化ですね)。 私はAscとChrコマンドを利用して1文字ずつコードをずらしていこうと思っているのですが、他に良い方法などあるのでしょうか?? 本当に初心者でどのようにしらたよいのか分かりません…。 どなたか分かりやすく教えていただけませんでしょうか?? お願いします。

  • VBA初心者です.文字を抽出しファイルを移動したい

    セルA1に表示された文字(例,CK001など)の右から3番目までの文字を拾って,その文字を含むファイルをAからBに移動したいのですが,上手く作動しませんでした.パス内に変数は使用できないのか(ここではZ)「ファイルが見つかりません」となってしまいます.良い方法をご教授いただければ幸いです.下記は自分が作成したプログラムです. Sub Sample() Dim fso As Object Set fso = CreateObject("scripting.filesystemobject") Dim A As String Dim B As String Dim Z As Variant Z = Right(Range("A1"), 3) A = "C:\Users\abc\Documents\test\*Z*" B = "C:\Users\abc\Desktop\1\2\" fso.MoveFile A, B End Sub

  • VB(2008)で文字列の置き換え

    Dim a As String Dim b As String a = TextBox1.Text b = a.Replace("hogehoge", "fuga") b = a.Replace("piyo","xyzzy") b = a.Replace("foo", "bar") Textbox2.Text= b のようにしているのですが、置き換えることができません。 初歩的な内容ですがどなたかよろしくお願いします。

  • 文字式

    a,b,c,に関して a+b+c=(a^2)+(b^2)+(c^2)=(a^3)+(b^3)+(c^3)=n が成り立つとき、次の問いに答えるには ア。ab+bc+caをnの式で表す イ。abcをnの式で表す ウ。(a^4)+(b^4)+(c^4)=nが成り立つとき、nの値を求める。 でウがわかりません。 abc=n3/6-n2/2+n/3 ab+bc+ca=(1/2)n2-(1/2)n a+b+c=n ですが。 おしえてください。

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • VB2008: 文字列を逆順にする関数が判らない!

    Sub Main()   Debug.Print(Reverse("ABC") End Sub Function Reverse(ByVal aChars As String) As String   Dim C As Char   Dim I As Integer   Dim J As Integer   Dim L As Integer = aChars.Length - 1   J = L   Do While I < J     C = aChars.Chars(I)     aChars.Remove(I, 1)     aChars.Insert(I, aChars.Chars(J))     aChars.Insert(J, C)     aChars.Remove(J + 1, 1)     J -= 1     I += 1   Loop   Return aChars End Function 1、"ABC"の"A"を変数 C に保存。 2、"ABC"の"A"を削除。 3、"BC" の先頭に"C"を挿入。 4、"CBAC" の3番目(J=2)に変数Cを挿入。 5、"CBAC" の4番(J+1=3)を削除 6、"CBA" を戻り値にセット。 という Reverse 関数ですが動作しません。 一体、どこでどのように考え違いをしているのでしょうか? 全くわかりません。 宜しくお願いします。

  • 証明問題の答えあわせをお願いします。

    証明問題の答えあわせをお願いします。 問.a+b+c+abc=4、a≧0 b≧0 c≧0の時a+b+c≧ab+bc+caを示せ。 自分の答え. f(a,b,c) = a+b+c-ab-bc-ca = a(1-b-c)+b+c-bcとおく。 条件より a≧0,b≧0,c≧0 …(1)  a+b+c+abc=4 …(2) また、本問では対称性より a≧b≧c…(3)の場合を考えるだけで十分である。 まず、a,b,cの取りうる範囲について考える。 a+b+c+abc ≧2√(ab)+c+abc (∵相加相乗平均) =2√(ab)+c(1+ab) ≧2√(ab)+c・2√(ab) (∵相加相乗平均) =2√(ab)・(c+1) ≧2√(ab)・2√c (∵相加相乗平均) =4√(abc) 従って、(2)より1≧abc…(4)が成り立つ。 また、(2)を変形するとa=(4-b-c)/(1+bc)となり、 a=(4-b-c)/(1+bc)≦4/(1+bc)≦4 ∴a≦4…(5) 次に、aについて場合分けしてf(a,b,c)≧0を示す。 (1)1>a≧0の場合 (3)より1>a≧b≧c、1>abcとなるので、4>a+b+c+abcとなり、これは(2)に反する。 (2)a≧1の場合 (5)より1≦a≦4となり、また(4)よりbc≦1…(6) ここで、f(a,b,c)はaについての1次関数と見なせるので、 区間1≦a≦4の両端におけるf(a,b,c)の値を求めると、 a=1のときf(1,b,c) = 1-bc ≧0 (∵(6)) a=4のとき、(2)よりb,cのとりうる値はb=c=0のみなので、f(4,0,0) = 0 ここで、f(a,b,c)はaについての1次関数なので、区間1≦a≦4において直線的に変化する。 以上より、常にf(a,b,c)≧0となるので、題意は示された。■ 全体的にもやもやしてますが、特に最後の数行がどうも自信がありません。横軸にa、縦軸にfを取ったとき、b,cが変化しても、(1,1-bc)と(4,0)を結ぶ直線上で変化するのだからf≧0としたのですが、大丈夫でしょうか。 また、元の式がきれいなので、因数分解して○≧0のような式にしたり、他のエレガントな方法を思いついた方は教えてください。長くなりましたが、よろしくお願いいたします。

専門家に質問してみよう