• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パワーポイントVBAでグラフのサイズ・位置を統一)

パワーポイントVBAでグラフのサイズ・位置を統一

このQ&Aのポイント
  • パワーポイントVBAに貼付けた複数のグラフサイズを統一したいと思っています。
  • 各スライドにある1つ目のグラフのサイズは統一出来たのですが、2枚目のグラフは何の変化もおきません。
  • どこが悪いのか、どなたかご教示頂ければ幸いです。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

失礼ながら、2003で試行してみましたが、 ご提示のコードできちんと動きます。 なので > どこが悪いのか 具体的な指摘は出来かねるのですが・・ For i = 2 To cnt   With ActivePresentation.Slides(i)     .Select     With .Shapes(2)       .Select       .Top = myTop1 として、ステップインで実行してみると原因が掴めるかもしれません。 余計なお世話かもしれませんが、 Sub 表サイズの統一() Dim myTop1, myLft1, myHgt1, myWdt1, cnt, i, myTop2, myLft2, myHgt2, myWdt2   With ActivePresentation.Slides(1)     With .Shapes(1)       myTop1 = .Top       myLft1 = .Left       myHgt1 = .Height       myWdt1 = .Width     End With     With .Shapes(2)       myTop2 = .Top       myLft2 = .Left       myHgt2 = .Height       myWdt2 = .Width     End With   End With   cnt = ActivePresentation.Slides.Count   For i = 2 To cnt     With ActivePresentation.Slides(i)       With .Shapes(1)         .Top = myTop1         .Left = myLft1         .Height = myHgt1         .Width = myWdt1       End With       With .Shapes(2)         .Top = myTop2         .Left = myLft2         .Height = myHgt2         .Width = myWdt2       End With     End With   Next End Sub こんな感じでまとめるとスッキリしますね。

pochi_-v-b
質問者

お礼

早速ご回答頂き有り難うございました! お礼が遅くなり失礼しました汗 再度トライしてみましたが、何故かVBAは働いてくれませんでした。 もしかすると2007を使っているからかもしれませんが、不思議です。 デバッグしてみると、以下の様になりました。 ---------- For i = 2 To cnt     With ActivePresentation.Slides(i)       With .Shapes(1)         .Top = myTop1         .Left = myLft1         .Height = myHgt1         .Width = myWdt1       End With       With .Shapes(2)←←←←←←←←←←エラー箇所         .Top = myTop2         .Left = myLft2         .Height = myHgt2         .Width = myWdt2 エラーメッセージ: Shapes(不明なメンバー):範囲外の整数2は次の有効な範囲にありません:1から1へ ---------- いずれにせよご回答頂き有り難うございました! 綺麗なコードもご紹介頂き、大変勉強になります。 お手数をおかけしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

> "shape (不明なメンバー):無効な要求です。図形を選択するには、表示がアクティブでなければいけません" > とのエラーメッセージが帰ってきました。 >> ActivePresentation.Slides(2).Shapes(2).Select とりあえず・・2枚目のスライドを表示させた状態で動かしましたか?と言うのが確認です。 これで選択できないという事は、 思惑の「グラフが二つ目のShapes」ではない、という事が考えやすいです。 ※意味は2通り  1)もしかしたら、グラフが「Shapeとして認識されていない」パターン    2ページ目の二つ目のグラフの大きさを変える動作をマクロに記録し、    ソレで確認するとはっきりします。    例えば、こんな記録が残ります。     ActiveWindow.Selection.SlideRange.Shapes("Picture 22").Select       With ActiveWindow.Selection.ShapeRange         .ScaleWidth 0.75, msoFalse, msoScaleFromBottomRight         .ScaleHeight 0.67, msoFalse, msoScaleFromBottomRight       End With  2)「二つ目のShape」が別のShapeであるパターン    一つ目のグラフを選択した状態にして、キーボードのTabキーを押すと    二つ目のグラフが選択された状態になって欲しいです。    これがグラフではなく他のモノにカーソルが飛んでいくなら、    グラフの間に別の何かが挟まっているという事ですね。     Sub test()       For i = 1 To ActivePresentation.Slides(2).Shapes.Count         Debug.Print ActivePresentation.Slides(2).Shapes(i).Name       Next     End Sub    こんな感じで名前を書きだしていくと、何かわかるかもしれません。 そして、残念な報告です・・ 2010でもご提示のコードで動いてしまいました・・ 2007だけ動かないと言うのもおかしな話ですが・・ 力及ばず、申し訳ありません。 傾向と対策が見つかることを祈っております。

