Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13843 / 76738 ←次へ | 前へ→

【68397】Re:テキストデータから数値をもってきて表を作りたい
発言  kanabun  - 11/3/2(水) 20:44 -

引用なし
パスワード
   ▼くま さん:
>kanabunさん
>昨年はいろいろとご教示いただきましてありがとうございます。
くま さん、お久ですね(^^

>自分なりに変更してみたのですが
>フォルダ内のファイルを順に処理するループ処理に変えてみたのですが、
>vlan値は正常に取ってくるのですが、
>hostnameの値が一番最初に見たファイルの値のままなのです。

問題のか所は
>    For i = 0 To UBound(ss) - 1
>     If Not ok Then
>       If ss(i) Like "hostname*" Then
>         hostname = Split(ss(i))(1)
>         Debug.Print , "hostname", "vlan ID"
>         ok = True
のところにあります。
この変数ok は まだhostnameが見つかっていないときには
"vlan*" の行の解析をしないフラッグ(目印)です。
hostname がみつかったときはじめて ok = True にしています。

それが複数ファイルのとき、一番最初のファイルのhostnameが
読み込まれて ok=True になったあと、
次のファイルに移るときは いったん ok=False に戻しておかないと
2番目からのファイルは ok=True なので そのファイルのhostname を
読む処理をスキップしてしまいます。
で、最初のファイルのhostname がずっと現れているわけです。
ファイル読み込みが終了したら ◆のところに ok=False を追加してください。

ちょっとインデントが深く、読みにくかったので、
順番を入れ替えるついでに編集しました。

Sub Try4_JoinFile()
  Const myPath = "D:\(Data)\temp8log" '"C:\マクロ"
  Dim io As Integer
  Dim myLogFile As String
  Dim buf() As Byte
  Dim ss() As String, s As String, Series, num As Long
  Dim hostname As String, ok As Boolean
  Dim i As Long, j As Long
  Dim rex As RegExp
  Dim mm As Match
  Set rex = New RegExp
  rex.Pattern = "[\d-]+"
  rex.Global = True
  
  ChDrive myPath
  ChDir myPath
  myLogFile = Dir("*.log", vbNormal)
  
  Do While Len(myLogFile) > 0
    '------------ ファイルを読み込む
    io = FreeFile()
    Open myLogFile For Binary As io
     ReDim buf(1 To LOF(io))
     Get io, , buf
    Close io
    ss = Split(StrConv(buf, vbUnicode), vbCrLf)
 
    '------------  抽出
    For i = 0 To UBound(ss) - 1
     If Not ok Then
       If ss(i) Like "hostname*" Then
         hostname = Split(ss(i))(1)
         Debug.Print , "hostname", "vlan ID"
         ok = True
       End If
     ElseIf ss(i) Like "vlan*" Then
       If Mid$(ss(i), 6, 1) Like "#" Then
        For Each mm In rex.Execute(ss(i))
          s = mm.Value
          If s <> "-" Then
            Series = Split(s, "-")
            num = Series(0)
            For j = num To Val(Series(UBound(Series)))
              Debug.Print , hostname, j
            Next
          End If
        Next
       End If
     End If
    Next
    ok = False  '◆ファイル読みが終了したら ok = False に戻す
    '-------------- 次のログファイル
    myLogFile = Dir$()
  Loop
End Sub

0 hits

【67107】テキストデータから数値をもってきて表を作りたい くま 10/11/4(木) 16:00 質問
【67108】Re:テキストデータから数値をもってきて表... kanabun 10/11/4(木) 16:39 発言
【67109】Re:テキストデータから数値をもってきて表... kanabun 10/11/4(木) 16:56 発言
【67110】Re:テキストデータから数値をもってきて表... kanabun 10/11/4(木) 17:24 発言
【67115】Re:テキストデータから数値をもってきて表... くま 10/11/5(金) 9:42 質問
【67116】Re:テキストデータから数値をもってきて表... kanabun 10/11/5(金) 10:51 発言
【67117】Re:テキストデータから数値をもってきて表... kanabun 10/11/5(金) 11:04 発言
【68394】Re:テキストデータから数値をもってきて表... くま 11/3/2(水) 16:56 質問
【68397】Re:テキストデータから数値をもってきて表... kanabun 11/3/2(水) 20:44 発言
【68398】Re:テキストデータから数値をもってきて表... kanabun 11/3/2(水) 20:47 回答
【68399】Re:テキストデータから数値をもってきて表... kanabun 11/3/2(水) 21:12 発言
【68401】Re:テキストデータから数値をもってきて表... kanabun 11/3/2(水) 21:30 回答
【67118】Re:テキストデータから数値をもってきて表... Yuki 10/11/5(金) 11:54 発言

13843 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free