Excel VBA シェイプのサイズ取得方法 | VBAでシェイプのサイズを取得する方法

このQ&Aのポイント
  • Excel VBAを使用して、シェイプの原型のサイズ(幅や高さの数値)を取得する方法について説明します。
  • VBAでシェイプの縦横比を%指定で変更する方法について説明します。
  • ScaleWidthが見ている数値が元の図形と異なる場合、シェイプの原型のサイズを取得することで原因を探ることができます。
回答を見る
  • ベストアンサー

Excel VBA シェイプの原型のサイズ取得方法

VBAでシェイプの縦横比を%指定で変更したく、下記のように書いています ActiveSheet.Shapes("Picture 208").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.ScaleWidth 2, msoFalse '横2倍の大きさに ところが、ScaleWidthが見ている数値が元の図形のものと違うようです。原因を探すためにシェイプの原型のサイズ(幅や高さの数値)を知りたいのですが、VBAからアクセスできるプロパティやメソッドはあるでしょうか?

  • tx1
  • お礼率53% (74/139)

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

  • ベストアンサー
回答No.1

元のサイズがいくつかはおいといて、コード自体が間違ってませんか? LockAspectRatio = msoFalse これはいいとして、 ScaleWidth 2, msoTrue ってしないと「元のサイズを基準にする」で 2倍になってくれませんよ。 Dim myShape As Shape Set myShape = ActiveSheet.Shapes("Picture 208") myShape.LockAspectRatio = msoFalse myShape.ScaleHeight 2, msoTrue myShape.ScaleWidth 2, msoTrue

tx1
質問者

お礼

ありがとうございました。解決しました。

