• ベストアンサー

vbsの文字列比較について

vbsプログラムでInstr()を使用して文字列を比較しているのですがうまくいきません。何か知っている方がいましたら教えてください。 Dim index Dim str Dim result '結果の保存 'sheetnameにはシート名(aaaテスト)が保存されています。 str = Array("テスト","test") For i=0 to UBound(str) step 1 index = InStr(str(i),sheetname) If index > 0 Then result = i next

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

  • ベストアンサー
  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.1

何をしたくて、どううまくいかないのかな? InStrの引数の順序が逆とか?

motikei
質問者

お礼

上記の指摘どおりInStrの引数が逆だったみたいです。 ご指摘ありがとうございました。

motikei
質問者

補足

Arrayの文字列とシート名との文字列比較(部分一致)を行いたいです。 例)Arrayの文字列内容が"テスト","てすと"   シート名が"aaaテストbbb"   Arrayの文字列を順番にシート名と比較してシート名にArrayの文字列が含まれている場合はそのインデックスを返却したい。 上記の場合はテストで一致してインデックス1を返却する。

関連するQ&A

  • VBSで、日本語文字列の抽出が、うまくいきません。

    VBSで、日本語文字列の抽出を行いたいのですが、日本語がうまく動作しません。 もし、対処法などがあれば、教えていただければ、と思います。 プログラムとしては、あるファイルの中から、ある文字列(メールから、名前を抜き出す、など)を抽出して、 別ファイルに書き出すことをしたいのですが、 英数字(半角)では動作するのですが、日本語(全角)では動作ができません。 エンコーディングなどが問題だと思うのですが、プログラムがあまり分からないため、困っています。 良い解決法などあれば、教えていただければ、と思います・・・。 ----(現在のファイル:test.vbs)----------- Const ForReading = 1,ForWriting = 2,ForAppending = 8 '定数の指定 Set Fs = WScript.CreateObject("Scripting.FileSystemObject") sFile = InputBox("検索するファイルのパス") sWord = InputBox("検索する文字列") Set oTs1 = Fs.OpenTextFile(sFile,ForReading) Set oTs2 = Fs.CreateTextFile("result.csv",True) oTs2.WriteLine "ファイルパス= " & sFile oTs2.WriteLine "検索文字= " & sWord oTs2.WriteBlankLines 1 Do Until oTs1.AtEndOfStream sLine = oTs1.ReadLine If InStr(sLine,sWord)<>0 Then dim i'検索文字列 dim j'半角スペースの位置 dim Res'書き出す内容 dim n,m i= InStr(sLine,sWord) j = InStr(i, sLine, Chr(32)) n = j-i Res = Mid(sLine, i, n) oTs2.Write "Line:" & oTs1.Line - 1 & ", " & Res & vbCrLf End If Loop oTs1.Close oTs2.Close MsgBox "書き出し完了" ---------------------------------------------------------------

  • vbsのIsNumeric関数について

    Excelのセルから値を取得しその値が数値かどうかをチェックしているのですがうまくいきません。以下のプログラムで間違えがありましたらご指摘をお願いします。 Dim obj Dim str Set obj = CreateObject("Excel.Application") str = obj.Worksheets(sheetname).Range("A11").Value If IsNumeric(str) Then MsgBox("")

  • vbsのfor文に対する質問です。

    vbsのfor文に対する質問です。 Javaでいうところのbreak文と同様の処理はどのようにすれば良いのでしょうか? 例) For i=1 to 10 step 1   If str = "" Then    // for文を抜ける処理   End If next

  • VBSで配列の結果内容から任意の文字列を探す。

    VBS初心者です。 配列を1つにまとめた内容(strMSG)から 正規表現を利用して任意のキーワードを元に grepのような実行結果が欲しいです。 【実行サンプル】 ------------------------------------------- Option Explicit Dim TEST(4),i,strMSG TEST(1) = "001-AB1" TEST(2) = "001-AB2" TEST(3) = "AB1-001" TEST(4) = "AB2-001" For i = 1 To UBound(TEST) strMSG = strMSG + TEST(i) & vbCrLf next msgbox strMSG ------------------------------------------- strMSGの内容として4行分TESTの配列が格納されています。 ここでは例として、先頭001で始る文字列を検索かけたいです。 【理想の実行結果】 検索キーワード:先頭が001で始る行 ------------------------------------------- 001-AB1 001-AB2 ------------------------------------------- よろしくお願いします。 【備考】 1つ1つのTEST配列単位でgrepかけるより、配列を1つにまとめたものに 1度だけgrepかけたほうが処理速度が速いかな?と考えているためです。

  • 文字列からアルファベットを抽出(2)

    以下、文字列から英字を抜き出すサンプルを頂戴しました。 Sub test() Dim i, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 3) = WorksheetFunction.Substitute _ (WorksheetFunction.Substitute(Cells(i, 1), "]", ""), "[", "") For k = 1 To Len(Cells(i, 3)) str = Mid(Cells(i, 3), k, 1) If str Like "[A-z,A-z]" Then buf = buf & str End If If Len(buf) > 0 And Not str Like "[A-z,A-z, ]" Then Exit For Next k Cells(i, 2) = buf buf = "" Next i Columns(3).ClearContents End Sub 上記に以下の2つの機能を付け足したいです。 2文字以下の英字の時は英字がなかったものとして空白をかえしてほしい。→(1) (例)身長が3cm伸びた田中君→空白 (例)身長が3cm伸びたXYZ君→XYZ (例)こちらABC放送局→ABC 最初の一塊と後から出てくる一塊の長いほうをかえしてほしい。→(2) (例)学期末TESTの成績はAAAです→TEST(前が長い) (例)学期末TESTの成績はABCDです→TEST(同じ長さ) (例)学期末TESTの成績はABCDEです→ABCDE(後が長い) (1)と(2)を状況に応じて機能させたり停止したりしたいので その部分のソースを明示して頂けましたら幸いです。 厚かましいお願いですが、何卒よろしくお願いいたします。

  • vbsでテキストファイル内の文字列検索

    初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------

  • Like演算子で、[と]を文字として扱い比較したい

    今、フォルダ内のファイルリストを作成するVBA(Excel2003)を作っています。そこで、ファイル(絶対パス:フルパス)に「含まれていい文字」と「含まれない文字」(キーワード)を指定できる機能を作っています。 以前、VB6で類似の機能を作った時は、すんなり行ったのですが、VBAではうまくいきません。正規表現が使えるに越したことはないのですが、「 [ や ] を文字として認識するだけでもいいです。」 リストを作るフォルダには、  [20].txt  テキスト[a]txt  メモ[10] - コピー.txt などのテストファイルとその他ファイルが存在します。 キーワードを指定しないときには、うまく行きます。 指定すると、たとえば [10].txt というファイルがヒットしないように、NGワードを [10] を指定すると、[20].txtまでヒットしません。[a]では全てがヒットしません。 また、OKワードに[10]を指定すると[10]と[20]がヒットします。 ===== NGワードを比較している部分 ==== 引数:in_str が NGワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_NG(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_NG = True     Exit Function   End If      Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))     Dim tempFLG As Boolean   tempFLG = True      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = False       End If     End If   Next   If tempFLG = True Then     keywords_NG = True   Else     keywords_NG = False   End If End Function ===== OKワードを比較している部分 ==== 引数:in_Str が OKワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_OK(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_OK = True     Exit Function   End If   Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))      Dim tempFLG As Boolean   tempFLG = False      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = True       End If     End If   Next      If tempFLG = True Then     keywords_OK = True   Else     keywords_OK = False   End If    End Function ===== [や]を区切り文字ではなくする関数 ==== Public Function keywords_escape_sequence(keywordStr As String) As String      If keywordStr = "" Then     keywords_escape_sequence = ""     Exit Function   End If      Dim myIDX As Currency   Dim str_X As String      str_X = ""        For myIDX = 1 To Len(keywordStr) Step 1     If Mid(keywordStr, myIDX, 1) = "[" Then       str_X = str_X & "[[]"     ElseIf Mid(keywordStr, myIDX, 1) = "]" Then       str_X = str_X & "[]]"     Else       str_X = str_X & Mid(keywordStr, myIDX, 1)     End If   Next      keywords_escape_sequence = str_X End Function =====================================================     If keywords_OK(keywords_OK_Str, フルパス)) = True And _       keywords_NG(keywords_NG_Str, フルパス)) = True Then         'ファイルリスト作成     end if ===================================================== 正規表現を使うためには…というページを見つけ参照設定に以下の項目にチェックを入れてみましたが、結果は変わらす □Microsoft VBScript Regular Expressions 5.5 ===== RegExp と CreateObject ==== 参照設定をできれば変更したくない場合は、RegExp と CreateObject を使えば良いとあるページに書いてありましたが、参照設定でもできなかったので、これだけは試してません。 ヒントだけでもお教えください。

  • VBSで変数の宣言はできないのですか?

    VBSで、 Dim a As String a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a と文章を作って、test.vbsで保存しました。 するとエラーになります。 Dim a As Stringの部分を消すと、問題なく作動します。 もしくは、 Dim a a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a でも正常に動きます。 VBSで変数の宣言はできないのでしょうか?

  • vbaの繰り返し処理について

    vbaです。 Sub Test1() Dim Str As String Dim Pnt1 As Long Dim Pnt2 As Long Str = Range("A1") Pnt1 = InStr(Str, "重 http://") If Pnt1 <= 0 Then Exit Sub Pnt2 = InStr(Pnt1, Str, "要") If Pnt2 <= 0 Then Range("B1") = Mid(Str, Pnt1 + 2) Else Range("B1") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2)) End If End Sub という式でA1からA2.A3と下にURLが入っており空欄になるまで同じ処理をしたいのですがどのように変更すれば作動しますでしょうか?

  • 比較したいセルの文字列が一致したら"一致"

    いい案が思い浮かばないため皆さんのお知恵をお貸しください。 下はエクセルと思ってください    A列             B列 1  2009/01/07/22:55   2009/01/07/22:56 2  テスト1           テスト1 3  テスト2           テスト2 4  テスト3            テスト3 5  テスト4           テスト6 とこのようなシートがあります。 セルA1とB1は時間のため可変で比較対照としたくありません それ以外のA列とB列がすべて一致したとき一致 不一致があればセルA5が不一致とmsgboxで出したいと考えております。 まだ思案中で途中なのですが Sub test() Dim i As Integer i = 1 Do While Cells(i, 1) <> "" If Cells(i, 1) = Cells(i, 2) Then MsgBox "一致" i = i + 1 ElseIf Cells(i, 1) <> Cells(i, 2) Then MsgBox "不一致" i = i + 1 End If Loop End Sub いまはまだこの程度のレベルです 宜しくお願いします。

専門家に質問してみよう