teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

正規表現による、条件にESTABLISHEDを追加

2020/10/17 03:26

投稿

nono789
nono789

スコア1

answer CHANGED
@@ -4,48 +4,51 @@
4
4
  なっている行の「外部アドレス」のIPアドレス部分を抽出する
5
5
 
6
6
  ```VBA
7
- Sub test()
7
+ Sub test3()
8
8
 
9
- Dim WSH, wExec, cmd As String, Result As String
9
+ Dim WSH, wExec, cmd As String, Result As String
10
- Set WSH = CreateObject("WScript.Shell")
11
-
12
- ' 実行したいDOSコマンド
13
- cmd = "netstat -n"
14
-
15
- ' DOSコマンドを実行
16
- Set exec = WSH.exec("%ComSpec% /c " & cmd)
17
-
18
- ' DOSコマンドが終了するまで待機
19
- Do While exec.Status = 0
20
- DoEvents
21
- Loop
22
-
23
- ' DOSコマンドの実行結果(標準出力)を取得
24
- Result = exec.StdOut.ReadAll
25
-
26
- ' 取得した標準出力をメッセージボックスに表示
27
- MsgBox Result
28
-
29
10
 
11
+
12
+ Set WSH = CreateObject("WScript.Shell")
13
+
30
- ' 実行結果を行毎に区切る
14
+ ' 実行したいDOSコマンド
31
- tmp = Split(Result, vbCrLf)
15
+ cmd = "netstat -n"
32
-
33
- For n = 0 To UBound(tmp)
16
+
34
- buf = tmp(n) & vbCrLf
35
-
36
- '3389で前後にわける
17
+ ' DOSコマンドを実行
37
- If InStr(buf, "3389") Then
18
+ Set wExec = WSH.exec("%ComSpec% /c " & cmd)
19
+
20
+ ' DOSコマンドが終了するまで待機
21
+ Do While wExec.Status = 0
22
+ DoEvents
23
+ Loop
24
+
25
+ ' DOSコマンドの実行結果(標準出力)を取得
26
+ Result = wExec.StdOut.ReadAll
27
+
28
+ ' 取得した標準出力をメッセージボックスに表示
29
+ MsgBox Result
38
30
 
39
- buf2 = Split(buf, "3389")
40
- buf3 = Split(buf2(1), ":")
41
- Cells(5, 2) = Trim(buf3(0))
42
31
 
32
+
33
+
34
+ Set RE = CreateObject("VBScript.RegExp")
35
+
43
- End If
36
+ ' 正規表現の条件を設定
37
+ RE.Pattern = "^\s*\S+\s+\S+:3389\s+(\S+):\d+\s+ESTABLISHED\s*$"
38
+ RE.MultiLine = True ' 複数行に対して検索する指定
39
+
44
- Next n
40
+ ' 検索
41
+ Set reMatch = RE.Execute(Result)
42
+
43
+ ' 最初に条件に該当した行の、最初のカッコ内(=IPアドレス部分)を取り出し
44
+ Cells(7, 2) = reMatch(0).SubMatches.Item(0)
45
+
46
+
47
+ ' オブジェクトを空に
48
+ Set reMatch = Nothing
49
+ Set RE = Nothing
50
+ Set wExec = Nothing
51
+ Set WSH = Nothing
45
52
 
46
- ' オブジェクトを空に
47
- Set wExec = Nothing
48
- Set WSH = Nothing
49
-
50
53
  End Sub
51
54
  ```