質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2962閲覧

PowerPoint VBAでSectionを使ったプログラム

yhaga

総合スコア6

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/08/01 18:09

添付のPowerPoint画像は、サンプルのPowerPointのファイルになります。
サンプルにはセクション(Section)が設定されてて、数字か✕が書いてます。
セクションの数字を昇順にソートしたものを新規ファイルとして保存したいです。
また、✕は対象から外す(新規ファイルには入れない)ことを考えております。
現状、API等理解できておらず、コーディングができておりません。
このあたりについて、お詳しい方がもしいらっしゃいましたら、ご教授頂きたくよろしくお願いいたします。サンプルコード等頂けたら大変ありがたいです。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

実装できました。
調査等頂いた方々、本当にありがとうございました。
大変参考になりました。
動いたソースが手元に無いので、頭の中で覚えている範囲で記載します。
なので、動くレベルのものでは無いです、イメージを記載しました。


// sectionNameが1~100を見越してループ
For i = 1 to 100
// sectionの数分ループ(Slideの数ではない)
For sectionCnt = 1 To ActivePresentation.SectionProperties.Count
// sectionの名前を取得
secName = ActivePresentation.SectionProperties.Name(sectionCnt)
// sectionの名前比較で同じなら、
// 対象のsectionのスライドをコピー&ペーストする。
if i.toString == secName Then
// 対象Sectionの先頭のスライドのindexを取得
secFirstSlide = ActivePresentation.SectionProperties.FirstSlide
// 対象Sectionのスライドの数を取得
secCount = ActivePresentation.SectionProperties.SlidesCount
// 対象セクションの先頭から最後までループ
For secSlideIdx = secFirstSilde to (secFirstSlide + secCount)
// コピー&ペースト
ActivePresentation.Slides(secSlideIdx).Copy
afterSlide.Slides.Paste
Next secSlideIdx
End if
Next sectionCnt
Next i


投稿2020/08/08 04:13

yhaga

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mako1972

2020/08/08 10:10 編集

自己解決されて素晴らしいですね。 報告もしっかりとありがとうございます。 誠実で、勉強になりましたよ。 私も少しまじめに勉強しますね。 同じような質問者がいたら回答者にまわってくださいね。 プレッシャーに勝ちましたね! (上目線の回答になり反省という・・・・)
yhaga

2020/08/08 11:20

正直、頂いたコードの案でSectionPropertiesを使うというのがかなりのヒントになりました。たぶんこれが無いとどのAPIを使うのか未だに模索していたのかもしれません…。本当に助かりました、ありがとうございました。
guest

0

レスがつかないようですので、調べた部分のみとなります。
全部ではありませんが。。。5枚スライドがあるとして入れ替えの前の判定VBAのサンプルを
作成してみました。イミディエイトウィンドウに判定の結果のみ表示されます。

また、スライドの移動は下記のような命令があるようですが、今回はデバック判定式のみとしています。

以上 よろしくお願いいたします。

ActivePresentation.Slides(番号).MoveTo toPos:=1

powerpoint

1 2Sub セクション名判定() 3 Dim i As Long 4 Dim myslideno As Long 5 Dim mysection As String 6 7 8 For i = 1 To ActivePresentation.Slides.Count 9 10 myslideno = i 11 mycection = ActivePresentation.SectionProperties.Name(i) 12 13 Debug.Print "スライド番号:" & myslideno; "-セクション内容" & mycection 14 15 If mycection = "×" Then 16 17 Debug.Print "★★並び替えしません!★★" 18 Else 19 20 Debug.Print mycection & "を並び替えしました!" 21 22 End If 23 Next 24 25End Sub

Excel VBAの書籍ばからみていましたが、本屋にいい本がありました。

いちばんやさしいPowerPoint VBAの教本 人気講師が教える資料作りに役立つパワポマクロの基本 「いちばんやさしい教本」シリーズ

投稿2020/08/02 01:27

編集2020/08/02 02:39
mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yhaga

2020/08/02 03:09

