• ベストアンサー

VBScriptで指定した範囲の中で対象の文字列が含まれている件数を数えたい

VBScriptで指定した範囲の中で対象の文字列が含まれている件数を数えたいと思っています。 やり方が思いつかずわからないので助けてください。 ログの内容は下記のようになっています。 /*/*/*/*/*/*/*/*/*/*/* 2009/08/08 AM9:00 LOG START /*/*/*/*/*/*/*/*/*/*/* PC01 08:00 PC05 08:10 PC100 07:00 /*/*/*/*/*/*/*/*/*/*/* LOG END /*/*/*/*/*/*/*/*/*/*/* /*/*/*/*/*/*/*/*/*/*/* 2009/08/08 AM10:00 LOG START /*/*/*/*/*/*/*/*/*/*/* PC101 09:00 PC55 09:20 PC111 08:00 PC101 09:50 /*/*/*/*/*/*/*/*/*/*/* LOG END /*/*/*/*/*/*/*/*/*/*/* . . . 一時間ごとにログに情報が書き込まれているわけですが「LOG START」から「LOG END」までの間に指定文字列が含まれる行をカウントしたいと思っています。 その一時間後との値をエクセルに保存していきたいのですが・・・ ヒントなどいただけないでしょうか?

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

  • ベストアンサー
回答No.2

