11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Excel】ExcelでIMAGE関数を使う

Last updated at Posted at 2020-08-11

この記事は、Excelでセル内のURLを参照して画像を表示する自作関数の記事です。

#SpreadSheetにあってExcelにない関数
URLを受け取ってセルに画像を表示する

=IMAGE("URL")

という関数がGoogle SpreadSheet にはあります。
IMAGE.PNG

同じような機能をExcelでつくってみました。
IMAGE2.PNG

##どんなときに使うの?
たくさんの商品の管理などをされている方に役立ちます。

シートにサムネイル画像の列をつくってデータの視認性を上げる
・商品などを探すスピードがアップ
・色違いの商品の発注ミス低減
といった効果があります。

一方で、画像の縦横比は無視されるのでビジュアル映えする印刷物を作成するには不向きかもしれません。

#ExcelでIMAGE関数を使うには?
標準モジュールに下記コードをコピーペースト。

:grey_question: 標準モジュールがわからない方はコチラ ① {Excel アプリケーション}>{開発タブ}>[Visual Basic]でVBEditorを開く。   ※開発タブが表示されていない方はご自身でお調べお願いします。 ② {VBEditor}>{プロジェクトのウィンドウ}>[VBA Project ("ブック名")]>[右クリックメニュー]>[挿入]>[標準モジュール]をダブルクリック ![スクリーンショット 2020-08-11 08.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441999/70a0788c-8f74-61c9-0d4f-74f1625f65c9.png) ③ {コードのウィンドウ}>[適当な箇所]をクリックしてアクティブ状態にする。VBAコードをコピーアンドペーストする。 ![スクリーンショット 2020-08-11 08.34.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441999/b9a4fba3-d0ff-db23-55b4-739060fc85d4.png)
qiita.rb
'====================================================================
'サムネイル画像を表示するワークシート関数
'=IMAGE(A1)などでそのセルに画像を表示する
 Function IMAGE(Optional URL = "")
    With Application.ThisCell
    '現在の状態をチェックして負荷軽減に役立てる
    Dim shp As Shape
    For Each shp In .Parent.Shapes
        If shp.Type = msoLinkedPicture Then
            If shp.TopLeftCell.Address = .Address Then
                If shp.name = URL Then
                    IMAGE = ""
                    Exit Function
                End If
            End If
        End If
    Next
    '新しいシェイプ画像をつくる
    If URL <> "" Then
        Set rg = Application.ThisCell
        On Error GoTo NotFound
        Set shp = .Parent.Shapes.AddPicture(URL, True, False, rg.Offset(, 0).Left, rg.Offset(, 0).Top, rg.Offset(, 0).Width, rg.Offset(, 0).Height)
        shp.name = URL
        On Error GoTo 0
        shp.Placement = xlMoveAndSize
        shp.Fill.ForeColor.RGB = RGB(255, 255, 255)
    End If
    End With

    IMAGE = ""
    Set shp = Nothing
    Exit Function
NotFound:
    IMAGE = "Not Found"
    Set shp = Nothing
End Function

Sub btn_DelIMAGE()
    With ActiveSheet
    '現在の画像を探して消す
    Dim shp As Shape
    For Each shp In .Shapes
        If shp.Type = msoLinkedPicture Then shp.Delete
    Next
    End With
End Sub

・たとえばのセルに=IMAGE(A1)と記述して、A1セルに入れたURLを参照して使いましょう。
・参照せず値を直接入れるときは=IMAGE("http://example/hoge.png")など「"(ダブルクォーテーション)"」をお忘れなく。

#このコードの欠点(未解決)
・マウスポインタを重ねて「+」をドラッグして同じ関数で埋める機能が画像シェイプが邪魔で触れなくなる点
→この問題は@takahasinaoki さんによる以下の提案があります。

Ctrl+6 キーを押してみてください
画像シェイプが非表示になります。
     ↓
再度画像を表示するには、もう一度 Ctrl+6を押します。
https://www.i-skillup.com/lecture/EXCEL/key/2016/c61.php?skey=c_6

・マウスポインタを重ねて「+」をドラッグして同じ関数で埋める機能が画像シェイプが邪魔で触れなくなる点
  画像のシェイプのみとりあえず削除

・縦横比無視して配置する点

一旦これにて記事は閉じます。
Excelでセル内のURLを参照して画像を表示する自作関数の記事は以上です

11
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?