OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Excel2002のマクロについて

  • 困ってます
  • 質問No.236678
  • 閲覧数197
  • ありがとう数4
  • 気になる数0
  • 回答数6
  • コメント数0

マクロを使って、画像を貼付で困っています。
流れは、セルを選択し画像を写真サイズにして、回転させて貼り付けているのですが、選択したセルの左上角にあってくれません。
おそらく、回転前の角をあわせて、それから回転してしまっているのだと思います。

これを、回転させた画像がセルの左上角に合うように、画像の挿入をしたいのですが、マクロをどう記述すればいいのでしょうか?
教えください。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.6
レベル7

ベストアンサー率 68% (11/16)

微妙な質問ですが
単純に解釈すると簡単です。

Selection.ShapeRange.Height = 273.75
Selection.ShapeRange.Width = 364.5
とタテヨコの長さをセットしていますが
セットする前に確認します。

If ~.Height > ~.Width Then
タテ長の時の処理
Else
ヨコ長の処理
End If
(~は省略しています)

すべての写真をヨコ長で
配置する場合は、タテなら回転を90
ヨコなら0にして他の処理は
同じで大丈夫です。
Ifでは、回転角度の変数に0か90かの
セットだけ行い
後は共通の処理です。

微妙とは「保存してある」というのを
画像を開く前に判断したいという意味に
解釈したらということです。
ちょっと思い付きませんでした。
ダイアログで開く画像を選ばせる
処理のようなのでタテかヨコかは
分かるはずということにします。

ダイアログにせず決まったフォルダにある
画像を自動で処理するような場合は
仕方が無いので、いったん画像を
貼り付けてみて長さを比べて
タテだけ有効なら、ヨコ長画像をすぐに
Deleteして次の画像を・・
という処理にします。

具体的にはどういう処理をされているかが
分かればソースか何かで示すことができます。
良かったら回答下さい。


別件ですが、下の部分
Selection.ShapeRange.LockAspectRatio = msoTrue
タテヨコの比率を固定するものですが
タテヨコの長さが違う場合に有効です。
直後に
~.Height = 273.75
~.Width = 364.5
と長さを与えていますが
これはどちらかしか実際には使われていません。
(どちらかは調べてませんが)
たぶん今回は元の画像が写真のサイズの
比率(タテヨコ)に近いものなので
どちらでもOKなのだと思います。
たとえば少し細長い画像の場合
縮小、拡大する時に
1.タテがいっぱいになるまで拡大
2.ヨコが・・
を選ぶことができます。
~.Height = 273.75
のみを指定するとタテの長さに合せて
ヨコを自動調整させるということになります。
タテもヨコも枠からはみ出ない
ワクいっぱいの表示をする場合などに使います。
.LockAspectRatioのあとは
タテかヨコかを積極的に
使ってみるとおもしろいと思います。
お礼コメント
noname#192965

いろいろな相談にご回答いただいているようで、ほんとにありがとうございます。
少ない時間ながら、ちょっとずつ試していますので、時間がかかってしまい、ご返事も遅くなってしまいました。
ご迷惑をおかけして申し訳ございません。
こちらの方は終了させていただきます。助かりました。
ほんとにありがとうございました。
投稿日時 - 2002-03-21 21:16:57
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル7

ベストアンサー率 68% (11/16)

考え方ですが 画像を貼り付けた直後に名前を付けます。 Selection.Name = "名前" サイズ変更、回転後 画像切り取り ActiveSheet.Shapes("名前").Cut セル選択 画像貼付け Range(セル位置).Select ActiveSheet.Paste で目的の位置に貼り付けられると思います。 画像名にセ ...続きを読む
考え方ですが

画像を貼り付けた直後に名前を付けます。
Selection.Name = "名前"
サイズ変更、回転後
画像切り取り
ActiveSheet.Shapes("名前").Cut
セル選択
画像貼付け
Range(セル位置).Select
ActiveSheet.Paste
で目的の位置に貼り付けられると思います。

画像名にセルのアドレスを使うと
削除や移動時に便利です。

作成例が必要なら作ります。
連絡下さい。
補足コメント
noname#192965

ありがとうございます。
ぜひ例をみてみたいものですが、、、
参考まで、私のものせておきます、
これでうまくいきません。
なぜか、選択していたセルのひとつ下ぐらいになってしまいます。。。
Application.DialogsxlDialogInsertPicture).Show
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 273.75
Selection.ShapeRange.Width = 364.5
Selection.ShapeRange.Rotation = 90#
Selection.Name = "sq" & Selection.TopLeftCell.Address



ActiveSheet.Shapes("sq" & Selection.TopLeftCell.Address).Cut
ActiveCell.Select
ActiveSheet.Paste

まねてまねてつくったものですので、おかしなところがあるかもしれませんが、、、
投稿日時 - 2002-03-17 20:41:17

  • 回答No.2
レベル7

ベストアンサー率 68% (11/16)