VBSでもExcelのVBAでもログが追記である以上ファイルの先頭から1行ずつ読むことは変わらないと思います。 ■文字検索 http://www.whitire.com/vbs/tips0026.html を使い、読み込んだ行に「LOG START」が含まれていたら次の行から指定文字列のカウントを開始し、「LOG END」を見つけたらカウントを終了させる。 指定文字列の検索よりも「LOG END」の検索を先に記述した方が効率的かも。 ■Excelを起動する http://www.whitire.com/vbs/tips0171.html リンク内にセルへの格納が書かれているので参考になると思います。 この手のログ集計をする場合、既に保存されたデータなのか新しいデータなのかをどう判定するかがキーとなります。 頑張って下さい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excelに保存するのなら、ExcelVBAではダメなのでしょうか? VBSでもExcelを起動させなければいけないわけですし、ログの行数によっては 一旦シートに取り込んで加工していく方法もありそうですが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 指定した文字列を含む行から、指定した文字列を

    含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。 対象ファイルに結果を上書きでもかまいません。 指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。 例) 東京都 新宿区 <start123AAA> 東京都 港区 <end>AAABBB 東京都 目黒区 どのファイルにも必ず<start と<end の文字列があります。(必ず1組です) <start の文字列を含む行から <end の文字列を含む行までを 抽出したいのです。 (欲しい結果↓) <start123AAA> 東京都 港区 <end>AAABBB フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが どうしてもうまくいきません。 抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか? できればバッチで処理できればなと思っているのですが、うまくいきません。 (<>!""/ あたりが入っています。別の文字に置き換えることは可能です) 範囲を抽出ではなく、 <startを含む行の一つ上の行から前を全て削除 <endを含む行の一つしたの行から後を全て削除 する方法や VBAで、スタート行をとエンド行をSearchして抽出する方法など ご教授いただきたくお願い致します。

  • 1レコード(1行)のいずれかの列に指定文字列が含まれるレコード件数

    EXCEL2003において、  列1,列2,列3・・・・ 行1 A,,B 行2 A,,, 行3 A,,A, 行4 B,,, ・・・・・・・・・・・・・・ 上記のように列1~3(実際は5列あります)に複数の データが入っています。 列1~5のいずれかに文字列「A」が含まれる行の件数を カウントしたいと考えています。 なお、行3のように列1、3に「A」が含まれる場合でも 1件と計上します。 上記例ですと、行1~3でそれぞれ1件ずつ計上、行4は対象外 とされて結果は計3件。 と集計できる方法について教えてください。 できればマクロは使わずに関数でと考えています。 よろしくお願いします。

  • 範囲演算子と文字列マッチングを組み合わせたときの解除方法

    Windows-XP上でActivePerl/5.8.8を利用しています。 テキストファイルなどで、ある文字列が現れた行から、ある文字列が現れるまで、 ということを判定させるときに、範囲演算子が使えるということを知りました。 while(<>){     chomp;     if(/^START$/ .. /^END$/){ # 範囲指定         ・・・         STARTの行から、ENDの行までこのブロックに入る     } } 1ファイルに対してだけ処理させるときは上手く行くのですが、 連続して複数のファイルを処理させようとすると、 2番目のファイルからは、開始条件(/^START$/)が既に成立したと 判断されてしまうようで、該当行が現れていないのに、ifブロックに 入ってしまいます。 foreach(@ARGV){ # 複数ファイルに対して処理させる     open(FH,$_) || die;     while(<FH>){        chomp;        if(/^START$/ .. /^END$/){ # 範囲指定            ・・・            1つ目のファイルではSTARTの行から、ENDの行まででこのブロックに入るが、            2つ目のファイルではSTARTの行が現れないうちからこのブロックに入ってしまう。        }     } close(FH); } これを2つ目のファイル以降も、範囲指定の開始条件が成立していない 状態から処理させるためには、どのようにすれば良いでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • エクセル 特定の文字列から範囲を指定

    エクセル 名前定義の範囲について質問です。 始まり・終わりの行・列を示す特定の文字列を設定し、 それを元に自動で範囲を変化させるようなことはできませんでしょうか。 例えば、 B1:列ここから D1:列ここまで A3:行ここから A6:行ここまで と書かれていた場合、 名前定義の範囲が自動で「B3:D6」となるような方法を探しています。 なお、 ・列を指定する文字列は必ず1行目に ・行を指定する文字列は必ずA列目に あるという想定です。 極力マクロを使用しない方法で、有効なものがございましたら ご指導のほどよろしくお願いします。

  • Excel関数で範囲指定し重複以外の値のカウント

    Excelの関数の使い方で教えていただけないかと思い、投稿しました。 お手数ですが、よろしくお願いします。 ある列の中で、限られた値の行を範囲として、別の列の値を調べて、カウントしたいと思っています。 カウントする値は、重複を除いた値の個数をカウントしたいと思います。 例えば、A列の1~100行までの範囲の中で、A列の101行目に入っている値である文字列の”鈴木”と同じ値がある行のB列の値をカウントしたいと思います。 そのB列のカウントを行う場合、重複する値があれば、1とカウントします。 以上の関数をB列の101行目に記載するとすれば、どのような関数になるのか教えていただければ幸いです。よろしくお願いいたします。

  • asp+vbscriptで「文字列があるか、無いか」の条件分岐をしたい

    asp+vbscriptで「文字列があるか、無いか」の条件分岐をしたい場合 mdbファイルを用いて、asp+vbscriptでWebページを作成しています。 mdbファイル内のテーブルデータ(文字列)が空白(データが無い)のであれば 何も表示しなくて、データが入っている場合、そのデータ(文字列)を 表示させたいのですが、指定方法がわかりません。 If rs.Fields.Item("xxxx") = "" Then ←ここの指定方法が知りたいです。 Else Response.Write "<tr>" & vbCrLf Response.Write "<td>" & rs.Fields.Item("xxxx") & "</td>" & vbCrLf Response.Write "</tr>" & vbCrLf End If 上記の通り「""」ではデータの有り無しに関わらず表示されてしまいます。 (文字データは無いので文字が出ませんが、枠が出てしまう) 文字列の「有り」「無し」の判定方法をご存じの方、ご教授頂けますでしょうか。 宜しくお願い致します。

  • 指定した2つの文字列を含むセル

    エクセルで、指定した2つの文字列両方を含むセルをカウントしたいのですが、関数でできますか?

  • 文字列の中の特定の数個の文字列だけを特定のポイント数に指定する

    長い1行の文字列の中の特定の数個の文字列だけを特定のポイント数に指定するにはどうしたらよいでしょうか。 例えば、「9月というのに35度もあります。」という10ポイントの1行の文字列の中の「35」だけを15ポイントにするにはどうしたらよいでしょうか。「35」だけを<p></p>や<div></div>の中に入れてみましたが、こうするとここで改行されて3行になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • エクセルVBAについてお尋ねいたします。以前、列の検索範囲から指定列中

    エクセルVBAについてお尋ねいたします。以前、列の検索範囲から指定列中の空欄セルが存在した際にその空欄を含む行の削除を実行するマクロを組んだのですが、削除する行の範囲も指定するマクロに組み替えたく望んでおります。 <参照> Private Sub CommandButton1_Click() Dim minRow As Integer Dim maxRow As Integer Dim checkColIndex As Integer ' 初期値1(開始行の値) minRow = 1 ' 初期値2(終了行の値) maxRow = 10 ' 検索列の値(1=A列、2=B列、3=C列...) checkColIndex = 1 Application.ScreenUpdating = False ' 空欄が存在する行の削除処理 For i = maxRow To minRow Step by - 1 ' 指定セルが空欄の場合、その行を削除 If (Len(ActiveSheet.Cells(i, checkColIndex).Value) = 0) Then ActiveSheet.Rows(i).Delete End If Next Application.ScreenUpdating = True End Sub 上記のコマンドを例にすると、 1行目から10行目までのA列に存在する空欄を検索し、空欄が存在したら範囲中の最下(10行目)よりセルを含む行ごと削除・・・ となりますが、この中に <例> ’削除を行う範囲(1=A列、2=B列、3=C列...) ' 開始列値 *** ' 終了列値 *** '範囲内の行を削除 *** など、検索範囲が変わった際にも対応が可能で削除範囲が指定出来るコマンドに変更したく望みます。 宜しくお願い致します。

  • VBScriptである文字列に半角文字が含まれているかどうか調べる方法について

    VBScriptである文字列に半角文字が含まれているかどうか調べる方法について、ネットで調べてソースコードを拾ってきたのですが... IFの条件でなぜ全角、半角が判断できるか分かりません。教えてください。お願いします。 iLen = Len(str1) iLenByte = 0 '--- 文字列のバイト数 For i = 2 To iLen strField = Mid(str1, i, 1) iCode = Asc(strField) If iCode > 0 Then '--- 半角文字 Else '--- 全角文字 End If Next