Excel查找多个范围内的IP地址

时间:2017-02-13 05:19:28

标签: arrays excel-formula match

我正在尝试查找列A的公式,该公式将检查列B中的IP地址,并查找它是否属于另外两列中的2个地址(或之间){{ 1}}和C

E.G。

D

这应该代表一个Excel表,其中4列为标题,7行为例。 我可以用

进行横向检查
     A           B             C             D
+---------+-------------+-------------+------------+
| valid?  | address     | start       | end        |
+---------+-------------+-------------+------------+
| yes     | 10.1.1.5    | 10.1.1.0    | 10.1.1.31  |
| Yes     | 10.1.3.13   | 10.1.2.16   | 10.1.2.31  |
| no      | 10.1.2.7    | 10.1.1.128  | 10.1.1.223 |
| no      | 10.1.1.62   | 10.1.3.0    | 10.1.3.127 |
| yes     | 10.1.1.9    | 10.1.4.0    | 10.1.4.255 |
| no      | 10.1.1.50   | …           | …          |
| yes     | 10.1.1.200  |             |            |
+---------+-------------+-------------+------------+

仅检查1个地址与其旁边的范围。 我需要能够针对所有范围检查1个IP地址的内容。即第1行至第100行。

这是检查路由的访问列表规则,看看我是否可以消除冗余规则......但如果我可以继续使用它还有其他用途。 为了使它更加特殊,我不能使用VBA宏来完成它。

我正在考虑某种索引匹配在数组中查找但不确定如何应用它。我不知道是否可以做到。祝你好运。

2 个答案:

答案 0 :(得分:3)

您需要帮助列。

