読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

Powerpoint VBA 上付き文字を少し上げるコード

とても忙しい日々が続いていて,職場ではデータ処理にまたコレクションオブジェクトやthomさん達に教えていただいて作れたソートのコード等を用いてデータ処理をしている日々です。

年度末は大変。。

そうやって忙しい日々を過ごしつつ,次年度のことも近づいてきますので,そちらにも思いを馳せないといけません。

来年度はまた新しいことがやれるのかな。力を蓄えないと,教材も作らないと,いろいろ絵も描かないと,と気はあせるんですが,まったく時間はありません。

コレクションを用いてデータ処理をする方法は抽出やソートを自在にやれ,とても便利なことこの上ありません。

これもきちんと見直したいんですけどね。いろいろ いろいろ 手をだし頭を使い,としているのですでに飽和状態。

いつか整理する時間を取らないといけませんね。。


ネタを考える暇も,正規表現の勉強をする暇もありませんでしたので,かなり以前作ったコードを探してきました。


それは,地味~なコードです。

f:id:chemiphys:20170309222002p:plain

なんの変哲もない,簡単な数式です。みなさんはこの数式を見てどう思われますか?私は若干不服です。

f:id:chemiphys:20170309222507p:plain

違いが伝わりますでしょうか。ちょっと上付き文字が上に上がっているんです。

f:id:chemiphys:20170309222647p:plain
パワーポイントでは,WordやExcelと違い,上付き文字の相対位置が調節できます。

デフォルトは30%です。

わたしの感覚では,ちょっと目立たない。職業的に指数なのかそうでないかというのは,きっちり伝えたいので,ちょっと30%では物足りなく,50%にしたいなと思います。

デフォルト値をいじれればいいんですが,そういう設定はなさそうです。

なので,マクロで作りました。もう1年位前です。今ならもっときれいに組めるのかな。。パワーポイントのマクロが全く理解できていない時にトライアンドエラーで組んだやつです。

Sub SuperScript50All()

    Dim x As Slide
    Dim y As Shape
    Dim z As Table
    Dim zRow As Integer
    Dim zCol As Integer
    Dim rng As TextRange
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim cntHit As Integer
    
    
    cntHit = 0
    For Each x In ActivePresentation.Slides
        For Each y In x.Shapes
            If y.HasTextFrame Then
                Set rng = y.TextFrame.TextRange
                    For i = 1 To rng.Length
                        If rng.Characters(i).Font.Superscript = msoTrue Then
                            rng.Characters(i).Font.BaselineOffset = 0.5
                            cntHit = cntHit + 1
                        End If
                    Next
                    
            End If
        Next
    Next
        
    For Each x In ActivePresentation.Slides
        For Each y In x.Shapes
            If y.HasTable Then
            Set z = y.Table
            zRow = z.Rows.Count
            zCol = z.Columns.Count
            
                For j = 1 To zRow
                    For k = 1 To zCol
                        With z.Cell(j, k).Shape.TextFrame.TextRange
                            For i = 1 To .Length
                                If .Characters(i).Font.Superscript = msoTrue Then
                                    .Characters(i).Font.BaselineOffset = 0.5
                                    cntHit = cntHit + 1
                                End If
                            Next
                        End With
                    Next
                Next
            End If
        Next
    Next
    MsgBox ("上付き文字は" & cntHit & "個あり、相対位置を50%に設定しました。")
    
    
End Sub

ちゃんと見直さないといけないですね。ループ,スゴイ深さだ。。

イチオウツカエマシタヨ。。