Re: [請益] excel vba的ip range展開成連續個別ip的

作者: kino818 (好多夢 層層疊疊又斑駁)   2021-09-27 23:19:03
先謝謝c大,我將c大程式的vbCrLf取代成" "與將Debug.Print s取代成msgbox s
訊息視窗真的出現我要的10.0.0.1 10.0.0.2 10.0.0.3了
regular expression,我在splunk與ELK與python有看過
但還沒有時間去學,沒想到re物件功能這麼強大
c大的專業程式碼,我會再好好琢磨,學習起來
我excel上有source ip與destination ip兩欄位
*source ip的一個儲存格內有多ip與ip range,例如分別是10.0.1.200 10.0.0.1
10.0.2.27
10.0.0.1-3 10.0.3.245-246
已實作如下程式,找尋source ip每列儲存格中有-字元,好之後利用c大程式碼進行取代
For r= ivalue to evaule
InStr(cells(r,3),"-")
next
上面*source ip的一個儲存格內有多ip與ip range的範例
分別取代後是10.0.1.200 10.0.0.1
10.0.2.27
10.0.0.1 10.0.0.2 10.0.0.3 10.0.3.245 10.0.0.246
要達到上面最後結果,打算將c大程式由sub轉成可傳入引數的vba函數,還要再研究一下
利用字串處理函數,例如left(),right(),感覺要用mid()比較適當
要找出一個儲存格(一個字串中)任意位置的ip range,然後用c大程式取代成連續個別ip
最後,應該要用vba replace()函數,我也已在此問題的其他地方用過
但整個coding還在著墨,繼續努力
再次謝謝c大
※ 引述《cutekid (可愛小孩子)》之銘言:
: Sub demo()
: ip = "10.0.0.1-3"
: Set re = CreateObject("vbscript.regexp")
: re.Pattern = "(\d+.\d+.\d+.)(\d+)-(\d+)"
: With re.Execute(ip)(0)
: p = .submatches(0)
: For i = .submatches(1) To .submatches(2)
: s = s & p & i & vbCrLf
: Next
: End With
: Debug.Print s
: End Sub
: ※ 引述《kino818 (乞丐下大願panhandler)》之銘言:
: : 由於公司要盤點防火牆規則成excel特定格式
: : 之前都人工盤點,很費時
: : 最近學了點excel vba,還沒很熟
: : 已完成下面
: : 1.config xml轉html(利用python)
: : 2.vba自動讀入html成excel資料
: : 3.防火牆規則分類
: : 後面還要轉成公司格式,沒太大問題
: : 現在遇到ip range展開成連續個別ip的作法抉擇?
: : 下面是網頁把10.0.0.1-10.0.0.3轉成連續多儲存格個別ip
: : https://www.mrexcel.com/board/threads/excel-expand-ip-address-range-to-individual-ip.1148927/
: : 我防火牆上ip range格式為10.0.0.1-3想轉成一個儲存格內的資料10.0.0.1 10.0.0.2
: : 10.0.0.3
: : 我還不了解excel vba的Ubound()與array用法
: : 想請教我各位先進ip range是10.0.0.1-10.0.0.3或10.0.0.1-3哪種表示法比較容易實現
: : coding?
: : 我自己回答,應該是第一種表示法最易vba實現,上面網頁可提供方向
: : 但第二種表示法能夠用vba寫出來嗎?
: : 感謝
: :
作者: cutekid (可愛小孩子)   2021-09-28 19:49:00
不客氣喔,有問題可以一起討論。祝順心,南無阿彌陀佛!

Links booklink

Contact Us: admin [ a t ] ucptt.com