如图所示整理您的数据,请参阅。 用逗号分隔地址,开始和结束列(功能区菜单Data => Text To Columns) 在开始/结束部分上方,计算所有分割文本部分的MIN FOR START和MAX FOR END(即MIN(K5:K1000)。

公式:

VALIDITY公式 - 复制到单元格D5,然后向下拖动:

>> scons --version      
SCons by Steven Knight et al.:
    script: v2.5.1.rel_2.5.1:3735:9dc6cee5c168[MODIFIED], 2016/11/03 14:02:02, by bdbaddog on mongodog
    engine: v2.5.1.rel_2.5.1:3735:9dc6cee5c168[MODIFIED], 2016/11/03 14:02:02, by bdbaddog on mongodog
    engine path: ['/usr/lib/scons/SCons']
Copyright (c) 2001 - 2016 The SCons Foundation

>> tree                 
.
├── bar.cpp
├── foo.cpp
└── SConstruct

0 directories, 3 files

>> cat bar.cpp
void bar() {}

>> cat foo.cpp
void foo() {}

>> cat SConstruct 
CacheDir('cache')
SharedLibrary('foo.cpp', SHLIBVERSION='1.0.0')
SharedLibrary('bar.cpp', SHLIBVERSION='1.0.0', LIBS=['foo'], LIBPATH=['.'])

>> scons --cache-debug=-
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
CacheRetrieve(bar.os):  f51aa60a1d1f47f50a872599e2d0039c not in cache
g++ -o bar.os -c -fPIC bar.cpp
CachePush(bar.os):  pushing to f51aa60a1d1f47f50a872599e2d0039c
CacheRetrieve(foo.os):  77ed043971b55f5e85a799d399e1e01a not in cache
g++ -o foo.os -c -fPIC foo.cpp
CachePush(foo.os):  pushing to 77ed043971b55f5e85a799d399e1e01a
CacheRetrieve(libfoo.so.1.0.0):  9d28d253e1e1adfb32090d08cd7cef90 not in cache
g++ -o libfoo.so.1.0.0 -shared -Wl,-Bsymbolic -Wl,-soname=libfoo.so.1 foo.os
Create symlinks for: 'libfoo.so.1.0.0': 'libfoo.so.1'->'libfoo.so.1.0.0', 'libfoo.so'->'libfoo.so.1.0.0'
CachePush(libfoo.so.1.0.0):  pushing to 9d28d253e1e1adfb32090d08cd7cef90
CacheRetrieve(libbar.so.1.0.0):  4cd497b57418be29d85006d10e13e5e8 not in cache
g++ -o libbar.so.1.0.0 -shared -Wl,-Bsymbolic -Wl,-soname=libbar.so.1 bar.os -L. -lfoo
Create symlinks for: 'libbar.so.1.0.0': 'libbar.so.1'->'libbar.so.1.0.0', 'libbar.so'->'libbar.so.1.0.0'
CachePush(libbar.so.1.0.0):  pushing to 4cd497b57418be29d85006d10e13e5e8
scons: done building targets.

>> tree
.
├── bar.cpp
├── bar.os
├── cache
│   ├── 4C
│   │   └── 4cd497b57418be29d85006d10e13e5e8
│   ├── 77
│   │   └── 77ed043971b55f5e85a799d399e1e01a
│   ├── 9D
│   │   └── 9d28d253e1e1adfb32090d08cd7cef90
│   ├── config
│   └── F5
│       └── f51aa60a1d1f47f50a872599e2d0039c
├── foo.cpp
├── foo.os
├── libbar.so -> libbar.so.1.0.0
├── libbar.so.1 -> libbar.so.1.0.0
├── libbar.so.1.0.0
├── libfoo.so -> libfoo.so.1.0.0
├── libfoo.so.1 -> libfoo.so.1.0.0
├── libfoo.so.1.0.0
└── SConstruct

5 directories, 16 files

>> scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed bar.os
Removed foo.os
Removed libfoo.so.1.0.0
Removed libfoo.so
Removed libfoo.so.1
Removed libbar.so.1.0.0
Removed libbar.so
Removed libbar.so.1
scons: done cleaning targets.

>> tree
.
├── bar.cpp
├── cache
│   ├── 4C
│   │   └── 4cd497b57418be29d85006d10e13e5e8
│   ├── 77
│   │   └── 77ed043971b55f5e85a799d399e1e01a
│   ├── 9D
│   │   └── 9d28d253e1e1adfb32090d08cd7cef90
│   ├── config
│   └── F5
│       └── f51aa60a1d1f47f50a872599e2d0039c
├── foo.cpp
└── SConstruct

5 directories, 8 files

>> scons --cache-debug=-
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
Retrieved `bar.os' from cache
CacheRetrieve(bar.os):  retrieving from f51aa60a1d1f47f50a872599e2d0039c
Retrieved `foo.os' from cache
CacheRetrieve(foo.os):  retrieving from 77ed043971b55f5e85a799d399e1e01a
Retrieved `libfoo.so.1.0.0' from cache
CacheRetrieve(libfoo.so.1.0.0):  retrieving from 9d28d253e1e1adfb32090d08cd7cef90
CacheRetrieve(libbar.so.1.0.0):  58ec677dbfc7c655a0cef296b479b485 not in cache
g++ -o libbar.so.1.0.0 -shared -Wl,-Bsymbolic -Wl,-soname=libbar.so.1 bar.os -L. -lfoo
/bin/ld: cannot find -lfoo
collect2: error: ld returned 1 exit status
scons: *** [libbar.so.1.0.0] Error 1
scons: building terminated because of errors.

>> tree
.
├── bar.cpp
├── bar.os
├── cache
│   ├── 4C
│   │   └── 4cd497b57418be29d85006d10e13e5e8
│   ├── 77
│   │   └── 77ed043971b55f5e85a799d399e1e01a
│   ├── 9D
│   │   └── 9d28d253e1e1adfb32090d08cd7cef90
│   ├── config
│   └── F5
│       └── f51aa60a1d1f47f50a872599e2d0039c
├── foo.cpp
├── foo.os
├── libfoo.so.1.0.0
└── SConstruct

5 directories, 11 files

SOLUTION

我希望它能解决它,

P.S。请记住标记答案最有帮助,作为答案

答案 1 :(得分:2)

好的,所以自从我最初的评论以来我一直在跟踪这个问题,但是没有花时间回答,因为就像Lana B:

  

我喜欢一个很好的谜题,但如果我不得不一直猜测它并不能很好地利用时间

+1给Lana她对这个问题的耐心和努力。

然而,IP寻址是我经常处理的事情,所以我决定为了自己的利益解决这个问题。此外,没有冒犯,但获得开始的MIN和结尾的MAX是错误的。这不会解释IP白名单中的差距。正如我所提到的,这需要15个帮助列,我的结果只是10分别对应InOut。这是一个截图(每列下面显示的公式):

Valid IP address worksheet screenshot

F2:J2中的公式为:

=NUMBERVALUE(MID(B2,1,FIND(".",B2)-1))              
=NUMBERVALUE(MID(B2,FIND(".",B2)+1,FIND(".",B2,FIND(".",B2)+1)-1-FIND(".",B2)))         
=NUMBERVALUE(MID(B2,FIND(".",B2,FIND(".",B2)+1)+1,FIND(".",B2,FIND(".",B2,FIND(".",B2)+1)+1)-1-FIND(".",B2,FIND(".",B2)+1)))        
=NUMBERVALUE(MID(B2,FIND(".",B2,FIND(".",B2,FIND(".",B2)+1)+1)+1,LEN(B2)))  
=F2*256^3+G2*256^2+H2*256+I2

是的,我使用的是公式,而不是" Text to Columns"自动化将更多信息添加到生活中的过程。工作表。

L2:P2中的公式相同,但将B2替换为C2

R2:V2中的公式也相同,但将B2替换为D2

X2的公式是

=SUMPRODUCT(--($P$2:$P$8<=J2)*--($V$2:$V$8>=J2))

我还复制了你的原作&#34;有效&#34;在A列中设置,您将看到与我的结果相符。