すいません、今試していたところでした。 下のものを試して下さい。 Set 画像 = Selection.ShapeRange MsgBox "左1 " & 画像.Left MsgBox "左2 " & Range("c4").Left 画像.Left = Range("c4").Left ...続きを読む
すいません、今試していたところでした。
下のものを試して下さい。

Set 画像 = Selection.ShapeRange
MsgBox "左1 " & 画像.Left
MsgBox "左2 " & Range("c4").Left
画像.Left = Range("c4").Left

MsgBox "上1 " & 画像.Top
MsgBox "上2 " & Range("c4").Top
画像.Top = Range("c4").Top


画像をセレクトしてからスタートして下さい。
セルの、画面左からセルまで位置を画像に与える
画面上からの位置も同じです。

まだテスト中です。
  • 回答No.3
レベル7

ベストアンサー率 68% (11/16)

テストしましたが 回転後はだめですね。 回転前は大丈夫です。 top,leftを入れ替えてテスト中です。 何度もすいません。
テストしましたが
回転後はだめですね。
回転前は大丈夫です。

top,leftを入れ替えてテスト中です。

何度もすいません。
  • 回答No.4
レベル7

ベストアンサー率 68% (11/16)

元の位置を覚えているようで 少し難しいですね。 なんとかなるかもしれませんが ひとまず別の方法を。 決まりの列、行に移動させるなら 移動させる距離をマクロの自動記録で 求めることができます。 画像を選択して、記録開始 画像を移動、記録停止 相対位置で記録されるので他の場所でも 見た目はこれを使えばできると思います。 画像の回転は、画像自体の中心を起点にまわります。 ...続きを読む
元の位置を覚えているようで
少し難しいですね。
なんとかなるかもしれませんが
ひとまず別の方法を。

決まりの列、行に移動させるなら
移動させる距離をマクロの自動記録で
求めることができます。

画像を選択して、記録開始
画像を移動、記録停止

相対位置で記録されるので他の場所でも
見た目はこれを使えばできると思います。


画像の回転は、画像自体の中心を起点にまわります。
このために計算が難しくなるのかもしれない
と考えています。
もう少し考えさせて下さい。
お礼コメント
noname#192965

何度もありがとうございます。
とてもうれしいです。
結局、この上記の方法が、初心者の私には一番簡単そうですね。
とりあえずはこれを使ってみます。

しかし、まだいい案がでてくれば、書き込んでくださいね。しばらく、終了はしないでいますので。
何分、忙しくて、返事が遅れるかもしれませんが、必ず返事はしますので、よろしくお願いします。
投稿日時 - 2002-03-17 23:10:12
  • 回答No.5
レベル7

ベストアンサー率 68% (11/16)

下のものを確認下さい。 Sub ちょうど() Application.Dialogs(xlDialogInsertPicture).Show Set 画像 = Selection.ShapeRange 画像.LockAspectRatio = msoTrue 画像.Height = 273.75 画像.Width = 364.5 画像.Rotation ...続きを読む
下のものを確認下さい。

Sub ちょうど()
Application.Dialogs(xlDialogInsertPicture).Show
Set 画像 = Selection.ShapeRange

画像.LockAspectRatio = msoTrue
画像.Height = 273.75
画像.Width = 364.5
画像.Rotation = 90#

位置の差 = (画像.Width / 2) - (画像.Height / 2)
画像.Left = Range("f20").Left - 位置の差
画像.Top = Range("f20").Top + 位置の差

End Sub


セルはF20になっています。変更下さい。
これは、ヨコ長(90度回転してタテ長)の場合だけ
だと思います。タテ長、ヨコ長のどちらもある場合は
どちらが長辺かの判断が必要かもしれません。

回転後でも画像のleft,topの値は
元のヨコ長の時の位置のままでした。
元の位置を覚えていて、回転の指定があると
図形自体の中心点を基点に回す処理のようです。
逆算で、置きたいセルの座標との差を
求めて調整しました。

正方形以外は、90度まわすと、
上側は少し飛び出す、左右は少しスリムになります。
上がどの程度出るかは
図形の幅の半分 - 図形の高さの半分
この長さ分上側に出ます。
左右はこの分減ります。


ちなみに一つだけ教えてほしいのですが
うちはExcel97ですが
写真の画像は回転不可です。
バージョンを教えてもらえますか。
買いに行きます。

不具合ありましたら連絡下さい。
勉強になりました。ありがとうございました。
お礼コメント
noname#192965

ほんとに親切にありがとうございました。
VBAもExcelのバージョンによって、できたりできなかったりするのですね。私Excel2002を使っております。

ついでといっては何ですが、保存されている画像が縦長なのか横長なのか、マクロで情報を得たいのですが、できますでしょうか?

例えば、横長ならそのまま貼付、縦長なら回転させて貼付といったことをしたいのですが、、、
画像の情報を得るコマンドがわからないでいます。
もしおわかりであれば教えてください。
新たに質問しなおした方がいいかもしれませんので、新たに質問もしてみます。
ありがとうございました。
投稿日時 - 2002-03-19 01:13:44
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