{"text_format":"3","workbook":"xlsx","n_sheets":9,"sheets":["ip-calc","examples","vlookup example","sort example","tool","tool2","IPv6","IPv6 vlookup","history"],"not_rendered":{"macros":1,"comments":2},"read":"whole","date_system":"1900"}

{"sheet":"ip-calc","index":0,"n_rows":17,"n_cols":4,"rows_kept":17}
["IP address with netmask (example : 192.168.221.37/29 or 192.168.221.37 255.255.255.248)"]
["172.16.64.0/28"]
[]
["netmask",{"$f":"ipmask(A2)","v":"255.255.255.240"},"wildcard mask",{"$f":"ipwildmask(A2)","v":"0.0.0.15"}]
["subnet size",{"$f":"ipsubnetsize(A2)","v":16}]
["subnet",{"$f":"ipand(ipwithoutmask(A2),B4)","v":"172.16.64.0"}]
["1st address",{"$f":"ipadd(B6,1)","v":"172.16.64.1"}]
["last address",{"$f":"ipadd(B6,B5-2)","v":"172.16.64.14"}]
["broadcast",{"$f":"ipadd(B6,B5-1)","v":"172.16.64.15"}]
[]
[]
[]
["Copyright 2010-2023 Thomas Rohmer-Kretz"]
["The source code included in this document is distributed under the terms of the GNU General Public License"]
["http://trk.free.fr/ipcalc/"]
[]
["Press Alt-F11 to open source code editor"]

{"sheet":"examples","index":1,"n_rows":31,"n_cols":6,"rows_kept":31}
["IPv4 functions"]
["functions","parameter1","parameter2","result","comment"]
["IpAdd","192.168.1.1",1,{"$f":"ipadd(B3,C3)","v":"192.168.1.2"},"add an integer to an IP"]
["IpAdd","192.168.1.1",-2,{"$f":"ipadd(B4,C4)","v":"192.168.0.255"},"remove an integer from an IP"]
["IpDiff","192.168.2.1","192.168.1.1",{"$f":"ipdiff(B5,C5)","v":256},"difference between to IP"]
["IpAnd","192.168.2.1","255.255.255.0",{"$f":"ipand(B6,C6)","v":"192.168.2.0"},"logical AND"]
["IpMask","192.168.1.0/24",null,{"$f":"ipmask(B7)","v":"255.255.255.0"},"Mask"]
["IpWildMask","192.168.1.0/24",null,{"$f":"ipwildmask(B8)","v":"0.0.0.255"},"Mask à la Cisco"]
["IpIsPrivate","192.168.1.1",null,{"$f":"ipisprivate(B9)","v":true},"Is the IP public or private"]
["IpIsInSubnet","192.168.1.1","192.168.0.0/24",{"$f":"ipisinsubnet(B10,C10)","v":false},"Is an IP in a subnet"]
["IpIsInSubnet","192.168.0.5","192.168.0.0/24",{"$f":"ipisinsubnet(B11,C11)","v":true},"Is an IP in a subnet"]
["IpIsInSubnet","192.168.0.5","192.168.0.0 255.255.255.0",{"$f":"ipisinsubnet(B12,C12)","v":true},"Is an IP in a subnet"]
["IpSubnetIsInSubnet","192.168.0.128/25","192.168.0.0/24",{"$f":"ipsubnetisinsubnet(B13,C13)","v":true},"Is a subnet included in another subnet"]
["IpSubnetIsInSubnet","192.168.0.128 255.255.255.128","192.168.0.0 255.255.255.0",{"$f":"ipsubnetisinsubnet(B14,C14)","v":true},"Is a subnet included in another subnet"]
["IpSubnetIsInSubnet","192.168.0.128/25","192.168.0.0/25",{"$f":"ipsubnetisinsubnet(B15,C15)","v":false},"Is a subnet included in another subnet"]
["IpMaskLen","255.255.254.0",null,{"$f":"IpMaskLen(B16)","v":23},"length of a subnet mask"]
["IpWithoutMask","192.168.0.128/25",null,{"$f":"ipwithoutmask(B17)","v":"192.168.0.128"},"remove the mask"]
["IpStrToBin","192.168.1.1",null,{"$f":"IpStrToBin(B18)","v":3232235777},"get the binary value of an IP"]
["IpBinToStr",3232235777,null,{"$f":"IpBinToStr(B19)","v":"192.168.1.1"},"get an IP from its binary value"]
["IpGetByte","192.168.2.1",1,{"$f":"IpGetByte(B20,C20)","v":192}]
["IpSubnetLen","192.168.1.0/24",null,{"$f":"ipsubnetlen(B21)","v":24}]
["IpSubnetLen","192.168.1.0 255.255.255.0",null,{"$f":"ipsubnetlen(B22)","v":24}]
["IpInvertMask","0.0.0.255",null,{"$f":"IpInvertMask(B23)","v":"255.255.255.0"}]
["IpIsValid","192.168.1.1",null,{"$f":"IpIsValid(B24)","v":true}]
["IpClearHostBits","192.168.1.255/25",null,{"$f":"IpClearHostBits(B25)","v":"192.168.1.128/25"}]
[]
["functions","parameter1","parameter2","parameter3","result","comment"]
["IpSetByte","192.168.2.1",4,55,{"$f":"IpSetByte(B28,C28,D28)","v":"192.168.2.55"},"Change one byte in an IP address"]
["IpDivideSubnet","192.168.0.0/23",1,0,{"$f":"IpDivideSubnet(B29,C29,D29)","v":"192.168.0.0/24"}]
["IpDivideSubnet","192.168.0.0/23",1,1,{"$f":"IpDivideSubnet(B30,C30,D30)","v":"192.168.1.0/24"}]
[{"$nulls":3},""]