関連するQ&A

  • エクセル VBA 画像操作

    VBAについて質問です。 画像を何枚かを重ねて、シート上に置いてあります。 VLOOKUPにて、画像番号を獲得して、その番号の画像を最上面へ移動させたいのですが ActiveSheet.Shapes.Range(Array("Picture 201")).Select ActiveWindow.SmallScroll ToRight:=-342 Selection.ShapeRange.ZOrder msoBringToFront ActiveSheet.Shapes.Range(Array("Picture 221")).Select ActiveWindow.SmallScroll ToRight:=-342 Selection.ShapeRange.ZOrder msoBringToFront ActiveSheet.Shapes.Range(Array("Picture 215")).Select ActiveWindow.SmallScroll ToRight:=-342 Selection.ShapeRange.ZOrder msoBringToFront ("Picture 215")の部分を、セルの値で変更したいのですが どうか、お力お貸しください。 よろしくお願いします。

  • EXCELのVBAによる写真貼り付け時に重なる。

    VBAの初心者です。 エクセルに写真データを貼り付けるVBAで、以下のマクロを実行するとシートの同じセル位置B5に、写真が2枚重なった状態となります。 セルのB5とH5の位置に写真をそれぞれ貼りつけるために、どのように修正すればよいのでしょうか?ご教授ください。 OS:Vista ソフト:Excel2007 Sub 写真ファイル呼び出し() ' Sheets("風景1").Select Range("B5").Select ActiveSheet.Pictures.Insert(Worksheets("風景写真").Range("o4").Value).Select With Selection Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比を固定するコマンド Selection.ShapeRange.Width = 245 '縦横比固定、幅のみを指定する End With 'Sheets("風景2").Select Range("H5").Select ActiveSheet.Pictures.Insert(Worksheets("風景写真").Range("o5").Value).Select With Selection Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比を固定するコマンド Selection.ShapeRange.Width = 245 '縦横比固定、幅のみを指定する End With End Sub

  • Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

    Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。 オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。 マクロ記録をすると以下のようになりました。 Sub Macro1() ActiveSheet.Shapes("AutoShape 1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。 ・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう? ・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか? よろしくお願いします。

  • エクセルのVBAのことで

    以下のVBAを実行するとテキストボックスの"あ"という文字で円を描くことができます。 Sub test1() pai = 3.14159 r = 100 Worksheets("sheet1").Activate For s = 0 To 360 Step 15 rd = s / 180 * pai ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _ 200 + r * Sin(rd), 50 + r - r * Cos(rd), 20, 20).Select Selection.Characters.Text = "あ" Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Line.Visible = msoFalse Next s End Sub この円の半分の半径の円を元の円とドーナツ型(◎)になるように描くにはどのようなスクリプトにすればいいのでしょうか?

  • エクセル。マクロの記録で出来たVBAを書き直したい。

    エクセル2000(OSはWindows2000)でマクロの記録を行いました。 四角形を出してA1セルにリンクさせフォント等の設定をしたものです。 Sub Macro5() ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200#, 100#, 140#, 80#). _ Select ExecuteExcel4Macro "FORMULA(""=R1C1"")" With Selection.Font .Name = "Century Gothic" .FontStyle = "太字" .Size = 72 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoFalse End Sub これを、実際には四角形をセレクトしないで実行させたいのです。 With ActiveSheet.Shapes.AddShape~ End With といった形になるのでしょうが、どうもうまく出来ません。 ご教示いただければ幸いです。

  • VBAで画像を自動で切り替える方法

    Excelで棚割表を作っています。商品コードを打つとその商品の画像を自動で表示させたいのですが、雑誌を見ながらコードをアレンジしてほぼ完成したのですが、「プロシージャーが大きい」とエラーが出てマクロを実行出来ません。 画像は100個程度あり、先に別のマクロで貼り付けてあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String If Intersect(Target, Range("A4")) Is Nothing Then ActiveSheet.Shapes("画像").Delete ファイル = "C:\保存場所\" & Range("A4").Value & ".jpg" Range("B5").Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像" End If (中略) Dim ファイル98 As String If Intersect(Target, Range("U60")) Is Nothing Then Exit Sub ActiveSheet.Shapes("画像98").Delete ファイル98 = "C:\保存場所\" & Range("U60").Value & ".jpg" Range("V61").Select ActiveSheet.Pictures.Insert(ファイル98).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像98" End Sub 省ける箇所や分割する方法などありましたら教えてください。

  • PowerPointのVBAで、図形を縮小後、画質を落とさずに出力する方法

    PowerPointのVBAで、スライド上の図形のサイズを縮小した後、この図形をjpg画像として保存したいです。 オペレーションはこんな感じです↓ 図形縮小→図形を選択→右クリック→[図として保存]→JPGファイル名で保存 上記操作を「マクロの記録」で記録したものを実行すると、スライド全体が保存されてしまいます。 また、マクロで.ShapeRange.Exportで画像出力すると、画質が荒くなって出力されます。 画質を落とさず、図形をjpgとして保存する方法はないでしょうか。 よろしくお願い致します。 以下が、現状の私のプログラムです。 Sub Macro() ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="C:\aaaa.JPG", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=-119, Top:=-89, Width:=960, Height:=720).Select ActiveWindow.LargeScroll ToRight:=1 With ActiveWindow.Selection.ShapeRange .ScaleWidth 0.25, msoFalse, msoScaleFromTopLeft .ScaleHeight 0.25, msoFalse, msoScaleFromTopLeft End With With ActiveWindow.Selection.ShapeRange .IncrementLeft 219.12 .IncrementTop 416.75 End With ActiveWindow.Selection.ShapeRange.Select 'これだと画質が落ちます。↓ Call ActiveWindow.Selection.ShapeRange.Export("C:\\bbb.jpg", ppSaveAsJPG) 'これだとスライド全体が保存されます。↓ ' ActivePresentation.SaveAs FileName:="C:\bbb.jpg", FileFormat:=ppSaveAsJPG, EmbedTrueTypeFonts:=msoFalse End Sub

  • EXCEL VBA これであっていますか?

    エクセルに地図を貼り付け、その中のある地点Aから半径1キロ、2キロ、3キロといった具合に円を描いています。ある地点B、Cも同様に円があります。セルに“A” と入力した際に該当する地点の円(1キロ、2キロ、3キロの3種類)を赤く表示し、終了すると円が消える(線なしに変わる)ようにするために以下のようなVBAを組みました。が、円が2つしか赤くならなかったり、 ばあいによっては「インデックスが境界を超えています」とエラーが出たりします。 どうしたら良いか教えてください。 Sub iro() Dim i As Variant i = InputBox("表示する地点を指定してください", "地点指定") If i = "A" Then ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False modosu ElseIf i = "B" Then ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False Else MsgBox "指定した地点がありません", vbOKOnly End If End Sub Sub hyoji() Selection.ShapeRange.Line.Visible = msoTrue '「線なし」に設定されている場合、線を表示 Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 Range("A1").Select End Sub Sub modosu() Selection.ShapeRange.Line.Visible = msoFalse '「線なし」に設定 Range("A1").Select End Sub

  • VBAのGroup化について

    お世話になります。以下のマクロがうまく動きません。 ------------------------------------------------- Dim objShp1 As Shape For Each objShp1 In ActiveSheet.Shapes If objShp1.Name = "Picture 3" Then ActiveSheet.Shapes.Range(Array("A", "B", "Picture 3")).Select Selection.ShapeRange.Group.Select Selection.ShapeRange.ThreeD.RotationX = -180 Selection.ShapeRange.IncrementLeft 0 Selection.ShapeRange.IncrementTop 0 Else ActiveSheet.Shapes.Range(Array("A", "B")).Select Selection.ShapeRange.Group.Select <---------(1) Selection.ShapeRange.ThreeD.RotationX = -180 Selection.ShapeRange.IncrementLeft 0 Selection.ShapeRange.IncrementTop 0 End If Next ------------------------------------------------- このマクロは全体の一部分になりますが、(1)のところでエラーになります。 どこが間違っているのか、さっぱりわかりません。 すみませんが、お助けいただければ幸いです。

  • Office VBAについて

    OFFICE2007のプログラムをググったところ 下記のような表記が見つかりました。 ActiveSheet.Shapes.AddShape _ (msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Transparency = 0# ここで質問ですが、Selection.ShapeRange.Fill.Transparencyの0#とはなんでしょうか。 またAddShapeの中の数値に#を入れているパターンもありました。 いろいろ探したのですが見つかりませんので教えてください。

専門家に質問してみよう