pochi_-v-b
質問者

お礼

何度もご回答頂き本当に有り難うございます。 >1)もしかしたら、グラフが「Shapeとして認識されていない」パターン パワーポイント2007では、ご存知の通りマクロの記録機能が削除されてしまっております。 手元のPCでは確認出来ないのですが、何か機会を見つけて確認してみようと思います。 >2)「二つ目のShape」が別のShapeであるパターン tabをクリックしたところ、見事二つ目のグラフに飛んでくれました。 余計な文字やグラフを全て削除して、シンプルなファイルを作って実験してみたのですが、 それでも動いてくれませんでした。 これだけ色々とご指導頂いたにも関わらず、解決のご報告を差し上げられず、申し訳ありません。 もしかすると、mac book air上の仮想ソフト(virtual box)で作業を行っているから悪かったのかも しれません。 いずれにせよ、貴重なお時間を頂き有り難うございました! 心より感謝申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

> 2枚目のグラフは何の変化もおきません。 > エラーメッセージ: > Shapes(不明なメンバー):範囲外の整数2は次の有効な範囲にありません:1から1へ > ---------- すいません、確認ですが・・ 2枚目のスライドを表示しておいて、 Sub Test()   ActivePresentation.Slides(2).Shapes(2).Select End Sub これを実行すると、思惑の「二つ目のグラフ」が選択された状態になりますか?

pochi_-v-b
質問者

お礼