返信が遅くなり、大変申し訳ございません。早速、ご確認をありがとうございます。 今動かす環境にいないもので、申し訳ありませんが、別途動かして確認します。 また、本もあるんですね、Excel/Wordはよく見るのですが、、、会社帰りに本屋に寄ってみます。
yhaga

2020/08/02 11:38

ありがとうございます。動かしてみて少し理解できたと思います。引き続き、参考にさせて頂きながら作成してみます。
mako1972

2020/08/02 12:01

この辺が参考になると思います (個人的には初めから入れ替えすると挿入中にスライド番号が変わるので後ろからやるとかしないと 難しそうですね)。 powerpoint スライド順の総入れ替え https://oshiete.goo.ne.jp/qa/7275339.html
yhaga

2020/08/03 01:57

ありがとうございます。movetoで確かに移動はできるのですが、元ファイルをいじりたくないので、コピーアンドペーストでできないか模索中です。copy,pasteのapiがあったので使用するもコピーされず...(-_-;)
mako1972

2020/08/03 02:06

新規パワーポイントを作成してそちらに書き込むとかでしょうか。 セクション名を普段あまり使わないので挙動が読めないとことでした。
yhaga

2020/08/03 02:10

はい、新規に順番変えた版のファイルを保管しようと考えてました。ちなみにコピーアンドペーストはできました、申し訳ございませんm(_ _)m
mako1972

2020/08/03 02:18

可能な範囲でコードを掲載いただくとよろしいかと思います(スライドの内容はどうでもよく)。 ほしいのは、新規パワーポイントを作成してそちらにコピペして保存する コードということでしょうか。 少し調べてみます・・。
yhaga

2020/08/03 04:47

ありがとうございます。すいません、コードについては帰宅後記載できればと思います。 はい、元となるファイルは参照するだけで、新規に並べ替え版のファイルを作る想定でした、言葉足らずで申し訳ございませんでした。
yhaga

2020/08/03 05:39

セクションの数がスライドの数より少ないと落ちる?みたいでした。メモを残したかっただけでした。
yhaga

2020/08/03 12:07

コードうまく書けないので、イメージを記載してみました。伝わりにくかったらすいません。 ----- ReadするPowerPointファイルopen 新規作成PowerPointOpen及びslideをadd for i to 100 step 1 /* セクションの名前 */ if i == section then /* Sectionとiが同じ場合、対象のSlideを新規PowerPointに貼り付ける。 新規PowerPointファイルの最後に対象のSlideを貼り付ける end if next i 新規PowerPointファイルsave ----- また、対象のスライドがどのセクションに属しているのかが分かると嬉しいです。 頂いた例のAPIより、SlidesとSectionPropertiesでひっぱってきているので難しい?のかもしれません。
mako1972

2020/08/03 12:15 編集

なるほど。。。。私も素人ですので、少しお時間をいただければと思います。 一通り、ネットのサンプルを消化しながら、事例を収集している最中です。 もちろん、お詳しい方がいればそれに越したことはないと思います。 解決しないとモヤモヤしますよね。逆にお急ぎなのかとか気になるところですけど。 スライドをコピーできても、いかにセクションをコピーするかがむしろ課題でしょうか・・。
yhaga

2020/08/03 13:15

巻き込んでしまい申し訳ありません。ちなみに急ぎではございませんので、もしお時間ございましたらで、構いませんし、これまでサンプル頂けただけでも感謝です。セクションを選択すると対象のスライドが洗濯されctrl+c,ctrl+vで貼り付けられるのにー、と歯がゆい思いに。powerpointにもマクロの記録があればなーなんて思います。
mako1972

2020/08/03 13:26

私もマクロで自動記録できればと思います。 一方で、マスターできれば、仕組みがわかれば EXCELのデータ処理に比べと 簡単かもとか。 時間いただけるなら日々データ収集しますので。
yhaga

2020/08/03 18:35

お手数をおかけします。ステップ数は少ないだけになぜ進んでいないかを、いつも問われます、上の方に。どうしたら分かってくれるのか...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問