{"sheet":"vlookup example","index":2,"n_rows":151,"n_cols":4,"rows_kept":151}
["Example 1 : search an IP in a list of subnets"]
["If you have large lists of sorted and non overlapping subnets, use the \"fast\" option in IpSubnetMatch and IpSubnetVlookup"]
["my list of subnets and cities"]
["192.168.0.0/25","Paris"]
["192.168.0.128/25","Rennes"]
["192.168.1.0/26","Bordeaux"]
["192.168.1.0/27","Pessac"]
["0.0.0.0/0","???"]
[]
["IP to search :","192.168.1.30"]
["results :","City",{"$f":"IpSubnetVLookup(B10,$A$4:$B$8,2)","v":"Pessac"}]
[null,"IP found in row",{"$f":"IpSubnetMatch(B10,$A$4:$B$8)","v":4}]
[]
["Example 2 : find if a subnet is included in one of the subnets from the list"]
[]
["Subnet to search","192.168.0.192/26"]
["result","City",{"$f":"IpSubnetVLookup(B16,$A$4:$B$8,2)","v":"Rennes"}]
[null,"IP found in row",{"$f":"IpSubnetMatch(B16,$A$4:$B$8)","v":2}]
[]
["Example 3 : large lists"]
["For lists over 1000 networks, it is recommanded to sort the list first and then use fast mode in vlookup"]
[]
["list in random order","same list sorted","a list of @ to lookup","lookup in fast mode on the sorted list"]
["10.0.0.0/21",{"$f":"IpSubnetSortArray(A24:A120)","v":"10.0.0.0/21"},"10.0.112.4",{"$f":"IpSubnetVLookup(C24,_xlfn.ANCHORARRAY($B$24),1,TRUE)","v":"10.0.112.0/21"}]
["10.0.8.0/22","10.0.8.0/22","10.0.126.16/32",{"$f":"IpSubnetVLookup(C25,_xlfn.ANCHORARRAY($B$24),1,TRUE)","v":"10.0.126.0/23"}]
["10.0.12.0/23","10.0.12.0/23","10.0.72.4","Not Found"]
["10.0.15.0/24","10.0.15.0/24","10.0.74.5","10.0.74.0/23"]
["10.0.17.0/24","10.0.17.0/24","10.0.25.0","Not Found"]
["10.0.18.0/23","10.0.18.0/23","10.0.235.0","Not Found"]
["10.0.20.0/24","10.0.20.0/24","10.0.154.5","Not Found"]
["10.0.22.0/24","10.0.22.0/24","10.0.145.0","10.0.144.0/23"]
["10.0.24.0/24","10.0.24.0/24","10.0.70.3","Not Found"]
["10.0.26.0/23","10.0.26.0/23","10.0.155.0","10.0.155.0/24"]
["10.0.28.0/24","10.0.28.0/24","10.0.223.0/28","Not Found"]
["10.0.30.0/24","10.0.30.0/24","10.0.103.0/28","10.0.100.0/22"]
["10.0.32.0/22","10.0.32.0/22","10.0.177.128","Not Found"]
["10.0.37.0/24","10.0.37.0/24","10.0.89.1","10.0.88.0/22"]
["10.0.38.0/23","10.0.38.0/23","10.0.87.128","10.0.87.0/24"]
["10.0.41.0/24","10.0.41.0/24","10.0.229.1","10.0.228.0/22"]
["10.0.42.0/23","10.0.42.0/23","10.0.162.4","10.0.162.0/23"]
["10.0.44.0/23","10.0.44.0/23","10.0.49.1","10.0.48.0/23"]
["10.0.47.0/24","10.0.47.0/24","10.0.249.1","Not Found"]
["10.0.48.0/23","10.0.48.0/23","10.0.56.16/32","10.0.56.0/24"]
["10.0.50.0/24","10.0.50.0/24","10.0.168.100","10.0.168.0/24"]
["10.0.54.0/23","10.0.54.0/23","10.0.165.0","10.0.164.0/23"]
["10.0.56.0/24","10.0.56.0/24","10.0.201.7","Not Found"]
["10.0.59.0/24","10.0.59.0/24","10.0.209.1","Not Found"]
["10.0.61.0/24","10.0.61.0/24","10.0.224.5","10.0.224.0/23"]
["10.0.62.0/23","10.0.62.0/23","10.0.86.16/32","Not Found"]
["10.0.64.0/22","10.0.64.0/22","10.0.210.3","10.0.210.0/24"]
["10.0.68.0/23","10.0.68.0/23","10.0.124.5","Not Found"]
["10.0.73.0/24","10.0.73.0/24","10.0.21.7","Not Found"]
["10.0.74.0/23","10.0.74.0/23","10.0.120.3","10.0.120.0/24"]
["10.0.76.0/24","10.0.76.0/24","10.0.111.7","10.0.111.0/24"]
["10.0.81.0/24","10.0.81.0/24","10.0.109.1","Not Found"]
["10.0.82.0/23","10.0.82.0/23","10.0.81.7","10.0.81.0/24"]
["10.0.85.0/24","10.0.85.0/24","10.0.97.128","10.0.97.0/24"]
["10.0.87.0/24","10.0.87.0/24","10.0.105.0","10.0.104.0/22"]
["10.0.88.0/22","10.0.88.0/22","10.0.191.7","10.0.184.0/21"]
["10.0.94.0/23","10.0.94.0/23","10.0.77.128","Not Found"]
["10.0.97.0/24","10.0.97.0/24","10.0.62.4","10.0.62.0/23"]
["10.0.99.0/24","10.0.99.0/24","10.0.92.4","Not Found"]
["10.0.100.0/22","10.0.100.0/22","10.0.221.7","10.0.220.0/23"]
["10.0.104.0/22","10.0.104.0/22","10.0.236.16/32","10.0.236.0/24"]
["10.0.108.0/24","10.0.108.0/24","10.0.40.3","Not Found"]
["10.0.111.0/24","10.0.111.0/24","10.0.12.4","10.0.12.0/23"]
["10.0.112.0/21","10.0.112.0/21","10.0.23.0/28","Not Found"]
["10.0.120.0/24","10.0.120.0/24","10.0.52.4","Not Found"]
["10.0.122.0/23","10.0.122.0/23","10.0.59.1","10.0.59.0/24"]
["10.0.125.0/24","10.0.125.0/24","10.0.18.100","10.0.18.0/23"]
["10.0.126.0/23","10.0.126.0/23","10.0.108.100","10.0.108.0/24"]
["10.0.129.0/24","10.0.129.0/24","10.0.107.128","10.0.104.0/22"]
["10.0.130.0/24","10.0.130.0/24","10.0.166.16/32","Not Found"]
["10.0.132.0/22","10.0.132.0/22","10.0.152.4","10.0.152.0/23"]
["10.0.136.0/23","10.0.136.0/23","10.0.63.0/28","10.0.62.0/23"]
["10.0.138.0/24","10.0.138.0/24","10.0.216.16/32","Not Found"]
["10.0.140.0/23","10.0.140.0/23","10.0.239.1","10.0.238.0/23"]
["10.0.143.0/24","10.0.143.0/24","10.0.3.0/28","10.0.0.0/21"]
["10.0.144.0/23","10.0.144.0/23","10.0.183.0/28","10.0.182.0/23"]
["10.0.147.0/24","10.0.147.0/24","10.0.47.128","10.0.47.0/24"]
["10.0.148.0/22","10.0.148.0/22","10.0.139.1","Not Found"]
["10.0.152.0/23","10.0.152.0/23","10.0.190.3","10.0.184.0/21"]
["10.0.155.0/24","10.0.155.0/24","10.0.174.5","Not Found"]
["10.0.156.0/24","10.0.156.0/24","10.0.125.0","10.0.125.0/24"]
["10.0.158.0/23","10.0.158.0/23","10.0.128.100","Not Found"]
["10.0.160.0/24","10.0.160.0/24","10.0.14.5","Not Found"]
["10.0.162.0/23","10.0.162.0/23","10.0.230.3","10.0.228.0/22"]
["10.0.164.0/23","10.0.164.0/23","10.0.184.5","10.0.184.0/21"]
["10.0.167.0/24","10.0.167.0/24","10.0.96.16/32",{"$f":"IpSubnetVLookup(C89,_xlfn.ANCHORARRAY($B$24),1,TRUE)","v":"Not Found"}]
["10.0.168.0/24","10.0.168.0/24","10.0.31.7","Not Found"]
["10.0.170.0/23","10.0.170.0/23","10.0.58.100","Not Found"]
["10.0.172.0/23","10.0.172.0/23","10.0.2.4","10.0.0.0/21"]
["10.0.175.0/24","10.0.175.0/24","10.0.255.0","10.0.254.0/23"]
["10.0.178.0/23","10.0.178.0/23","10.0.46.16/32","Not Found"]
["10.0.182.0/23","10.0.182.0/23","10.0.207.128","10.0.204.0/22"]
["10.0.184.0/21","10.0.184.0/21","10.0.1.7","10.0.0.0/21"]
["10.0.192.0/21","10.0.192.0/21","10.0.7.128","10.0.0.0/21"]
["10.0.200.0/24","10.0.200.0/24","10.0.122.4","10.0.122.0/23"]
["10.0.203.0/24","10.0.203.0/24","10.0.200.3","10.0.200.0/24"]
["10.0.204.0/22","10.0.204.0/22","10.0.43.0/28","10.0.42.0/23"]
["10.0.208.0/24","10.0.208.0/24","10.0.215.0","Not Found"]
["10.0.210.0/24","10.0.210.0/24","10.0.136.16/32","10.0.136.0/23"]
["10.0.212.0/23","10.0.212.0/23","10.0.176.16/32","Not Found"]
["10.0.214.0/24","10.0.214.0/24","10.0.142.4","Not Found"]
["10.0.217.0/24","10.0.217.0/24","10.0.110.3","Not Found"]
["10.0.218.0/24","10.0.218.0/24","10.0.202.4","Not Found"]
["10.0.220.0/23","10.0.220.0/23","10.0.214.5","10.0.214.0/24"]
["10.0.222.0/24","10.0.222.0/24","10.0.178.100","10.0.178.0/23"]
["10.0.224.0/23","10.0.224.0/23","10.0.60.3","Not Found"]
["10.0.227.0/24","10.0.227.0/24","10.0.243.0/28","Not Found"]
["10.0.228.0/22","10.0.228.0/22","10.0.211.7","Not Found"]
["10.0.232.0/23","10.0.232.0/23","10.0.172.4","10.0.172.0/23"]
["10.0.234.0/24","10.0.234.0/24","10.0.95.0","10.0.94.0/23"]
["10.0.236.0/24","10.0.236.0/24","10.0.79.1","Not Found"]
["10.0.238.0/23","10.0.238.0/23","10.0.237.128","Not Found"]
["10.0.240.0/23","10.0.240.0/23","10.0.169.1","Not Found"]
["10.0.244.0/22","10.0.244.0/22","10.0.146.16/32","Not Found"]
["10.0.250.0/23","10.0.250.0/23","10.0.34.5","10.0.32.0/22"]
["10.0.253.0/24","10.0.253.0/24","10.0.51.7","Not Found"]
["10.0.254.0/23","10.0.254.0/23","10.0.29.1","Not Found"]
[null,null,"10.0.137.128","10.0.136.0/23"]
[null,null,"10.0.228.100","10.0.228.0/22"]
[null,null,"10.0.131.7","Not Found"]
[null,null,"10.0.88.100","10.0.88.0/22"]
[null,null,"10.0.98.100","Not Found"]
[null,null,"10.0.240.3","10.0.240.0/23"]
[null,null,"10.0.181.7","Not Found"]
[null,null,"10.0.180.3","Not Found"]
[null,null,"10.0.157.128","Not Found"]
[null,null,"10.0.78.100","Not Found"]
[null,null,"10.0.248.100","Not Found"]
[null,null,"10.0.65.0","10.0.64.0/22"]
[null,null,"10.0.82.4","10.0.82.0/23"]
[null,null,"10.0.219.1","Not Found"]
[null,null,"10.0.6.16/32","10.0.0.0/21"]
[null,null,"10.0.242.4","Not Found"]
[null,null,"10.0.16.16/32","Not Found"]
[null,null,"10.0.57.128","Not Found"]
[null,null,"10.0.134.5","10.0.132.0/22"]
[null,null,"10.0.64.5","10.0.64.0/22"]
[null,null,"10.0.36.16/32","Not Found"]
[null,null,"10.0.53.0/28","Not Found"]
[null,null,"10.0.161.7","Not Found"]
[null,null,"10.0.252.4","Not Found"]
[null,null,"10.0.121.7","Not Found"]
[null,null,"10.0.69.1","10.0.68.0/23"]
[null,null,"10.0.84.5","Not Found"]
[null,null,"10.0.80.3","Not Found"]
[null,null,"10.0.226.16/32","Not Found"]
[null,null,"10.0.93.0/28","Not Found"]
[null,null,"10.0.71.7","Not Found"]

