ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: jylai

[已解决] 从名字缩写找出相对应名字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-3-20 21:36 | 显示全部楼层
=TOROW(FILTER(H$5:H$11,REGEXTEST(B5,G$5:G$11)))

TA的精华主题

TA的得分主题

发表于 2025-3-20 22:45 | 显示全部楼层
本帖最后由 niko88819 于 2025-3-21 07:46 编辑

C16
  1. =niko(B5:B11,H5:H12,G5:G12)
复制代码
  1. Function niko(dataRange As Range, valueRange As Range, searchRange As Range) As Variant
  2.     Dim result() As Variant
  3.     Dim i As Long, j As Long, k As Long
  4.     Dim splitValues As Variant
  5.     Dim tempList As Object
  6.     Dim dict As Object
  7.     Dim maxColumns As Long
  8.     Set dict = CreateObject("Scripting.Dictionary")
  9.     Set tempList = CreateObject("System.Collections.ArrayList")
  10.     For i = 1 To searchRange.Rows.Count
  11.         dict(searchRange.Cells(i, 1).Value) = valueRange.Cells(i, 1).Value
  12.     Next i
  13.     maxColumns = 1
  14.     Dim tempCounts() As Long
  15.     ReDim tempCounts(1 To dataRange.Rows.Count)
  16.     For i = 1 To dataRange.Rows.Count
  17.         tempList.Clear
  18.         splitValues = Split(dataRange.Cells(i, 1).Value, " ")
  19.         For j = LBound(splitValues) To UBound(splitValues)
  20.             If dict.exists(splitValues(j)) Then
  21.                 tempList.Add dict(splitValues(j))
  22.             End If
  23.         Next j
  24.         tempCounts(i) = tempList.Count
  25.         If tempList.Count > maxColumns Then maxColumns = tempList.Count
  26.     Next i
  27.     ReDim result(1 To dataRange.Rows.Count, 1 To maxColumns)
  28.     For i = 1 To UBound(result, 1)
  29.         For j = 1 To UBound(result, 2)
  30.             result(i, j) = ""
  31.         Next j
  32.     Next i
  33.     For i = 1 To dataRange.Rows.Count
  34.         tempList.Clear
  35.         splitValues = Split(dataRange.Cells(i, 1).Value, " ")
  36.         For j = LBound(splitValues) To UBound(splitValues)
  37.             If dict.exists(splitValues(j)) Then
  38.                 tempList.Add dict(splitValues(j))
  39.             End If
  40.         Next j
  41.         For k = 0 To tempList.Count - 1
  42.             result(i, k + 1) = tempList(k)
  43.         Next k
  44.     Next i
  45.     niko = result
  46. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-3-21 10:40 | 显示全部楼层
本帖最后由 niko88819 于 2025-3-21 10:51 编辑

8跟12楼公式跟代码避免遇到张三,张三丰情况


举例
B11 = RFj to chase
G12 = RFj
H12 = Rick Flair Junior

TA的精华主题

TA的得分主题

发表于 2025-3-21 10:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-3-21 10:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

老师,请看13楼情况

TA的精华主题

TA的得分主题

发表于 2025-3-21 11:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-3-21 22:09 | 显示全部楼层
=TOROW(REGEXEXTRACT(IF(REGEXTEST(B5,$G$5:$G$11,1)*1,$H$5:$H$11,0),"[\D]+",1),3)

TA的精华主题

TA的得分主题

发表于 2025-3-22 09:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 niko88819 于 2025-3-22 09:03 编辑
roserice 发表于 2025-3-21 22:09
=TOROW(REGEXEXTRACT(IF(REGEXTEST(B5,$G$5:$G$11,1)*1,$H$5:$H$11,0),"[\D]+",1),3)

还是有问题呢?请看附件

Book3.zip

18.6 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-25 06:12 , Processed in 0.030111 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表