SSブログ

excel SMALL 関数:昇順で指定した順位の値を取得する [excel]

excel SMALL 関数:昇順で指定した順位の値を取得する

はじめに

excelの SMALL 関数の使い方を紹介します。

SMALL 関数は昇順で指定した順位の値を取得します。1, 2, 3 のような順番が昇順です。

条件に一致する中での順位の値を取得方法も紹介します。

降順の順位の値を取得するには「LARGE 関数」を使用します。

順位を比率で指定して取得するには「PERCENTILE 関数」を使用します。

構文

SMALL(範囲, 順位)

範囲の中から昇順の順位の値を取得します。

引数「範囲」 セルの範囲、数値を指定できます。

引数「順位」 引数「範囲」の中から取得する順位を指定します。

使用例

excelセルの範囲「B2」~「B6」で 1 番目に小さい値を取得する。

=SMALL(B2:B6,1)

"excel2021508-426-1"
excel2021508-426-1.jpg
セル「C3」の順位の値を取得する。

=SMALL($B$4:$B$8,C3)

"excel2021508-426-2"
excel2021508-426-2.jpg
解説

引数「範囲」に数値以外の値を指定したときはエラー#NUM!になります。数値が 1 つでも含まれていればエラーにはなりません。

引数「順位」に引数「範囲」の個数を超える値を指定したときはエラー#NUM!になります。引数「範囲」に 3 個の値を指定したときに引数「順位」に指定できる値は1 ~ 3です。

同率順位の値があるときは、その順位でも次の順位でも値を取得できます。次のように 2 位が複数あるときは、2 位でも 3 位でも取得できます。

"excel2021508-426-3"
excel2021508-426-3.jpg
条件に一致した順位の値を取得する

グループごとの順位を指定したいときなど条件を付けるには「条件に一致する順位の値を取得する」をご覧ください。
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

PPT スライド番号付き目次を自動作成するPowerPointマクロ [PPT]

PPT スライド番号付き目次を自動作成するPowerPointマクロ

アクティブスライドの前に目次スライドを作成するマクロ

スライドが1枚選択された状態で以下のマクロを実行すると、そのスライドの前に新規スライドが挿入され、目次が自動的に作成されます。

"PPT-2021-5-8 291-1"
PPT-2021-5-8 290-1.jpg
アクティブスライド以降のスライドの、タイトルプレースホルダーに入力されている文字列と、スライド番号が目次項目になります。

サンプルマクロで行っている処理

拙著『いちばんやさしいPowerPoint VBAの教本』のLesson 54で、タイトルをイミディエイトウィンドウに出力するPowerPointマクロを作成しています。

上記のマクロは、その発展形と言えます。

目次用スライドの挿入

まずアクティブなスライドの前に、目次用のスライドの挿入を行います。

目次用スライドの挿入時等に利用するために、アクティブスライドのSlideIndexを取得して、変数active_idxに格納します。

  Dim active_idx As Long

  active_idx = ActiveWindow.Selection.SlideRange.SlideIndex

ここで使っている「ActiveWindow.Selection.SlideRange」は、拙著P.123のワンポイントで簡単にご紹介しているアクティブなスライドを表すSlideRangeオブジェクトを取得するコードです。

SlideRangeオブジェクトはSlidesコレクションとSlideオブジェクトの特徴を併せ持つオブジェクトで、Slideオブジェクトと同様に何枚目のスライドかを表す数値を取得するSlideIndexプロパティを持っています(拙著Lesson 26参照)。

"PPT-2021-5-8 291-2"
PPT-2021-5-8 290-2.jpg
Lesson 29で解説しているSlides.Addメソッドで、アクティブスライドの前に目次作成用のスライドを挿入して、

  With ActivePresentation.Slides

   Dim target_slide As Slide

   Set target_slide = .Add(Index:=active_idx, Layout:=ppLayoutText)




Lesson 53でお伝えしているShapes.Titleプロパティ等を利用して、タイトルを「目次」と設定しています。

   target_slide.Shapes.Title.TextFrame.TextRange.Text = "目次"

目次項目にする文字列の作成

目次用のスライドを挿入したら、アクティブスライド直後から最後のスライドまでFor~Nextループを回して、

  Dim i As Long

  For i = active_idx + 1 To .Count

   Dim txt As String

   With .Item(i)

タイトルプレースホルダーの文字列を変数txtに格納します。タイトルプレースホルダーがないときや、タイトルプレースホルダー内に文字列がない場合には「(タイトルなし)」を代入しています。

    If .Shapes.HasTitle Then

     txt = .Shapes.Title.TextFrame.TextRange.Text

     If Trim(txt) = "" Then

      txt = "(タイトルなし)"

     End If

    Else

     txt = "(タイトルなし)"

    End If

変数txtに格納したタイトルプレースホルダー等の文字列と、スライド番号をタブ文字(vbTab)を挟んで連結し、末尾には改段落するためのvbNewLineを連結します。

    txt = txt & vbTab & .SlideNumber & vbNewLine

タイトルプレースホルダー等の文字列とスライド番号の間に、タブ文字を入れることで、PowerPoint上のルーラーを使ってスライド番号を揃えやすくしています。

目次項目の作成

変数txtが準備できたら、Lesson 46では紹介するに留めているTextRange.InsertAfterメソッドで目次項目を作成しています。

    target_slide.Shapes.Placeholders(2).TextFrame _

      .TextRange.InsertAfter NewText:=txt

TextRange.InsertAfterメソッドの引数は1つしかないので名前付き引数にする必要はないと言えばないのですが、

"PPT-2021-5-8 291-3"
PPT-2021-5-8 290-2.jpg
長いオブジェクトを取得するコードに、標準引数が以下のようにポツンとかかれていると、

    target_slide.Shapes.Placeholders(2).TextFrame _

      .TextRange.InsertAfter txt

どうもバランスが悪く感じるので、ここでは名前付き引数で指定しています。

こういうときにもVBAが、戻り値を使う/使わないに関わらずプロパティやメソッドでも引数を必ずカッコで括るルールだったら良かったのに、と私は感じます。

エラー処理について

スライドが選択されていないときには実行時エラーが発生してしまうので、

  On Error GoTo ErrHandl

  ErrHandl:

   MsgBox "スライドを1枚選択しておいてから実行してください。"

とエラートラップを行っています。
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。