{"sheet":"sort example","index":3,"n_rows":55,"n_cols":2,"rows_kept":55}
["How to sort a list of IP"]
["1st method"]
["use the function IpStrToBin() in the next column, then sort the table using this column"]
[]
["192.168.1.11",{"$f":"IpStrToBin(A5)","v":3232235787}]
["192.168.2.2",{"$f":"IpStrToBin(A6)","v":3232236034}]
["192.168.1.3",{"$f":"IpStrToBin(A7)","v":3232235779}]
["192.168.1.4",{"$f":"IpStrToBin(A8)","v":3232235780}]
["192.168.100.5",{"$f":"IpStrToBin(A9)","v":3232261125}]
["192.168.1.6",{"$f":"IpStrToBin(A10)","v":3232235782}]
["192.168.1.77",{"$f":"IpStrToBin(A11)","v":3232235853}]
["192.168.1.8",{"$f":"IpStrToBin(A12)","v":3232235784}]
["192.168.1.9",{"$f":"IpStrToBin(A13)","v":3232235785}]
["192.168.1.10",{"$f":"IpStrToBin(A14)","v":3232235786}]
[]
["2nd method using array formulas"]
["the table on the right contains one single formula that sorts the table on the left"]
[]
["192.168.1.11",{"$f":"IpSortArray(A19:A28)","v":"192.168.1.2"}]
["192.168.1.2","192.168.1.3"]
["192.168.1.4","192.168.1.4"]
["192.168.1.3","192.168.1.6"]
["192.168.100.5","192.168.1.8"]
["192.168.1.6","192.168.1.9"]
["192.168.1.77","192.168.1.10"]
["192.168.1.8","192.168.1.11"]
["192.168.1.9","192.168.1.77"]
["192.168.1.10","192.168.100.5"]
[]
["How to enter an array formula? (old version of Excel only)"]
["select a range of empty cells"]
["type the formula, in this case, the formula should refer to cell range of the same size"]
["press Ctrl+Shift+Enter instead of Enter"]
["to modify an array formula, select one of the cells then press Ctrl+/ to automatically select the cell range"]
["then modify the formula and press Ctrl+Shift+Enter"]
[]
["Subnets sort"]
["192.168.10.0/24",{"$f":"IpSubnetSortArray(A38:A42)","v":"192.168.1.0/24"}]
["192.168.2.0/24","192.168.1.0/25"]
["192.168.10.128/25","192.168.2.0/24"]
["192.168.1.0/25","192.168.10.0/24"]
["192.168.1.0/24","192.168.10.128/25"]
[]
[]
["Subnet sort and join"]
["192.168.10.0/24",{"$f":"IpSubnetAggregateArray(A46:A55)","v":"192.168.1.0/25"}]
["192.168.2.0/24","192.168.2.0/23"]
["192.168.10.128/25","192.168.10.0/24"]
["192.168.1.0/25"]
["192.168.3.0/24"]
["192.168.10.0/24"]
["192.168.2.0/24"]
["192.168.10.128/25"]
["192.168.1.0/25"]
["192.168.2.0/24"]

