PAYATHON 2026

如何提取 Excel 单元格内图片的 Alt Text 并写入相邻列?

数据小许

可以先用 VALUETOTEXT 将单元格内图片转换为文本,再通过 VBA 批量写入相邻列。这个方法读取的是图片单元格的文本表示。处理整列之前,先确认单张图片的返回结果与 Alt Text 一致。

为什么处理浮动图片的代码不适用?

Excel 的“置于单元格中”(Place in Cell)图片和覆盖在单元格上方的浮动图片采用不同的表示方式。浮动图片通常通过 Worksheet.Shapes 访问,其替代文本可通过 Shape.AlternativeText 读取;这套方法不能直接用于单元格内图片。Microsoft 图片功能说明、Shape.AlternativeText 文档

先用公式提取一张图片的文本

假设图片位于 A2,在 B2 输入:

=VALUETOTEXT(A2)

也可以尝试:

=TEXT(A2,"General")

VALUETOTEXT 用于将指定值转换为文本,省略第二个参数时采用简洁格式。官方说明没有逐项保证所有图片来源和 Excel 版本的 Alt Text 转换行为,因此应先将结果与图片的“查看替代文本”面板核对。VALUETOTEXT 文档

确认结果正确后,向下填充公式即可。如果只需要保存提取时的文字,可以复制结果列,再选择性粘贴为值。

使用 VBA 批量写入相邻列

以下示例以当前工作表的 A2:A100 为图片区域,B2:B100 为输出区域。请按实际数据修改范围,并确保输出区域可以被覆盖。

宏会批量填入公式并计算结果,再将公式替换为固定值,无须逐个操作图片对象。

Option Explicit

Sub ExtractInCellPictureAltText()
    Dim ws As Worksheet
    Dim sourceRange As Range
    Dim targetRange As Range

    Set ws = ActiveSheet
    Set sourceRange = ws.Range("A2:A100")
    Set targetRange = sourceRange.Offset(0, 1)

    With targetRange
        .NumberFormat = "General"
        .FormulaR1C1 = _
            "=IF(ISBLANK(RC[-1]),"""",VALUETOTEXT(RC[-1])))"
        .Calculate
        .Value2 = .Value2
    End With
End Sub

在 VBA 编辑器中插入标准模块,粘贴代码后运行 ExtractInCellPictureAltText。公式中的 RC[-1] 指向输出单元格左侧的图片单元格;源单元格为空时,ISBLANK 分支会让对应的输出保持为空。

结果不符合预期时怎么检查?

  • 如果出现 #NAME?,先检查当前 Excel 是否支持 VALUETOTEXT。也可以单独尝试 TEXT 公式,确认有效后再调整宏。
  • 如果返回的是通用图片名称,而非预期描述,右键图片选择“查看替代文本”,检查文字是否确实保存在该图片上。
  • 如果区域中混有普通文字或数字,它们也会被转换并写入输出列。这段宏不会自动判断哪些单元格包含图片。
  • 宏保存的是提取时的结果。修改 Alt Text 后需要重新运行;如果希望结果随源内容重新计算,可以保留公式,删除代码中的 .Value2 = .Value2。

备注:内容仅供参考。