我正在尝试查找列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宏来完成它。
我正在考虑某种索引匹配在数组中查找但不确定如何应用它。我不知道是否可以做到。祝你好运。
答案 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
我希望它能解决它,
P.S。请记住标记答案最有帮助,作为答案
答案 1 :(得分:2)
好的,所以自从我最初的评论以来我一直在跟踪这个问题,但是没有花时间回答,因为就像Lana B:
我喜欢一个很好的谜题,但如果我不得不一直猜测它并不能很好地利用时间
+1给Lana她对这个问题的耐心和努力。
然而,IP寻址是我经常处理的事情,所以我决定为了自己的利益解决这个问题。此外,没有冒犯,但获得开始的MIN
和结尾的MAX
是错误的。这不会解释IP白名单中的差距。正如我所提到的,这需要15个帮助列,我的结果只是1
或0
分别对应In
或Out
。这是一个截图(每列下面显示的公式):
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
列中设置,您将看到与我的结果相符。