{"sheet":"tool","index":4,"n_rows":100,"n_cols":11,"rows_kept":100}
["Sort IP",null,null,"Find overlapping subnets",null,null,"Sort and Summarize subnets",null,null,"Sort and Summarize routes"]
["IP list","result",null,"copy your subnet list below","subnet on the left is included in",null,"copy your subnet list below","result",null,"copy your route list below","result"]
["192.168.1.11",{"$f":"IpSortArray(A3:A100)","v":"192.168.1.2"},null,"192.168.0.0/24",{"$f":"IpFindOverlappingSubnets(D3:D100)","v":""},null,"192.168.0.0/24",{"$f":"IpSubnetAggregateArray(G3:G100)","v":"192.168.0.0/24"},null,"10.0.0.0 255.255.255.0 my.next.hop.1",{"$f":"IpRouteAggregateArray(J3:J100)","v":"10.0.0.0 255.255.254.0 my.next.hop.1"}]
["192.168.1.2","192.168.1.3",null,"192.168.0.128/25","192.168.0.0/24",null,"192.168.0.128/25","192.168.1.0/25",null,"10.0.1.4 255.255.255.0 my.next.hop.1","10.0.1.0/24 next hop 2"]
["192.168.1.3","192.168.1.4",null,"192.168.1.0/26","",null,"192.168.1.0/26","192.168.2.0 255.255.255.0",null,"10.0.1.0/24 next hop 2","10.0.2.0/23 next hop 2"]
["192.168.1.4","192.168.1.6",null,"192.168.1.64/26","",null,"192.168.1.64/26",null,null,"10.0.2.0/24 next hop 2","10.0.4.0/24 next hop 2"]
["192.168.100.5","192.168.1.8",null,"192.168.2.0 255.255.255.0","",null,"192.168.2.0 255.255.255.0",null,null,"10.0.3.0/24 next hop 2","10.0.10.0/24 one route"]
["192.168.1.6","192.168.1.9",null,"192.168.2.0/25","192.168.2.0 255.255.255.0",null,"192.168.2.0/25",null,null,"10.0.4.1/24 next hop 2","10.0.11.0/24 different route, can't summarize"]
["192.168.1.77","192.168.1.10",null,null,0,{"$nulls":4},"10.0.4.128 255.255.255.128 next hop 2"]
["192.168.1.8","192.168.1.11",null,null,0,{"$nulls":4},"10.0.10.0/24 one route"]
["192.168.1.9","192.168.1.77",null,null,0,{"$nulls":4},"10.0.11.0/24 different route, can't summarize"]
["192.168.1.10","192.168.100.5",null,null,0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]
[{"$nulls":4},0]

