Excel VBA 質問スレッド №2138 (解決済)

写真画像を貼り付ける

投稿者 : KOJI     投稿日時 : 2025/07/25(Fri) 18:59:35     OS : Windows 10     EXCEL : Excel 2003
大変古いですが、
excel2003で「写真貼り付けのマクロ」を作りたいです。
ツールタブからマクロ実行ボタンを押し、
写真貼り付けはできました。

コマンドボタンにマクロを登録し、
コマンドボタンを押してからマクロを実行したいのですが、
コマンドボタン自体が画像として選択され、
写真画像と一緒にセルに貼り付けされてしまいます(笑)。

コマンドボタンを、画像として選択できないようにするVBA、
はありますか?回答をよろしくお願いいたします。

スポンサーリンク
[返信 1] Re : 写真画像を貼り付ける
投稿者 : higeru     投稿日時 : 2025/07/25(Fri) 20:39:21
まずはどういうコードを書いたのか、それを教えてくれないことには正確なことは書けませんが、ボタンの名前とかオートシェイプなのかフォームコントロールなのかとかで判断して除外するんでしょうね。

[返信 2] Re : 写真画像を貼り付ける
投稿者 : KOJI     投稿日時 : 2025/07/25(Fri) 21:21:51
■[返信 1] higeruさん(2025-07-25 20:39:21)の記事
> まずはどういうコードを書いたのか、それを教えてくれないことには正確なことは書けませんが、

コードを貼り忘れました。大変失礼しました。
このコードは、ネットで公開されているサンプルコードを、
一部修正したものです。

Sub 写真自動配置()
Dim targetRange As Range
Dim i As Variant
Dim abc As Long

abc = ActiveSheet.Shapes.Count

ActiveSheet.Pictures.Select 
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.Width = 234
Selection.Height = 170

For i = 1 To abc
Set targetRange = Cells(i, 2) 
ActiveSheet.Shapes(i).Select 
Selection.ShapeRange.Left = targetRange.Left 
Selection.ShapeRange.Top = targetRange.Top 
Next i

End Sub

[返信 3] Re : 写真画像を貼り付ける
投稿者 : ピロリ     投稿日時 : 2025/07/26(Sat) 00:22:03
その図形(Shape)の種類(Type)が、ボタンなのか、画像なのかを判別して、画像(Picture)だけを
処理すれば宜しいのでは。 <vba Shape.Type> で検索すると良いでしょう。

ちなみに、i は Long型で良いのでは。 abc が Long型ですし・・・

[返信 4] Re : 写真画像を貼り付ける
投稿者 : KOJI     投稿日時 : 2025/07/26(Sat) 08:42:08
> その図形(Shape)の種類(Type)が、ボタンなのか、画像なのかを判別して、画像(Picture)だけを
> 処理すれば宜しいのでは。 <vba Shape.Type> で検索すると良いでしょう。
すぐに実行してみます。

> ちなみに、i は Long型で良いのでは。 abc が Long型ですし・・・
ありがとうございます。すぐに修正します。

[返信 5] Re : 写真画像を貼り付ける
投稿者 : KOJI     投稿日時 : 2025/07/26(Sat) 11:02:09
■[返信 3] ピロリさん(2025-07-26 00:22:03)の記事

他の掲示板でも、全く同じ内容を質問していました。

回答者の方にサンプルコードを作っていただき、
「ボタンを押す・写真貼り付け」が無事に成功しました。
サンプルコードを貼らせていただきます。

こちらの回答者の皆様、お世話になりました。
本当にどうもありがとうございました。

Sub 写真自動配置()
    Dim targetRange As Range
    Dim i       As Long
    Dim shp     As Shape

    With ActiveSheet.Pictures
        .ShapeRange.LockAspectRatio = msoFalse
        .Width = 234
        .Height = 170
    End With

    i = 0
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoPicture Then
            i = i + 1
            Set targetRange = Cells(i, 2)
            With shp
                .Left = targetRange.Left
                .Top = targetRange.Top
            End With
        End If
    Next
End Sub

[返信 6] Re : 写真画像を貼り付ける
投稿者 : ピロリ     投稿日時 : 2025/07/26(Sat) 11:47:54
解決済できて良かったですが 1件だけ。 もう見ていただけないかも ですが。

掲示いただいたサンプルコードだと、ActiveXコントロールを使用した場合に 幅:234,高さ:170になってしまうような気が・・・
今後も ActiveXコントロールは使用しないってことならば、問題はないでしょうけど。

個人的には With shp ~ End With の中で下の処理(サイズ変更)した方が良いのかなぁって思いました。
 .LockAspectRatio = msoFalse
 .Width = 234
 .Height = 170

[返信 7] Re : 写真画像を貼り付ける
投稿者 : KOJI     投稿日時 : 2025/07/26(Sat) 18:19:39
■[返信 6] ピロリさん(2025-07-26 11:47:54)の記事
ありがとうございました。たまたま見に来ました。

> 掲示いただいたサンプルコードだと、ActiveXコントロールを使用した場合に 幅:234,高さ:170になってしまうような気が・・・
コードを修正しましたが、全く同じ結果を得られました!
以下でよろしいでしょうか。
ActiveXコントロールについては、全・・・く理解しておりません^^;

Sub 写真自動配置()
    Dim targetRange As Range
    Dim i       As Long
    Dim shp     As Shape

    i = 0
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoPicture Then
            i = i + 1
            Set targetRange = Cells(i, 2)
            With shp
                .LockAspectRatio = msoFalse     'コードの切り取り・追加
                .Width = 234                    'コードの切り取り・追加
                .Height = 170                   'コードの切り取り・追加
                .Left = targetRange.Left
                .Top = targetRange.Top
            End With
        End If
    Next
End Sub

[返信 8] Re : 写真画像を貼り付ける
投稿者 : ピロリ     投稿日時 : 2025/07/26(Sat) 19:40:26
■[返信 7] KOJIさん(2025-07-26 18:19:39)の記事
> 以下でよろしいでしょうか。
良いと思います。 修正前のコードで上手くいっていたということは、KOJIさんが使用していたのは、
ActiveXコントロールの「コマンドボタン」ではなく、フォームコントロールの「ボタン」とかでは?
「何で、コマンドボタンが Pictures なんだよ? Shape.Type は msoPicture じゃないのに!」って
思うかも(私も思ってます)ですが・・・

[返信 9] Re : 写真画像を貼り付ける
投稿者 : KOJI     投稿日時 : 2025/07/26(Sat) 20:25:40
■[返信 8] ピロリさん(2025-07-26 19:40:26)の記事
> ActiveXコントロールの「コマンドボタン」ではなく、フォームコントロールの「ボタン」とかでは?
補足していただいた意味が、やっとわかりました!!
「ActiveXコントロール=コマンドボタン」なのですね!

確かに、コマンドボタンではなくフォームボタンです。
excel2003では「表示タブ、ツールバー、フォーム」と
選んだ四角のボタンです。

勉強不足から、最後の最後までお騒がせ致しました^^;。
御親切に、本当にありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-08-27 00:37:35 )
タイトルとURLをコピーしました