• ベストアンサー

VBAによるセル内の画像の位置調整

end-uの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

こんにちは。 Sub try()   Const n As Long = 4  'margin   Dim r  As Range   Dim x  As Double   With Worksheets("Sheet1")     Set r = .Range("H53").MergeArea     .Activate     .PasteSpecial Format:="図 (拡張メタファイル)"   End With   With Selection.ShapeRange     x = Application.Min((r.Width - n) / .Width, (r.Height - n) / .Height)     .LockAspectRatio = msoTrue     If x < 1 Then .Width = .Width * x     .Left = r.Left + (r.Width - .Width) / 2     .Top = r.Top + (r.Height - .Height) / 2   End With   ActiveCell.Select   Set r = Nothing End Sub こんな感じでどうでしょう。 >確かに回転は不可能でした。 との記述から、Paste後、その画像はObjectとして貼り付けられていませんか? 選択して[名前BOX]で確認してみてください。 回転させるなら、Shapeとして貼り付けるのが手っ取り早いです。 その場合は [Rotationプロパティ]や[IncrementRotationメソッド]が使えます。 Selectionを使いたくなければokormazdさんが書かれている ...Shapes(Sheet.Shapes.Count) で指定できますよ。 コマンドボタンなどの画像以外のものがあっても判定できます。 Shapes.Count、つまりShapesの最大値のIndexでShapeを指定しますから 最後に追加されたShapeになります。 #PasteSpecialの場合、たぶんSheet.Activateが必要なのでSelectionで充分だとは思いますが。

kiki_s
質問者

お礼

end-uさん、ありがとうございます。 >最後に追加されたShapeになります。 確かにそうなりました。 質問には書いていなかったのですが、画像は複数挿入します。 ただ、挿入する順番は決まっていませんので、Indexで指定出来るかどうか・・・ 提示頂いたコードは帰宅後試してみます。

