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