{"sheet":"tool2","index":5,"n_rows":11,"n_cols":13,"rows_kept":11}
["IP range to subnets",null,null,"Subtract subnets",{"$nulls":3},"Common subnets",{"$nulls":3},"Split network"]
["First address","10.0.1.1",null,"Assigned subnets","Used subnets","Unused subnets",null,"list 1","list 2","intersection",null,"network","192.168.0.0/24"]
["Last address","10.0.4.255",null,"10.10.0.0/22","10.10.0.0/24",{"$f":"IpSubtractSubnets(D3:D102,E3:E102,1)","v":"10.10.1.0/24"},null,"10.10.0.0/24","10.10.0.0/22",{"$f":"IpCommonSubnets(H3:H102,I3:I102)","v":"10.10.0.0/24"},null,"length offset",3]
["result",{"$f":"IpRangeToCIDR(B2,B3)","v":"10.0.1.0/24"},null,"192.168.0.0/22","192.168.0.128/25","10.10.2.0/23",null,"192.168.0.0/22","192.168.0.128/25","192.168.0.128/25",null,null,{"$f":"IpDivideSubnet(M2,M3)","v":"192.168.0.0/27"}]
[null,"10.0.2.0/23",null,"20.20.0.0/16","192.168.1.0/24","20.20.0.0/16",null,"20.20.0.0/16","30.30.1.0/24",{"$nulls":3},"192.168.0.32/27"]
[null,"10.0.4.0/24",null,"20.20.0.0/16",null,"192.168.0.0/25",null,"20.20.0.0/16",{"$nulls":4},"192.168.0.64/27"]
[{"$nulls":5},"192.168.2.0/23",{"$nulls":6},"192.168.0.96/27"]
[{"$nulls":12},"192.168.0.128/27"]
[{"$nulls":12},"192.168.0.160/27"]
[{"$nulls":12},"192.168.0.192/27"]
[{"$nulls":12},"192.168.0.224/27"]

