Excel:仅从1个单元格中查找六位小数

Excel:仅从1个单元格中查找六位小数,excel,Excel,我是Excel的新手。 所以我有一个以六位小数结尾的名字列表。还有一些没有名字的名字。 我的任务是只看到那些带有六位小数的名字。(也许你会以某种方式过滤掉它们) 专栏: BFAXSPOINTDEVBAUHOFLAN2AD BFAXSQLBAUHOFLAN207 BFAXSQLDEVBAUHOFLAN27A BFREPDEVBAUHOFLAN258 BFREPORTINGBAUHOFLAN20B COBALTSEA02900 COBALTSEAVHOST900 DIRECTO8000 DIRECT

我是Excel的新手。 所以我有一个以六位小数结尾的名字列表。还有一些没有名字的名字。 我的任务是只看到那些带有六位小数的名字。(也许你会以某种方式过滤掉它们)

专栏:

BFAXSPOINTDEVBAUHOFLAN2AD
BFAXSQLBAUHOFLAN207
BFAXSQLDEVBAUHOFLAN27A
BFREPDEVBAUHOFLAN258
BFREPORTINGBAUHOFLAN20B
COBALTSEA02900
COBALTSEAVHOST900
DIRECTO8000
DIRECTO9000
DIRECTODCDIRECTOLA009
DYNAMAEBSSISE006
SURVEYEBSSISE006
KVMSRV00",
KVMSRV01",
KVMSRV02",
ASR
CACTI
DBSYNC",
DTV

以此类推……

函数HEX2DEC将帮助您实现所需功能-它尝试将数字转换为十六进制,转换为十进制。如果它不是有效的十六进制输入,则会产生错误

关键是要了解你期望的小数位数是多少——是最后5个字符;最后10名;等等。还请注意,随机文本/数字可能会被视为十六进制,而实际上它并不代表什么[但这是您所提出的问题;仅基于提供的文本,我们所能看到的只是特定单元格是否创建了有效的十六进制]

完整的公式如下所示[假设您的数据以A1开头,并且您的十六进制数预计为6个字符长,这将进入B1并向下复制]:

=ISERROR(HEX2DEC(RIGHT(A1,6)))
这将获取单元格最右边的6个字符,并尝试将其从十六进制转换为十进制。如果失败,它将产生TRUE(因为iSeries错误);如果它成功了,它将生成FALSE

然后只需在您的列上进行筛选,即可查看您关心的结果子集。

考虑以下UDF:


要使字符串以十六进制结尾,最后一个字符必须是十六进制。

“D”是十六进制。这是否意味着,例如,“德国”将成为你想要的清单的一部分?是的,要正确回答,你需要理解十六进制是什么;在你的列表中有很多“有效”的词,我希望你会考虑错误。十六进制是由字符0-9+A-F表示的简单数字。这意味着由这些数字/字母组成的任何字符子集都是“有效的”十六进制。即使限制为6个字符,“十进制”也是有效的十六进制,虽然在英语中boot.justice是一个完全有效的单词,但为了进一步强调数据表中的数据,所有数字数据都是有效的十六进制,这意味着这个“检查”唯一可靠的功能是消除包含高于F的符号/字母的字符串。它有很多误报的机会;对于手动审查,这可能足够了,但应收集关于什么构成“有效”条目的进一步信息。ie:说以“009”结尾的条目是无效的十六进制,因为它们不包含字母,就像说54不是有效数字,因为它不包含数字8或9。
Public Function EndsInHex(r As Range) As Boolean
   Dim s As String, CH As String
   s = r(1).Text
   CH = Right(s, 1)
   If CH Like "[A-F]" Or CH Like "[0-9]" Then
      EndsInHex = True
   Else
      EndsInHex = False
   End If
End Function