|
こんばんは。
>以下のようなフォマトのテキストファイルから[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]以下の条件にあったデータのみが表示されます。
正規表現を使いました。
|
|