{"sheet":"IPv6","index":6,"n_rows":27,"n_cols":5,"rows_kept":27}
["IPv6 functions"]
["function","parameter1","parameter2","result"]
["Ipv6Expand","2001:db8:1f89:c5a3::ac1f:8002",null,{"$f":"Ipv6Expand(B3)","v":"2001:0db8:1f89:c5a3:0000:0000:ac1f:8002"}]
["Ipv6Expand","::",null,{"$f":"Ipv6Expand(B4)","v":"0000:0000:0000:0000:0000:0000:0000:0000"}]
["Ipv6Compress","0:0:1:0:0:2:2:2",null,{"$f":"Ipv6Compress(B5)","v":"0:0:1::2:2:2"}]
["Ipv6MaskLen","2001:db8:1:1a0::/59",null,{"$f":"Ipv6MaskLen(B6)","v":59}]
["Ipv6WithoutMask","2001:db8:1:1a0::/59",null,{"$f":"Ipv6WithoutMask(B7)","v":"2001:db8:1:1a0::"}]
["Ipv6IsInSubnet","2001:db8:1:1a0::1","2001:db8:1::/48",{"$f":"Ipv6IsInSubnet(B8,C8)","v":true}]
["Ipv6IsInSubnet","2001:db8:2:1a0::1","2001:db8:1::/48",{"$f":"Ipv6IsInSubnet(B9,C9)","v":false}]
["Ipv6ToBin","2001:db8:2:1a0::1",null,{"$f":"Ipv6ToBin(B10)","v":"00100000000000010000110110111000000000000000001000000001101000000000000000000000000000000000000000000000000000000000000000000001"}]
["Ipv6AddInt","2001:db8:2:1a0::1",-1,{"$f":"Ipv6AddInt(B11,C11)","v":"2001:db8:2:1a0::"}]
["Ipv6AddInt","2001:db8:2:1a0::1",32,{"$f":"Ipv6AddInt(B12,C12)","v":"2001:db8:2:1a0::21"}]
["Ipv6Add","2001:db8:1:1a0::","::2:3",{"$f":"Ipv6Add(B13,C13)","v":"2001:db8:1:1a0::2:3"}]
["Ipv6Add","2001:db8:1:1a0::100","::2:3",{"$f":"Ipv6Add(B14,C14)","v":"2001:db8:1:1a0::2:103"}]
["Ipv6GetBlock","2001:db8:1f89:c5a3::ac1f:8001",2,{"$f":"Ipv6GetBlock(B15,C15)","v":"0db8"}]
["Ipv6GetBlockInt","2001:db8:1f89:c5a3::ac1f:8001",2,{"$f":"Ipv6GetBlockInt(B16,C16)","v":3512}]
["Ipv6GetIpv4","2001:c0a8:102::",2,{"$f":"Ipv6GetIpv4(B17,C17)","v":"192.168.1.2"}]
["Ipv6FromBin","00100000000000010000110110111000000000000000001000000001101000000000000000000000000000000000000000000000000000000000000000000001",null,{"$f":"Ipv6FromBin(B18)","v":"2001:db8:2:1a0::1"}]
["Ipv6SubnetFirstAddress","2001:db8:1:1a0::/59",null,{"$f":"Ipv6SubnetFirstAddress(B19)","v":"2001:db8:1:1a0::"}]
["Ipv6SubnetLastAddress","2001:db8:1:1a0::/59",null,{"$f":"Ipv6SubnetLastAddress(B20)","v":"2001:db8:1:1bf:ffff:ffff:ffff:ffff"}]
["Ipv6IsValid","2001:db8:2:1a0::1",null,{"$f":"Ipv6IsValid(B21)","v":true}]
[]
["function","parameter1","parameter2","parameter3","result"]
["Ipv6SetBlock","::",5,"2Aa",{"$f":"Ipv6SetBlock(B24,C24,D24)","v":"::2aa:0:0:0"}]
["Ipv6SetBlockInt","::",2,256,{"$f":"Ipv6SetBlockInt(B25,C25,D25)","v":"0:100::"}]
["Ipv6SetIpv4","2002::",2,"192.168.1.2",{"$f":"Ipv6SetIpv4(B26,C26,D26)","v":"2002:c0a8:102::"}]
["Ipv6SetBits","2002::","0100",17,{"$f":"Ipv6SetBits(B27,C27,D27)","v":"2002:4000::"}]

