Excel VBA質問箱 IV

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

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


36078 / 76732 ←次へ | 前へ→

【45839】Re:テキスト
発言  ichinose  - 07/1/15(月) 22:20 -

引用なし
パスワード
   こんばんは。
>以下のようなフォマトのテキストファイルから[MAP]の部分だけとりだせますでしょうか?よろしくお願いします。
このテキストファイルを仮に Sample.Txtというファイル名だとします。

>{
>{
>[MAP1]
>10 20
>11 35
>12 45
>18 21
>;
>[cha]
>10 30
>16 22
>78 99
>;
>}
>{
>[MAP2]
>34 25
>35 98
>36 43
>37 88
>;
>[cha]
>36 99
>24 55
>14 13
>;
>}
>}
>マクロ後↓
>
>[MAP1]
>10 20
>11 35
>12 45
>18 21
>[MAP2]
>34 25
>35 98
>36 43
>37 88

新規ブックの標準モジュールに

'=======================================================
Sub main()
  Dim fno As Long
  Dim wmode As Boolean
  Dim g0 As Long
  Dim dat As String
  g0 = 1
  wmode = False
  Call create_RegExp
  fno = FreeFile()
  Open "d:\****\***\sample.txt" For Input As #fno
'      ↑ここにテキストファイルのパスを記述する
  Do Until EOF(fno)
    Line Input #fno, dat
    If findchk(dat, "\[.+\]") Then
     If findchk(dat, "\[MAP[0-9]+\]") Then
       wmode = True
     Else
       wmode = False
       End If
     End If
    If wmode = True Then
     Cells(g0, 1).Value = dat
     g0 = g0 + 1
     End If
    Loop
  Call term_RegExp
End Sub

別の標準モジュールに
'========================================================
Option Explicit
'========================================================
Private regEx As Object
'========================================================
Sub create_RegExp()
    Set regEx = CreateObject("VBScript.RegExp")
End Sub
'========================================================
Function findchk(ByVal mystr As String, _
         ByVal chkstr As String, _
         Optional ByVal chknum As Long = 1) As Boolean
  Dim Matches As Object
  Dim idx As Long
  findchk = False
  regEx.Pattern = chkstr
  regEx.IgnoreCase = True
  regEx.Global = True
  Set Matches = regEx.Execute(mystr)
  If Matches.Count = chknum Then
   findchk = True
   End If
  Set Matches = Nothing
End Function
'========================================================
Sub term_RegExp()
  Set regEx = Nothing
End Sub

これでmainを実行してください。

アクティブシートのA列に
[MAPxx]以下の条件にあったデータのみが表示されます。

正規表現を使いました。
3 hits

【45836】テキスト ChinaCoffee 07/1/15(月) 19:56 質問
【45838】Re:テキスト Kein 07/1/15(月) 21:58 発言
【45839】Re:テキスト ichinose 07/1/15(月) 22:20 発言
【45842】Re:テキスト Kein 07/1/16(火) 0:38 回答
【45845】Re:テキスト ChinaCoffee 07/1/16(火) 6:09 お礼

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