関連するQ&A

  • VBAで、結合したセルの位置を変えたい

    エクセル2007のVBAですが、たとえば結合したセルG11があります。 このセルに、マクロ実行時に値を渡してセルの場所を変えることはできますか? たとえば(横の値,縦の値)とし、(1,0)という値を渡すとセルの位置はH11となり、 (0,1)という値を渡すとG12となる。 (-1,0)ならF11、といった感じです。 可能でしょうか?よろしくお願いします。

  • 現在のセルの位置を返す関数はありますか

    Excel97を使っています。 マウスで指定されたセルの位置が返される関数はありますか? 例えば、その関数をA1に入れておくと、マウスで指定したセルの位置がA1に返されるという関数です。 要するに数式バーの左端に現在のセルの位置が表示されていますよね。 それを関数で指定のセルに表示したいのです。

  • Excel VBA クリップボードの画像貼り付け

    こんにちは。 Excel VBAで次のようなことをしたいのですが、少し特殊な手順のため皆様のお知恵とお時間をお貸しいただけないでしょうか。 以下の作業をVBAで自動化したいと考えています。 ①クリップボードの画像を貼り付け  画像サイズを1.8cm×1.8cmに変更し、画像右角がセル『T66』に合うよう貼り付け位置を調整する ②これをExcelファイルの全てのワークシートに行う  (ワークシートのファイル名はすべて異なる) 作成したレポートに電子印を押印するのに、かなり時間がかかっているのでVBAで自動化したいと考えている次第です。 『パソコンに保存された画像』ではなく『クリップボードの画像を貼り付け』で自動化できれば、かなり時間短縮できるので上記の手順にてVBAを組んでいただけないでしょうか。 何卒、ご協力をお願い致します。

  • エクセルで結合したセルの高さの自動調整方法?

    エクセル2000、Win2000です。 いくつかのセルを横に結合し、セル内で「折り返して全体を表示する」にしています。 セルを結合してない場合は、入力文字数が多くなっても行の高さを自動調整にすれば、ちゃんと折り返して全部表示されますが、結合したセルの場合は、自動調整がきかず、 いちいち手動で調整しなくてはいけません。 1.結合セルでも自動調整する方法はないですか? 2.ない場合、VBAで行の高さを変えてみようと思いますが、セル内で折り返しているかどうか、および何行に折り返されているかはどう判別すればいいでしょうか?

  • エクセルVBA:データ端に画像があった場合の最終セル位置取得

     エクセル2000でVBA使用の場合の質問です。  既にシートに表や画像ファイルが配置されています。 あちこちの他データベースから、送付されてくるデータをそのシートの下端に自動で追加するマクロを組んでいます。 しかし、シートの一番下が不定な大きさの画像ファイルであった場合に、次のデータが、既にある画像に隠されない位置から貼り付けたいのですが、画像の最下位置をセル位置で取得する方法が判りませんでした。  こういう場合、どのような方法で取得すればいいのでしょうか?  最下データは必ずしも画像とは限らないので、出来れば同じコマンドかルーチンで画像であってもセル内データであっても、最下端セル(ここでは画像にが被っていないセルか、ヌルでないセル)位置、或いは最初の空きセル(ここでは、画像で隠されていず、かつヌルセルの位置の意味)位置を取得できれば嬉しいのですが、それが無理な場合、最後が画像か非ヌルセルかを判断した上で、画像だった場合の最下端情報を取得する方法(非ヌルセルと判断出来れば、情報取得方法はいくつか知っています)のどちらかを知りたいのです。

  • 【エクセル】 結合セルで行の高さを自動調整する方法

    通常、セルに多数の文字を書き込んでも列幅を変更 したくないときには、セルの書式設定で 「折り返して全体を表示する」 としておけば、列幅を広くすることなく、行の高さ が自動調整されます。 これを、結合セルでやろうとするとどうしても 自動調整してくれません。 結合セルでも、行の自動調整機能が働く方法を 教えてください。 よろしくお願いします。

  • EXCELでの画像位置調整マクロ(VBA)

    Excelの1シート内に大量の画像を貼り付けてあるブックがあります。 このシートをそのまま印刷した場合、1つの画像が2ページにまたがってしまう部分が いくつもあります。 これらを自動的に調整しなおして1つのブックにする方法はないでしょうか? 最終的に1つのファイルとして問題なく印刷できれば、どのような方法でもかまいません。 ただし、手動での位置調整は画像自体が大量にあるため、非常に時間がかかります。 マクロ的に処理できる方法をご存知の方、教えてください。

  • 結合されたセルの移動 VBA

    「結合されたセルの一部を変更することはできません」と言うメッセージイベントでVBAを実行するにはどうしたらよいでしょうか? 結合されたセルあるいは複数の結合されたセルを選んで移動する場合、移動先が自分のセルに重なると、「結合されたセルの一部を変更することはできません」と言うメッセージが現れます。 これを回避するには一旦何も無い離れたところに移動し、それから再び目的の場所に移動します。 私の技能では以下のようなマクロになると思います。 最初に元の結合セルを選び、場所を覚えるマクロを実行しする。 次に移動先を指定し、「一旦何も無い離れたところに移動し、それから再び目的の場所に移動」するマクロを実行します。 これをワン・アクションで、「結合されたセルの一部を変更することはできません」と言うメッセージが出るタイミングで実行するにはどうしたらよいでしょうか。 よろしくお願い申し上げます。

  • EXCELのVBAから画像ファイルを指定してPhotoEditorを起動したい。

    Excel2002のVBA(Ver6.0)を使っています。指定した画像ファイル(セル内に文字列データとして格納)をPhotoEditorを起動させて表示させるのが目的です。Shell関数ではPhotoEditorは起動できるのですが、ファイルが指定できませんでした。GetObject関数が使用できるではと思い、試してみましたがうまくいきません。  どなたか解決方法をお教えください。(ちなみにユーザーフォームでの表示はできています。)

  • Excel VBAで結合セルに連番を振っていくには?

    Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。