
Excel2007のVBAからShell関数で外部実行プログラムを起動します。
外部実行プログラムは画像データをクリップボードへデータを出力後、自動で終了します。
Shell関数とWin32APIを使用して外部プログラムを実行し、プログラムが終了するまで待つように処理して、
クリップボードから指定する複数の結合したセルへ画像を貼り付ける事は出来たのですが、
画像がセルの左上を基準に貼り付けられます。
この画像を、セルの中央に位置調整したいのですが可能なのでしょうか?
また画像の回転(1度単位)は可能でしょうか?
'指定セルへクリップボードの内容を貼り付け
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("H53")
画像ファイルなどを読み込む訳ではないため、画像データ自体に名前がありません。
手動で位置調整は可能ですが、自動化出来ないかと色々調べ試してみたのですが、思う様に実現できません。
セルの結合は5行、列は結合していません。
どなたか御存知でしたら回答下さい。
No.4ベストアンサー
- 回答日時:
またまた登場,onlyromです。
百聞は一見に如かず、ということで新しいブックのSheet1で以下を実行してください。
H53~H57 を結合して(画像より大分大きめに幅、高さを広げておく)
任意の場所に画像を貼り付け、又は 挿入
その後、下記コードをコピペして実行
'---------------------------------------
Sub test()
With Selection
.Top = (Range("H58").Top - Range("H53").Top - .Height) / 2 + Range("H53").Top
.Left = (Range("I53").Left - Range("H53").Left - .Width) / 2 + Range("H53").Left
End With
End Sub
'----------------------------------------
どうですか?
ど真ん中に移動したと思いますが。
この回答への補足
>当方は動作確認してから投稿するようにしています。
決して意地悪をしている訳ではありませんので御容赦下さい。
時間を割いて回答頂いています事に感謝しています。
で、新しいブックで実行してみました。
確かにセルの中央に移動しました。
最初はエラーになるので、なぜなのか考えてみたら、
オブジェクトを選択状態にしないと駄目なんですね。
再度、質問になりますが、コード中の
Range("H53").Top - .Height
Range("H53").Left - .Width
「.Height」と「.Width」は挿入したオブジェクトの「高さ」、「幅」でしょうか?
やはり、VBAは難しい(><
No.6
- 回答日時:
ANo.1
です。
>説明不足でしたがシートには、画像以外のものもあります。
(コマンドボタンなど)
何があっても関係ありません。
>確かに回転は不可能でした。
どんな画像か知りませんが、普通は回転できます。選択マークが黒四角になっていないでしょうね。
>移動は出来ましたが、微調整が微妙ですね。
私は、移動できることを示しただけで、細かいことは他の人の回答で十分です。onlyromさんでいいでしょう。
>セルのサイズを変更すると問題になりそうです。
セルサイズの変更とは関係ないようにもできます。
図の書式設定―プロパティ
>挿入する順番は決まっていませんので、Indexで指定出来るかどうか・
なぜ指定できないのですか。indexがわかれば指定できるでしょう。indexをとっておけばいいですよ。
また、名前を知ることができますし、気に入った名前につけ変えることもできます。
...Shapes(sn).name="適当な名前"
>なぜ指定できないのですか
「できない」はプログラムで実現できないではなく、VBA自体を理解できていないのでコードが書けないという意味です。
VB(NET以前)なら基本的な部分は理解出来るのですが、似た環境といっても、やはり違います。
エクセル自体使う機会が少ないですし。
コード自体は、もう少しのところで完成かな?というところまで進展しました。
名前のつけ変えもトライしてみたいと思います。
ありがとうございました。
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で充分だとは思いますが。
end-uさん、ありがとうございます。
>最後に追加されたShapeになります。
確かにそうなりました。
質問には書いていなかったのですが、画像は複数挿入します。
ただ、挿入する順番は決まっていませんので、Indexで指定出来るかどうか・・・
提示頂いたコードは帰宅後試してみます。
No.3
- 回答日時:
再度の登場、onlyromです。
>移動は出来ましたが、意図する位置に移動しませんでした。
当方は動作確認してから投稿するようにしています。
提示したコードも動作確認済です。
ちゃんとど真ん中に移動するはずです。
条件、■H53~H57の5セルが結合してありますか?
意図した動作をしないという質問者のコードをアップしてください。
一緒に解決しませう。
No.2
- 回答日時:
●位置について●
セルのTop,Leftプロパティと
画像のTop,Left,Height,Widthプロパティから位置を計算する。
■H53~H57の5セルが結合してある場合
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("H53")
に続けて以下のコードを。。
With Selection
.Top = (Range("H58").Top - Range("H53").Top - .Height) / 2 + Range("H53").Top
.Left = (Range("I53").Left - Range("H53").Left - .Width) / 2 + Range("H53").Left
End With
'----------------------------------------------------
●回転について●
図形(オートシェイプ)やグラフならIncrementRotationメソッドで回転できますが
貼り付けた(あるいは挿入した)画像(jpg,gif等)を回転させるメソッドはありませんので出来ません。
ただその貼り付けた画像はオートシェイプと同じく、Shapesコレクションに組み込まれますのでShapeオブジェクトで参照できます。
ということで回転はAPIになるでしょうからそれについてはネット検索してみてください。
以上。
onlyromさん、確かに回転は不可能でした。
移動は出来ましたが、意図する位置に移動しませんでした。
どちらかといえば右方向に移動したいのですが、左へ移動します。
コードと「にらめっこ」で色々調べてみたのですが・・・
再度方法を思案中です。
VBなら基本的なところは理解できているのですが、
VBAは「似て非なる」ものですね。
ありがとうございました。
No.1
- 回答日時:
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("H53")
sn = ActiveSheet.Shapes.Count
With ActiveSheet.Shapes(sn)
.Top = 200 '画像の行 1上端からの距離(pixel)
.Left = 200 '画像の列1左端からの距離(pixel)
.Rotation = 5 '回転角
End With
でどうでしょう。
okormazdさん、説明不足でしたがシートには、画像以外のものもあります。
(コマンドボタンなど)
コードをそのまま利用させて頂いたのですが、
確かに回転は不可能でした。
移動は出来ましたが、微調整が微妙ですね。
セルのサイズを変更すると問題になりそうです。
再度方法を思案中です。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) VBAで複数のExcelを1つのExcelにまとめる 1 2022/09/04 11:08
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
エクセルVBAで画像を貼り付ける座標設定方法は?
PowerPoint(パワーポイント)
-
VBAでセルを指定した画像のコピー&ペーストを繰り返したい
Excel(エクセル)
-
-
4
VBA Shapes コピーと名前
Excel(エクセル)
-
5
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
6
Excel VBA素人です。VBAで図形のセンタリング方法ご教示下さい
Visual Basic(VBA)
-
7
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
8
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
9
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
10
Excel VBAでセル内の画像を選択したい
Excel(エクセル)
-
11
VBAで特定のセルに画像があれば削除、なければ貼り付けを行いたい
Excel(エクセル)
-
12
VBAで選択した画像を貼り付けたい
Excel(エクセル)
-
13
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
14
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
15
VBA ボタンをセルの右側に合わせたい
その他(Microsoft Office)
-
16
任意フォルダから画像をすべてエクセルの指定マスに貼り付けをしたい
Visual Basic(VBA)
-
17
【エクセルVBA】シェイプのサイズとセルの縦横
Excel(エクセル)
-
18
Excel 画像貼り付けのVBAについて
Excel(エクセル)
-
19
【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
20
Excelシートの保護(図の挿入だけ許可)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男の人はやってるとき 彼女がす...
-
男性の方に質問です。 バックで...
-
風俗ってどこまでの接客をします?
-
彼女が感じやすくて可愛い
-
フェラチオは妻の義務ですか?...
-
高校生です。彼氏の前で初めて...
-
女性が喘いでいるときの男性の...
-
男性に質問です。 デリヘルって...
-
夫婦の夜の営みについてです。 ...
-
ソープランドについて
-
男性に質問です! 電話だけで勃...
-
初体験って気持ちいいの? 男の...
-
彼氏と毎日セックスするのは異...
-
彼と体の相性が良すぎて悩んで...
-
彼女がフェラをしてくれません。
-
乳首舐められるのと手マンって...
-
ふぇらでイカセテくれる うまい...
-
実家住まいの場合Hはホテル以外...
-
キスすれば相手を好きでなくて...
-
前戯なしで挿入されました。大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
男の人はやってるとき 彼女がす...
-
男性の方に質問です。 バックで...
-
彼女が感じやすくて可愛い
-
風俗ってどこまでの接客をします?
-
高校生です。彼氏の前で初めて...
-
フェラチオは妻の義務ですか?...
-
女性が喘いでいるときの男性の...
-
夫婦の夜の営みについてです。 ...
-
彼氏と毎日セックスするのは異...
-
男性に質問です! 電話だけで勃...
-
兄妹や姉弟で、キスやエッチし...
-
初体験って気持ちいいの? 男の...
-
彼と体の相性が良すぎて悩んで...
-
男性に質問です。 デリヘルって...
-
ソープランドについて
-
キスすれば相手を好きでなくて...
-
もし週1しか恋人と会えなかった...
-
実家住まいの場合Hはホテル以外...
-
彼女がフェラをしてくれません。
-
彼氏が前戯をしてくれない
おすすめ情報