标签:Excel实战,INDEX函数,MATCH函数,定义名称,VBA
选择零件号,显示相应的零件图;选择员工姓名,显示该员工相片,等等,都是选择单元格中的值而显示相应的图片的例子,也就是说基于单元格的值查找并显示对应的图片,单元格的值改变,图片也自动改变。效果如下图1所示。
图1
在这里,将探讨实现这一任务的三种不同方法,每种方法都有其优势和劣势。
方法1:使用名称+INDEX/MATCH+链接的图片
如下图2所示,列A包含国家名称列表,列B是相应的国旗。
图2
首先,定义名称。在新建名称对话框中,输入名称:PictureLookup
在引用位置,输入:
=INDEX(B2:B11,MATCH(D2,A2:A11,0))
其中,单元格区域B2:B11包含国旗,单元格D2中包含要查找的国家名称,单元格区域A2:A11包含国家名称列表。
图3
接下来,创建链接的图片。选择包含国旗的任一单元格,按Ctrl+C或者单击功能区中的“复制”按钮复制该单元格,再选择一个不同的单元格(示例中是单元格E2),单击功能区“开始”选项卡中的“粘贴——链接的图片”,将显示被粘贴的图片,选择该图片,在公式栏中输入:
=CountryLookup
选择单元格D2,使用数据验证创建包括列A中国家名称列表的下拉列表。
这样,在单元格D2中选择国家名称,在单元格E2中将显示该国家的国旗图片。
当然,如果使用Microsoft 365,那么还可以使用新的XLOOKUP函数来编写查找公式。
方法2:使用图表填充+#N/A
与上面相同,在单元格D2中创建数据验证列表,可以在下拉列表中选择国家名。
首先,创建一个将所选国家计算为1,其他国家计算为#N/A的公式。如下图4所示。
图4
可以看到,在单元格B2中的公式为:
=IF(VLOOKUP(A2,D2,1,0)=A2,1,NA())
如果单元格D2中的值与列A中相应的值相同,则公式返回1,否则返回#N/A。下拉复制该公式至数据末尾,示例中为单元格B11。
然后,以国家列表和刚创建的公式列为源数据(即单元格区域A2:B11),创建一个堆积柱形图,并进行一些格式设置。
最后,添加图像作为每个图表系列的填充。你可以手动一个一个图片填充,也可以使用VBA代码自动完成,代码如下:
Sub InsertPicturesIntoChart()
Dim i As Integer
Dim selectedCells As Range
Dim FilePath As String
Dim fileExtension As String
Dim chartName As String
Dim imageFullName As String
'改变下面的赋值为你实际的值
FilePath = "C:\Users\excelperfect\Desktop\flags\"
fileExtension = ".png"
chartName = "Chart 1"
'在运行宏之前选择具有国家/地区名称的单元格
For Each selectedCells In Selection
i = i + 1
'imageFullName是图像的完整文件路径.
'在列A中国家名必须与图像名匹配.
imageFullName = FilePath & Cells(i + 1, 1).Value & fileExtension
'改变图表系列填充.
ActiveSheet.ChartObjects(chartName).Chart.SeriesCollection(i).Format.Fill.UserPicture imageFullName
Next selectedCells
End Sub
方法3:使用VBA自定义函数
在VBE的标准模块中输入下面的代码:
Public Function PictureLookupUDF(FilePath As String, Location As Range, Index As Integer)
Dim lookupPicture As Shape
Dim sheetName As String
Dim pictureName As String
pictureName = "PictureLookupUDF"
''Dim picTop As Double
''Dim picLeft As Double
sheetName = Location.Parent.Name
'删除具有相同索引的当前图片(如果存在)
For Each lookupPicture In Sheets(sheetName).Shapes
If lookupPicture.Name = pictureName & Index Then
lookupPicture.Delete
End If
Next lookupPicture
'在右边位置添加图片
Set lookupPicture = Sheets(sheetName).Shapes.AddPicture _
(FilePath, msoFalse, msoTrue, Location.Left, Location.Top, -1, -1)
'重新调整图片大小最好地适应单元格区域
If Location.Width / Location.Height > lookupPicture.Width / lookupPicture.Height Then
lookupPicture.Height = Location.Height
Else
lookupPicture.Width = Location.Width
End If
'改变图片名
lookupPicture.Name = pictureName & Index
PictureLookupUDF = "图片查找:" & lookupPicture.Name
End Function
然后,在工作表中使用自定义函数,如下图5所示。
图5
注:本文学习整理自exceloffthegrid.com,供参考。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有