何度も回答ありがとうございます! エラー箇所を特定して頂きありがとうございました! ご指摘の通り、Testマクロを組みましたが、 "shape (不明なメンバー):無効な要求です。図形を選択するには、表示がアクティブでなければいけません" とのエラーメッセージが帰ってきました。 現在作っているファイルについて、特異な現象なのかと思い、新しくファイルを作り直して実験してみましたが、 やはり同様のエラーメッセージになります。 ググってみたのですが原因が分からず… http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/475ebd57-ace6-4705-b2b5-75addb5c2ccd/ 同様の悩みを抱えた人は見つけたのですが、ここで提示されている解決方法(Select しないで単にActiveにする)を 試しても、やはり動きませんでした。 何度もお答え頂き恐縮なのですが、理由など分かればお教え頂けませんでしょうか?? よろしくお願い致します。 なお、マクロを使って修正しようとしていた資料は、力技で(手作業で)完成させてしまいました。 もしも原因不明であれば、その旨一言書いて頂ければと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vba スライドに図形を挿入し文字を入力するには

    一番最後のスライドに、図形を挿入するところまでは出来たのですが その図形に文字を表示するにはどうすればいいでしょうか? Sub test() Dim myDocument As Variant i = ActivePresentation.Slides.Count Set myDocument = ActivePresentation.Slides(i) myDocument.Shapes.AddShape Type:=msoShapeRectangle, Left:=50, Top:=50, Width:=100, Height:=50 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" End Sub まではできたのですが、 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" がエラーになります。 別に図形ではなくてもテキストボックスが挿入できればそれでいいのですが、 図形の挿入の仕方しかわかりませんでした。

  • VBA グラフを複数作成する場合

    マクロにてグラフを複数作成しようと考えています しかし、ループを使用してグラフを作成すると 1つ以上の場合エラーになってしまい作成できません どのように作成したらよいのでしょうか? 2つ目以降のグラフObjectの名前が重なるからエラーになるとか、そういう部分での問題でしょうか? ------------------------------------- Sub Graph   For i = 1 To 2 'source_cnt   Call Make_Graph(引数)   Next End Sub ------------------------------------- Sub Make_Graph(引数) With ActiveSheet.ChartObjects.Add( _ Left:=Range(***).Left, _ Top:=Range(***).Top, _ Width:=Range(***).Width, _ Height:=Range(***).Height) .Chart.ChartType = xlRadar .Chart.SetSourceData Source:= Range(***), PlotBy:=xlColumns .Chart.Location Where:=xlLocationAsObject, Name:=WorkSheet.Name .Chart.HasLegend = False End With -------------------------------------

  • Excel VBA でグラフタイトルの位置変更

     Excelで作成したグラフのタイトルの、(左の位置や幅は文字数で違ってくるので、)TopとHeightを、VBAを使って変更しようと思っています。 それで、以下のようなコードを書いてみたのですが、 「引数の数が一致しません または不正なプロパティを使用しています」 とのエラーメッセージが出てしまい、実行できません。 ChartTitle.Left などの引数の型はDoubleのようなので、 ' Dim T, L, H, W As Double としてみましたが、変化はありません。 Sub ChangeChartTitlePos() 'Excel VBA でグラフタイトルの位置変更 ' Dim T, L, H, W As Double T = 2: L = 68.4: H = 26.4: W = 220 With ActiveChart.ChartTitle .Top = T .Height = H ' .Left = L ' .Width = W End With End Sub  どなたか解決方法をご教授頂ければ幸いです。  また、VBAを使わずにグラフのタイトルのTopとHeightを任意の値に変更する方法がありましたら、その方法も教えて頂ければと存じます。  よろしくお願いします。 追記  ちなみに、プロットエリアの変更は、以下のコードで処理できています。 Sub ChangePlotArea() With ActiveChart.PlotArea .Top = 36.4 .Left = 7 .Height = 190.6 .Width = 274.5 End With End Sub

  • Power Point 2007のマクロについて 

     はじめまして  業務効率化のためマクロを使うようになった初心者ユーザーです。  Power point2007を用いてすべてのページの画像を一括でサイズ変更と位置変更を行いたいと思っています。  見よう見まねで下記のようなマクロを組んでみたのですが、  タイトルテキストもサイズ変更されてしまうので除外したいのですが、どのようにすればよろしいでしょうか?  またこのサイズ変更した画像だけを他のpowerpointファイルに画像1枚1ページずつ自動で貼り付けたいのですが、その方法も教えてほしいです。  なお、他のファイルの既存スライドに貼り付けを行おうとしています。  (画像に関しての説明文書が既に記入済み)  お手間を取らせて申し訳ないのですが、迷える子羊に愛の手をお願いいたします。   Public Sub 画像サイズ変更と位置合わせマクロ() Dim i As Long For i = 1 To ActivePresentation.Slides.Count ActiveWindow.View.GotoSlide i ActiveWindow.Selection.SlideRange.Shapes.SelectAll With ActiveWindow.Selection.ShapeRange .Fill.Transparency = 0# .Height = 401# .Width = 687.09 .Left = 20# .Top = 56.62 End With Next End Sub

  • PowerPoint2003でノートを一括削除するVBA

    調べたところ Sub test() Dim i As Integer i = ActivePresentation.Slides.Count For i = 1 To i With ActivePresentation.Slides(i).NotesPage .Shapes.Placeholders(2).TextFrame.TextRange = "" End With Next i End Sub   というマクロでいけるそうなのですが、幾つか試すと 「実行時エラー '2147188160(80048240)」': Placeholders(不明なメンバー):範囲外の整数2は次の有効な範囲にありません:1から1へ」 というエラーで停まるものがあります。   これの回避方法をご存知の方がいたら教えてください。

  • グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値

    グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値などが異なる際は、 プロットエリアでは、幅が揃えられません。というのも、色々試した結果・・・ プロットエリアサイズは、数値軸の文字左側からグラフの右端までの長さを規定しているようなのです。 そこをグラフの箱部分のサイズを揃えることを可能にできないでしょうか? '// データを取得 With ActiveChart chtH = .Parent.Height chtW = .Parent.Width chtPH = .PlotArea.Height chtPW = .PlotArea.Width End With 現在上記のマクロで調整したグラフからサイズを取得し、他のグラフのデータを書き換えるという マクロを組んでいます。参考までにグラフを載せておきます。 この2つのグラフは、このマクロを使って揃えましたが、最大値が異なるため横幅が揃いません。 最大値を揃えると横幅が綺麗に揃います。しかしそのようにするとグラフが見難くなるためできません。 どなたかアドバイスをお願いします。 手動で揃えるには、大変な量なので・・・

  • EXCEL2007 VBA グラフサイズ修正バグ?

    下記のようなグラフのサイズ調整するVBAプログラムをEXCEL2007で動かしました。 VBEで実行すると正常に動作します。 シートに図形を設置し、その図形にマクロを登録して実行すると、 グラフが3画面位広がってしまいます。 図形にマクロ登録してグラフ調整を正常に動かすことはできないのでしょうか? ----------------------------------------------------- 'グラフの再調整を行うサブルーチン Sub chartRerange()  Dim wb As Workbook  Dim strWbName As String  Dim myRng1, myRng2, myRng3 As Range  Dim myChart As Shape  Dim rngTarget As Range      '開いているすべてのワークブックを処理対象とする  For Each wb In Workbooks   strWbName = wb.Name      '「月度」が含まれているならば処理   If InStr(strWbName, "月度") <> 0 Then    Set myRng1 = wb.Worksheets(2)    Set myRng2 = wb.Worksheets(3)        For Each myChart In myRng1.Shapes     'グラフならば     If (TypeOf myChart.OLEFormat.Object Is ChartObject) Then            Select Case myChart.Name       Case "chart1"        Set rngTarget = Range("B24:AG42")      End Select             'グラフを指定したエリアに配置する      With myChart        .Top = rngTarget.Top        .Left = rngTarget.Left        .Width = rngTarget.Width        .Height = rngTarget.Height      End With     End If    Next   End If  Next      MsgBox "処理完了"      Set wb = Nothing   Set myRng1 = Nothing   Set myRng2 = Nothing   Set myChart = Nothing   Set rngTarget = Nothing End Sub

  • Excelでグラフのサイズを揃える

    Excel97/2000のVBAを使って、埋め込みグラフのサイズなどを既存のグラフから設定を読み込み、別のグラフを同じサイズに設定するマクロを作成していますが、PlotAreaの位置と大きさだけがうまく動作しなくて困っています。 PlotAreaのWidth,Left,Height,Topの設定が上手くいかないのです。 ChartObjectのサイズより大きくWidthを設定できないとか、軸ラベルが入らないほど小さくは設定できないとかいうことは知っていて、そういう制限がないサイズや位置に設定しようとしても上手くいかない(たまに上手くいくときがあるのですが、どういう時に上手くいくのかはつかめていません) ネットで調べても、PlotAreaのサイズ設定に関しては、難儀している人が多く、上手くいったという話を見つけたことがありません。 PlotAreaの設定を上手くやる方法はあるのでしょうか?具体的なコツやポイントなどありますか?

  • エクセルで貼り付けた写真のサイズを減らすためにコピーしましたが、位置がうまく行きません

     以前、エクセルにマクロで貼り付けた写真のサイズを減らすために、コピーする方法を教えて頂いたのですが、 下のように書いたコードでは指定した位置にコピーの写真が貼り付きません。  どこがおかしいのでしょうか? sFile = pathname & "\" & filemei & ".jpg" Set myPic = ActiveSheet.Pictures.Insert(sFile) j = ((2 * i) \ 10) * 2 + 2 ←表示させたいセルの行 k = (2 * i) Mod 10 + 2   ←表示させたいセルの列 With myPic.ShapeRange   .Left = Cells(j, k).Left   .Top = Cells(j, k).Top   .LockAspectRatio = msoFalse   ' ↓サイズを指定   .Height = Cells(j, k).Height   .Width = Cells(j, k).Width End With myPic.Locked = True '上の写真をコピーして貼り付け、下の写真を削除する With myPic   .Copy   ActiveSheet.Pictures.Paste   .Left = Cells(j, k).Left   .Top = Cells(j, k).Top ←このセル位置にコピーを貼り付けたいのですが   '元の写真を削除   .Delete End With  以上のようなコードです。  コピー元の写真は指定どおりの位置に表示された後削除されますが、 コピーした写真は全て最初のコピー位置に張り付いてしまいます。  画像の扱いをよく理解していませんのでおかしな所も多々あると思いますが よろしくお願いします。

  • Excelマクロ・グラフエリア・プロットエリアのサイズを変更及び綺麗に並べる

    何方か、宜しくお願いします。 質問1 ワークシート上の複数のグラフを選択した状態でマクロを実効して 全てのグラフエリア・プロットエリアを同じサイズに変更するマクロを 教えて下さい。 (下記のコードでは、一つのグラフのプロットエリアのみ変更になります。) Sub グラフサイズ() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.PlotArea.Select 'プロットエリア With Selection .Top = 17 .Left = 27 .Width = 463 .Height = 330 End With Range("A3").Select End Sub (参考:http://oshiete.nikkeibp.co.jp/qa780484.html) 質問2 質問1で修正したグラフを3列、行数は任意でワークシート上に綺麗に並べたい のですが、どのようなコードでしょうか。?(グラフとグラフの間は5ポイント位 隙間を入れたいと思います。グラフ数は20~40位、Excel2000)

専門家に質問してみよう