zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Excel实战技巧:基于单元格的值显示相应的图片

Excel 技巧 基于 实战 图片 显示 单元格 相应
2023-06-13 09:17:15 时间

标签: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,供参考。