{"sheet":"IPv6 vlookup","index":7,"n_rows":12,"n_cols":3,"rows_kept":12}
["Example 1 : search an IP or subnet in a list of subnets"]
["If you have large lists of sorted and non overlapping subnets, use the \"fast\" option in Ipv6Match and Ipv6Vlookup"]
["my list of subnets and cities"]
["2001:db8:1::/48","Paris"]
["2001:db8:2::/48","Rennes"]
["2001:db8:3::/48","Bordeaux"]
["2001:db8:3:8000::/49","Pessac"]
["::/0","???"]
[]
["IP to search :","2001:db8:3:8001::/64"]
["results :","City",{"$f":"Ipv6VLookup(B10,$A$4:$B$8,2)","v":"Pessac"}]
[null,"IP found in row",{"$f":"Ipv6Match(B10,$A$4:$B$8)","v":4}]

{"sheet":"history","index":8,"n_rows":15,"n_cols":2,"rows_kept":15}
["Date","Changelog"]
["2016-01-20","Added descending sort in IpSortArray\nAdded function IpSubnetSortArray"]
["2016-02-01","code rewriting\nBug fixes\nAdded functions :\nIpv6GetBlock, Ipv6GetBlockInt, Ipv6SetBlock, Ipv6SetBlockInt, Ipv6GetIpv4, Ipv6SetIpv4"]
["2016-03-29","Added function IpSubnetSortJoinArray\nIpSubnetVLookup new tries to return the smallest subnet and not only the first matching subnet\nMost functions now accept both subnet formats (i.e. prefix lenght /xx or mask)"]
["2016-07-11","Added function IpInvertMask\nAdded Ipv6SubnetFirstAddress and Ipv6SubnetLastAddress\nAdded Ipv6FromBin and Ipv6SetBits\nAdded IpIsValid"]
["2016-08-22","IpSubnetVLookup now handles multiple selections as the range input parameter"]
["2016-10-30","Added function :\nIpDivideSubnet"]
["2016-12-12","Added function : IpClearHostBits\nfunction changed : IpSubnetSortJoinArray clears the host bits of each subnet in the result"]
["2017-02-11","Added IpRangeToCIDR"]
["2017-06-05","Code refactoring on IpSubnetVLookup and IpSubnetMatch:\n- now can search an IP or a subnet, so IpSubnetInSubnetVLookup and IpSubnetInSubnetMatch are removed\n- speed optimization on previous search mode (best match mode)\n- now have an additional \"fast\" parameter : can be used to perform a dichotomic search in a list of sorted and non overlapping subnets.\nAdded IpSubtractSubnets.\nIpIsInSubnet and IpSubnetIsInSubnet optimization.\nAdded IpSubnetToBin, IpComp, IpSubnetParse"]
["2019-10-03","Added Ipv6IsValid, Ipv6SubnetIsInSubnet, Ipv6Match, Ipv6VLookup\nIpv6ToBin optimization"]
["2023-01-06","IpSubnetSortJoinArray has been removed because the algorithm was faulty for route aggregation. It is replaced by IpSubnetAggregateArray and IpRouteAggregateArray"]
["2023-03-15","Major rewriting of functions which take array arguments\nSort and aggregates functions have been optimized with the use of quick sort algorithm\nRemoved limitation to 32767 elements in functions working on arrays"]
["2023-05-01","IpDivideSubnet can return the full list of network and not only one item\nWorkaround for LibreOffice bugs in SubtractSubnets and Ipv6SetBits"]
["2023-06-25","Added optional descending parameter to Sort and Aggregate functions"]