代码之家  ›  专栏  ›  技术社区  ›  BigBlondeViking

如何从Excel获取范围内的下一个IP

  •  1
  • BigBlondeViking  · 技术社区  · 15 年前

    我知道必须有一种方法:

    我需要帮助获得任何热Excel模块/技巧/脚本/宏,看看一系列的IP,并给我下一个地址? 例如 (192.168.1.128)->(192.168.1.129)

    我不确定我需要子网,但也会把它扔出去。 (192.168.1.255)->(192.168.2.1)

    我敢打赌,必须完成vbscript和快速和肮脏的教程,如何实现这将是一流的。

    提前谢谢~

    编辑:

    Excel D列有192.168.1.1,是手动输入的。

    Excel E列应为192.168.1.2。

    我想避免有人手动进入

    最好的方法是什么?

    3 回复  |  直到 10 年前
        1
  •  1
  •   Eric    15 年前

    您需要将IP地址分块

    Dim ip As String
    Dim ip_addr() As String
    Dim ip_next As String
    ip = "192.168.1.1"
    
    ip_addr = Split(ip, ".")
    
    ip_next = ip_addr(0) & "." & ip_addr(1) & "." & ip_addr(2) & "." & Trim(Str(Val(ip_addr(3) + 1)))
    

    但是,这不考虑子网,因为您需要位掩码,所以要实现它要困难得多。如果你坚持8位的倍数屏蔽,这不应该太复杂处理。

    每个数据块的8位屏蔽范围为1-255。

    只要检查是否

    Val(ip_addr(3) + 1))) > 255
    

    然后妥善处理

    编辑

    要从Excel中的单元格读取数据,只需更改

    ip = "192.168.1.1"
    

    ip = Range("B1")
    
        2
  •  0
  •   Michael Zilbermann    15 年前

    我不知道你想如何处理这样一个列表,但不要忘记有些值是特殊的。

    你最好看看 http://en.wikipedia.org/wiki/IP_address 了解更多信息。

        3
  •  0
  •   BigBlondeViking    15 年前

    基于埃里克的帮助:我找到了一篇文章 here 答案是:

    Function GetNextIP(text As Variant)
    
    
    Dim ip As String
    Dim ip_addr() As String
    Dim ip_next As String
    ip = text
    
    ip_addr = Split(ip, ".")
    
    
    ip_next = Trim(Str(Val(ip_addr(3) + 1)))
    
    If ip_next = 256 Then
        ip_next = 0
    End If
    
    
    
    GetNextIP = ip_addr(0) & "." & ip_addr(1) & "." & ip_addr(2) & "." & ip_next
    
    
    
    End Function