画像「セルに配置」のVBAについて(365の新機能)
Excel365の新機能として、画像をセルに配置することが出来るようになりました。
従来の画像の挿入は、シートに対して画像を挿入するもので、表示位置がセルに重なっているだけでした。
今回の「セルに配置」は、画像をセルの中にデータとして入れることが出来るようになったものです。
これに対して今回の「セルに配置」は手動でセルに画像を入れることが出来るようになったものです。
当然セルから取り出した画像は再度「セルに配置」でセルの中に入れることが出来ます。
IMAGE関数
構文
引数
ソース | 必須。 "https" プロトコルを使用した画像ファイルの URL パス。 サポートされているファイル形式には、BMP、JPG/JPEG、GIF、TIFF、PNG、ICO、WEBP があります (WEBP は Web および Android ではサポートされていません)。 |
代替テキスト | 省略可能 アクセシビリティのために画像を説明する代替テキスト。 |
サイズ | 省略可能。 画像の寸法を指定します。 いくつかの可能な値があります。 0:画像をセルに合わせ、縦横比を維持します。※省略時の既定値 1:セルを画像で埋め、縦横比を無視します。 2:元の画像サイズを維持します。セルの境界を超える可能性があります。 3:高さと幅の引数を使用して、画像のサイズをカスタマイズします。 |
高さ | 画像のカスタムの高さ (ピクセル単位)。 省略可能。 |
幅 | 画像のカスタム幅 (ピクセル単位)。 省略可能。 |
使用例
=IMAGE("https://excel-ubara.com/images/logo.png",,1)
=IMAGE("https://excel-ubara.com/images/logo.png",,2)
=IMAGE("https://excel-ubara.com/images/logo.png",,3,100,150)
※IMAGE関数の入ったセルを他のセルに値貼付けした場合、「セルに配置」された画像になります。
手動で画像を「セルに配置」
この「セルに配置」はローカルPCの画像を入れられます。
画像そのものをセルに入れるのでファイルサイズは大きくなります。
数式バーには「画像」と表示されます。
この文字列の「画像」を再入力してしまうと単なる「画像」という文字列になってしまいます。
※IMAGE関数の入ったセルを他のセルに値貼付けした場合、「セルに配置」された画像になります。
「セルに配置」⇔「セルの上に配置」
さらに、取り出した画像は再度「セルに配置」でセルの中に入れることが出来ます。
インジケーターで操作
従来のようにセルの上にのっている状態です。
右クリックメニューから操作
「セル内の画像」→「セルの上に配置」
従来のようにセルの上にのっている状態に出来ます。
これは、IMAGE関数のセルでも同様です。
「セル内に配置」
これで画像はセル内に配置されます。
「セルに配置」「セルの上に配置」のVBA
新規に画像を選んで「セルに配置」
Sub sample1()
Range("A1").Select
Selection.InsertPictureInCell "https://excel-ubara.com/images/logo.png"
End Sub
セルの選択をわざわざする必要があるか?
Range("A1").InsertPictureInCell "https://excel-ubara.com/images/logo.png"
これだけで良さそうに思われます。
しかしRangeを指定してもそこに入るわけではなく、あくまでActiveCellに入ります。
ActiveCellに入る以上、事前にSelectする必要があるので、結局は上記のVBAコードに落ち着いてしまいます。
※このVBAで画像を入れたセルを数式バーで見ると入れた画像のURLが表示されます。
ただし、Microsoftの公式に情報がないので断定はできません。
エラー発生条件もはっきりとは絞り込めません・・・
現在の状況からすると、バグの可能性も結構ありそうにも思います。
今後変更されることを期待します。
「セルに配置」されている画像を「セルの上に配置」
Sub sample2()
Range("A1").PlacePictureOverCells
End Sub
このVBAは、当該セルに画像が入っていなくてもエラーになりません。
当該セルを左上として画像が元の大きさでセルの上に配置されます。
「セルの上に配置」されている画像を「セルに配置」
Sub sample3()
ActiveSheet.Shapes("Picture 3").Select
ActiveSheet.Shapes("Picture 3").PlacePictureInCell
End Sub
これもSelectしないと正しく動作しません。
エラーにはならないのですが、何も変化せずに終わってしまいます。
また、2行目は、
Selection.PlacePictureInCell
これでも良さそうですが、これではエラーになってしまいます。
画像が「セルに配置」されたセルのコピー
セルそのもののコピー
Sub sample4()
Range("A1").Copy Destination:=Range("A2")
End Sub
当然ですが、これは何も問題ありません。
Valueプロバティの設定
Sub sample5()
Range("A2") = Range("A1")
End Sub
これはコピー先のセルには、「#VALUE!」のエラー値が入ります。
形式を選択して貼付けで値のみ
Sub sample6()
Range("A1").Copy
Range("A2").PasteSpecial Paste:=xlPasteValues
End Sub
書式ごとコピーするなら最初のVBAで良いのですが、書式はコピーしたくない場合もあると思います。
そんな時はこのように値貼り付けで画像をコピーすることが出来ます。
画像が「セルに配置」されたセルのValueの型式
128は複合データです。
では、VBAではどうでしょうか?
もちろん、Valueを省略してしまうとRangeになってしまいますし・・・
セルに画像が入っている状態、つまり「セルに配置」されている状態はどうやって判定したらよいのでしょうか・・・
IMAGE関数が入っていればそれで判断できますが、手動やVBAで画像を「セルに配置」した場合はどのように判定したら良いのでしょうね。
これは継続調査とします。
同じテーマ「マクロVBA技術解説」の記事
Select Caseでの短絡評価(ショートサーキット)の使い方
RangeオブジェクトのFor EachとAreasについて
画像が行列削除についてこない場合の対処
新関数SORTBYをVBAで利用するラップ関数を作成
LAMBDA以降の新関数はVBAで使えるか
数字(1~50)を丸付き数字に変換するVBA
文字列のプロパティ名でオブジェクトを操作する方法
OneDrive使用時のThisWorkbook.Pathの扱い方
セル個数を返すRange.CountLargeプロパティとは
画像「セルに配置」のVBAについて(365の新機能)
VBAでクリップボードへ文字列を送信・取得する3つの方法
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- 画像「セルに配置」のVBAについて(365の新機能)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。