2025/12/02
【Excel】図形の幅ギリギリまでテキストを表示

【Excel】図形の幅ギリギリまでテキストを表示

図形にテキストを入力すると、以下のように、「余白が広すぎて全体が表示されない」といったことがあります。

実は、ある設定を行うことで、図形の幅ギリギリまでテキストを表示することができるようになります。
今回は、その方法について紹介していきます。


設定手順

まずは、対象の図形の書式設定を開きます。

次に、[サイズとプロパティ]の[テキストボックス]を展開して、[テキストを図形からはみ出して表示する]にチェックし、[図形内でテキストを折り返す]のチェックを外します。

そして最後に、テキストを中央揃えにします。

以上で、設定完了です。
手動で改行する必要はありますが、図形の幅ギリギリまでテキストを表示することができます。

2025/11/29
【便利】シートの表示切り替えフォームを自作

【便利】シートの表示切り替えフォームを自作

#ユーザーフォーム #UserForm_Initialize #If #For #Visible

YouTubeで開く

シートの表示非表示を瞬時に切り替えられる専用フォームの開発手順になります。
こちらのフォームを開発し、「アドイン」として設定することで、マクロ有効ブックでなくても全てのExcelファイルで使用することができるようになります。

>アドインの保存方法と設定方法

00:00 挨拶
00:15 完成イメージ
00:55 準備
01:12 作成(準備)
01:47 作成(フォーム外部)
03:16 作成(フォーム内部:シート名の表示)
06:34 作成(フォーム内部:シート表示切替)
11:27 作成(フォームの呼び出し)
12:13 作成(クイックアクセスツールバー)
13:55 完成
15:12 プログラムの全体
18:04 プレゼントについて

▼準備ファイル▼

2025/11/28
【Excel】予定表から「次回の予定」を抽出(XLOOKUP)

【Excel】予定表から「次回の予定」を抽出(XLOOKUP)

以下のように、予定表から「次回の予定」と「次回の予定までの日数」をXLOOKUP関数で抽出する方法について紹介していきます。

※上記の「2025/11/17」は基準の日付になります。
※こちらで作成したファイルは、記事の最後にて配布しています。


1. 次回の予定の抽出

まずは、次回の予定を抽出します。
そのために、次回の予定の基準となる日付(本日の日付)をTODAY関数で表示しておきます。

=TODAY()

では、表示した日付を基準に、次回の予定を抽出していきます。

抽出対象の予定は、基準の日付以上で最も近い日付の予定になります。
その内容を、以下のようにXLOOKUP関数で指定します。
※以下の数式では、抽出した予定に「まで」という文字列を加えています。

=XLOOKUP(B2,予定表!A:A,予定表!B:B,"",1)&"まで"
// B2:検索値(日付のセル)
// 予定表!A:A:予定表の日付の列
// 予定表!B:B:予定表の予定の列
// "":対象の予定が見つからない時に表示する値(空)
// 1:一致モード(完全一致または次に大きい項目)
// &"まで":抽出された予定に「まで」という文字列を加える

このように抽出することができます。
基準の日付をセルに表示したくない場合は、検索値の「B2」に直接TODAY関数を指定してもよいです。

=XLOOKUP(TODAY(),予定表!A:A,予定表!B:B,"",1)&"まで"

2. 次回の予定までの日数

次に、次回の予定までの日数を抽出します。
しかし、予定表の中には、次回の予定までの日数が表示されていないため、少し計算が必要です。

そのため、まずは、以下のように次回の予定の日付を抽出します。

=XLOOKUP(B2,予定表!A:A,予定表!A:A,"",1)
// 予定表!A:A:検索範囲と戻り範囲を同じにする

また、上記のように、日付ではなくシリアル値として表示します。
日付が表示された場合は、表示形式を「標準」に戻すことでシリアル値になります。

次回の予定までの日数は、抽出されたシリアル値から基準の日付のシリアル値を引いた数になります。
そのため、先ほどの抽出された数値からセルB2の日付を引きます。
※以下の数式では、求めた日数の前後に「残り」と「日」という文字列を加えています。

="残り"&XLOOKUP(B2,予定表!A:A,予定表!A:A,"",1)-B2&"日"
// "残り"&:求めた日数の先頭に「まで」という文字列を加える
// XLOOKUP(…)-B2:次回の予定までの日数
// &"日":求めた日数の末尾に「日」という文字列を加える

このように、求めることができます。
基準の日付をセルに表示しない場合は、「B2」を引くのではなく直接TODAY関数を引いてもよいです。

="残り"&XLOOKUP(B2,予定表!A:A,予定表!A:A,"",1)-TODAY()&"日"
ExcelVBAレベル確認

まとめ

以上の手順で、予定表から「次回の予定」と「次回の予定までの日数」を抽出することができます。

▼サンプルファイル▼

2025/11/25
【Excel】XLOOKUPがVLOOKUPより便利な点(3選)

【Excel】XLOOKUPがVLOOKUPより便利な点(3選)

Excel2021以降で使用できるXLOOKUP関数は、VLOOKUP関数の欠点を解消しています。
その中で、特にVLOOKUP関数よりも便利に感じた点を3つ紹介していきます。


便利に感じた点①

1つ目は、検索値の項目の位置が自由になったという点です。
VLOOKUP関数では、必ず検索値の項目が指定した表の一番左側にある必要がありました。
しかし、XLOOKUP関数では、検索値の項目と抽出する項目を別々で指定するため、表の一番左側にある必要がなくなりました。


便利に感じた点②

2つ目は、抽出する項目の位置を列番号で指定する必要がなくなったという点です。
VLOOKUP関数では、抽出する項目の位置を、指定した表の先頭からの列番号で指定する必要がありました。
しかし、XLOOKUP関数では、抽出する項目を直接指定するだけでよくなりました。


便利に感じた点③

3つ目は、IFERROR関数などでエラー対策をする必要がないという点です。
VLOOKUP関数では、検索条件に合う抽出対象が存在しない時は「#N/A」というエラーになってしまいました。
そのため、エラーではなく「なし」のような別の文字を指定するには、IFERROR関数などを組み合わせて実現していたかと思います。
しかし、XLOOKUP関数には、「見つからない場合」という引数が追加され、IFERROR関数などを組み合わせる必要がなくなりました。


まとめ

今回紹介した3つ以外にも、XLOOKUP関数には多くの魅力があります。
XLOOKUP関数が使える環境の方で使ったことがない方は、ぜひ使ってみてください。

動画でも解説しています。

>今後主流の「XLOOKUP関数」の魅力とは

2025/11/22
【業務】入力ミスを確実に防ぐ「自動保護機能」

【業務】入力ミスを確実に防ぐ「自動保護機能」

#シートの保護 #シートモジュール #Worksheet_BeforeDoubleClick #Worksheet_Change #Protect #If #For #Locked

YouTubeで開く

「表にデータを入力するときに、誤って別の行を操作してしまう…」
そのような入力ミスを確実に防ぐ仕組み(自動保護機能)について解説しています。

00:00 挨拶
00:25 完成イメージ
01:46 準備
02:19 作成(シートの準備)
04:20 作成(行の自動保護)
12:06 作成(行の保護の切り替え)
17:17 完成
18:19 プログラムの全体
21:44 プレゼントについて

▼準備ファイル▼

2025/11/21
【ExcelVBA】円グラフでルーレットを実現

【ExcelVBA】円グラフでルーレットを実現

以下のような「円グラフを活用したルーレット」を作成する方法について紹介していきます。

※こちらで開発したファイルは、記事の最後にて配布しています。


1. 準備

以下の円グラフは、上の表(「はずれ」と「あたり」の割合)をもとに作成しています。
また、「▼」は別で作成した図形を重ねています。

上の表の「あたり」の割合は、以下のような数式で求めています。

=1-C3
// 1と「はずれ」の割合の差

そのため、「はずれ」の割合を変更するだけで、「あたり」の割合が自動で設定されます。


2. 実現方法

今回は、円グラフの「グラフの基線位置」を活用して、ルーレットを実現していきます。

円グラフは、「データ系列の書式設定」にある「グラフの基線位置」を変更することで回転させることができます。

こちらの値を、マクロで操作することで実現していきます。

ExcelVBAレベル確認

3. コードの記述

以下のコードを記述します。

Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub Roulette()
    
    Dim ch As Chart
    Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
    
    Dim startN As Long, lastN As Long
    startN = ch.ChartGroups(1).FirstSliceAngle
    lastN = Int((360 + 1) * Rnd) + 360 * 6
    
    Dim n As Long
    n = startN
    Do While n < lastN
        DoEvents
        ch.ChartGroups(1).FirstSliceAngle = n Mod 360
        Sleep 5
        If lastN - n > 360 * 3 Then
            n = n + 10
        Else
            n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
        End If
    Loop
    
End Sub

では、コードについて解説していきます。
※複雑なコードのため簡単に解説します。

Option Explicit

変数宣言を強制する際に記述するものです。
変数宣言を省略したい場合は、記述する必要はありません。

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Windows APIにある「Sleep」というプロシージャを使えるようにするための宣言です。

    Dim ch As Chart
    Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
    
    Dim startN As Long, lastN As Long
    startN = ch.ChartGroups(1).FirstSliceAngle
    lastN = Int((360 + 1) * Rnd) + 360 * 6

対象のグラフを変数「ch」に割り当てて、そのグラフの基線位置を変数「startN」に格納しています。
変数「lastN」には、6周分の角度に、ランダムな角度を加えた角度を格納しています。
変数「lastN」が、回転を止める位置になります。

    Dim n As Long
    n = startN
    Do While n < lastN
        '省略
    Loop

変数「n」に変数「startN」の値を格納し、その変数「n」の値が変数「lastN」の値より小さい間、「Do」から「Loop」の中を繰り返し実行します。

        DoEvents
        ch.ChartGroups(1).FirstSliceAngle = n Mod 360
        Sleep 5
        If lastN - n > 360 * 3 Then
            n = n + 10
        Else
            n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
        End If

繰り返しの中では、変数「n」の値を徐々に増やしています。
処理の流れは、以下になります。

1.変数「n」の値(角度)をグラフの基線位置に反映(0~359の間になるように360で割った余りを活用)
2.5ミリ秒(0.005秒)停止

この次が少しだけややこしくなります。
ルーレットでは、回転が徐々に減速する演出にするために、以下のような処理にしています。

残りの回転角度が3周より多い場合は、変数「n」に10を加算
そうでない場合は、徐々に加算する数を減らす
ExcelVBAレベル確認

4. ボタンの作成

記述したプロシージャ(Roulette)を割り当てたボタンを作成します。
こちらでは、立体的な見た目の図形(四角形:角度付き)を挿入して、その図形に割り当てています。


5. 完成

以上の手順で完成です。
作成したボタンをクリックすることで、円グラフが回転します。

▼サンプルファイル▼

2025/11/18
【Excel】タスク管理表から完了日順に抽出

【Excel】タスク管理表から完了日順に抽出

以下のようなタスク管理表から、直近に完了したタスクをすぐに確認したいとき、ぱっと見では分かりづらいです。

とはいえ、毎回並べ替えするのも面倒…

ということで今回は、数式で完了したタスクのみを完了日順に抽出する方法について紹介していきます。


1. 完了したタスクを抽出する

今回の場合、以下の表の、完了日の項目に値が入力されているタスクが「完了したタスク」になります。

そのため、完了日に何かしら値が入力されている行のみを「FILTER関数」で抽出します。

タスク管理表(見出し行を除く)が3行目から27行目まで用意されている場合の数式は、以下になります。

=FILTER(B3:E27,E3:E27<>"","")
// B3:E27:抽出対象の項目の範囲(タスク管理表のデータの範囲)
// E3:E27<>"":抽出条件(完了日の項目が空でない)
// "":対象が見つからない場合に表示する値(何も表示しない)

上記の数式で、完了したタスクのみを抽出することができます。


2. 完了日を基準に降順にする

次に、先ほど抽出した「完了したタスク」を、「SORT関数」で完了日を基準に降順にします。

その数式は、以下になります。

=SORT(FILTER(B3:E27,E3:E27<>"",""),4,-1)
// FILTER(B3:E27,E3:E27<>"",""):並べ替え対象の表(FILTER関数で抽出した表)
// 4:並べ替える基準の列(完了日の項目は先頭から4列目)
// -1:順序(降順)

上記の数式で、完了日を基準に降順にすることができます。

2025/11/15
【業務】消しても復活する数式(直接入力も可能)

【業務】消しても復活する数式(直接入力も可能)

#シートモジュール #Worksheet_Change #For #If #ClearContents

YouTubeで開く

消しても自動で復活する数式の実現方法について解説しています。
数式による結果を使わないイレギュラーがあるときに、直接入力して対応することができますし、誤って数式を削除してしまっても問題ございません。
こちらでは、注文書(請求書)のフォーマットを用いて解説しています。

00:00 挨拶
01:09 完成イメージ
02:45 準備
03:21 作成(消しても復活する数式)
13:28 完成
15:23 プログラムの全体
17:12 プレゼントについて

▼準備ファイル▼

2025/11/14
【Excel】抽出データの増減に合わせて罫線を自動設定

【Excel】抽出データの増減に合わせて罫線を自動設定

以下のように、FILTER関数などを用いた数式でデータを抽出し、その抽出された表のサイズに合わせて罫線を設定してしまうと、抽出されるデータの件数が変わった時に罫線が合わなくなってしまいます。

そこで今回は、数式でデータを抽出する際に、その抽出されたデータの件数に合わせて罫線を自動で設定する方法について紹介していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。


1. データの間の罫線を点線にする

こちらでは、以下のように、データの間の罫線を点線に、末尾の罫線を実線にしていきます。

まずは、データの間の罫線を点線していきます。

データの増減に合わせて罫線などの書式を自動で変更するには、「条件付き書式」を活用します。

はじめに、見出し以外の罫線が設定されていない状態にし、今後データが追加されることを考慮したデータの範囲のみを選択します。

次に、[ホーム]タブから[条件付き書式]の[新しいルール]を選択します。

表示された以下の設定画面で、[ルールの種類]を[数式を使用して、書式設定するセルを決定]にします。

次に、表示されたテキストボックスに、点線の罫線を設定する条件式を入力します。

今回の表では、「No」の値の有無で判断していきます。
点線の罫線を設定するときとは、「No」が表示されているときになります。
そのため、以下の条件式を入力します。

=$A5<>""
// A5は選択基準のセル
// 他の選択範囲に反映する際に、A列を固定するため、Aに「$」を指定

次に、[書式]を選択し、[罫線]タブから下側の罫線を点線にします。

上記の内容で確定することで、データが存在する行の下側に点線の罫線を設定することができます。


2. データの末尾の罫線を実線にする

次は、データの末尾の罫線を実線にしていきます。

初めに、先ほどと同じ範囲を選択し、条件付き書式の設定画面を開きます。

次は、罫線を実線にする条件式を入力します。

こちらも先ほどと同様に、「No」の値の有無で判断していきます。
実線の罫線を設定するときとは、「No」が表示されていて、かつ、その次の行の「No」が表示されていないときになります。
そのため、以下の条件式を入力します。

=AND($A5<>"",$A6="")
// A5は選択基準のセル
// A6は選択基準の下のセル
// 他の選択範囲に反映する際に、A列を固定するため、Aに「$」を指定

次に、[書式]を選択し、[罫線]タブから下側の罫線を実線にします。

上記の内容で確定することで、表の末尾に実線の罫線を設定することができます。


3. 完成

以上の内容で完成です。
数式によって抽出されたデータの増減に合わせて、罫線が自動で設定されます。

▼サンプルファイル▼

2025/11/11
【Excel】新機能『TRIM参照』が便利すぎた

【Excel】新機能『TRIM参照』が便利すぎた

以下の表の「合否」の項目には、数式が入力されています。

この数式の場合、表示する行全体(C3~C9)に、数式をコピーする必要があります。

そこで今回は、数式をコピーする必要のない、新機能『TRIM参照』を活用した方法について紹介していきます。


スピルの活用

まずは、スピルを活用した数式に修正します。
スピルとは、数式を入力したセルから、結果を展開して表示する機能です。

>スピルについての詳しい解説はこちら

以下の表の場合、結果を9行目まで表示させる必要があります。

そのため、「合否」の先頭のセルに、以下のスピルを活用した数式を入力します。

=IF(B3:B9>=60,"合格","不合格")

ただ、このままだと、10行目以降にデータが追加された際に、毎回手動で数式を更新する必要があります。
とはいえ、以下のように、予め大きめの範囲を指定すると、データがない行まで計算処理が行われてしまいます。

=IF(B3:B100>=60,"合格","不合格")

無駄な行まで計算処理が行われると、ファイルの計算処理が重たくなってしまう原因にも繋がりかねません。


TIRM参照の活用

そこで、新機能の「TRIM参照」を活用します。
TRIM参照とは、指定した範囲の先頭や末尾から空白を除外した範囲を参照する参照方法です。

>TRIM参照についての詳しい解説はこちら

以下のように、「:」の後に「.」を加えます。

=IF(B3:.B100>=60,"合格","不合格")

たったこれだけで、以下のように、「B3~B100」の末尾の空白セルを除外した範囲のみを指定して計算することができます。

TRIM参照を活用することで、データの追加にも対応することができます。

2025/11/08
【2-数式26】LET関数の使い方と活用例

【2-数式26】LET関数の使い方と活用例

#LET #XLOOKUP #IF #名前の定義

YouTubeで開く

LET関数の使い方と便利な活用例について解説しています。
LET関数を活用することで、「数式の可読性の向上」や「処理速度の向上」が期待できます。

00:00 挨拶
00:17 そもそもLET関数とは
02:19 数式が読みやすくなる
04:49 処理の高速化が期待できる
08:07 まとめ
08:48 プレゼントについて

2025/11/07
【ExcelVBA】今月のシートのみを瞬時に表示

【ExcelVBA】今月のシートのみを瞬時に表示

以下のように、「表示切替」ボタンを押すことで、複数あるシートから今月のシートのみを表示することができ、再度ボタンを押すことで、すべてのシートを表示することができる仕組みの実現方法について紹介します。

※こちらで開発したファイルは、記事の最後にて配布しています。


1. 開発準備

今回は、以下のように「1月」から「12月」という名前のシートが含まれるブックに対して実現していきます。

また、「設定」シートの「表示切替」ボタンを配置する予定のセルに、「TRUE」もしくは「FALSE」と入力します。

この値は、現在のシートの状態を表しています。
「TRUE」ならば、すべてのシートが表示されている状態、「FALSE」ならば、一部のシートが非表示の状態になります。
※仕組みを実装する前は、シートの状態に関係なく「TRUE」もしくは「FALSE」の値を入力しておきます。

次に、[開発]タブを選択し、[マクロ]を選択します。

以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「ToggleSheetView」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

ExcelVBAレベル確認

2. コードの記述

以下のコードを記述します。

Sub ToggleSheetView()
    
    Dim ws As Worksheet
    Set ws = Worksheets("設定")
    
    Dim m As Long
    m = Month(Date)
    
    Dim ckRng As Range
    Set ckRng = ws.Range("B3")
    ckRng.Value = Not ckRng.Value
    
    Dim i As Long
    For i = 1 To 12
        On Error Resume Next
        With Worksheets(i & "月")
            If i = m Or ckRng.Value Then
                .Visible = xlSheetVisible
            Else
                .Visible = xlSheetHidden
            End If
        End With
        On Error GoTo 0
    Next i
    
    ws.Activate
    
End Sub

では、コードについて解説していきます。

    Dim ws As Worksheet
    Set ws = Worksheets("設定")
    
    Dim m As Long
    m = Month(Date)

シート情報を割り当てる用の変数(ws)を用意し、ボタンを配置する予定の「設定」シートを割り当てています。
次に、現在の月を格納する用の変数(m)を用意し、現在の月を格納しています。

    Dim ckRng As Range
    Set ckRng = ws.Range("B3")
    ckRng.Value = Not ckRng.Value

シートの表示非表示の状態を表す値が入力されたセルの情報を割り当てる用の変数(ckRng)を用意し、対象のセル(「設定」シート(ws)のセルB3)を割り当てています。
そして、その対象のセルの現在の値を、「TRUEならばFALSE」、「FALSEならばTRUE」と反転させています。

    Dim i As Long
    For i = 1 To 12
        On Error Resume Next
        With Worksheets(i & "月")
            '省略
        End With
        On Error GoTo 0
    Next i

繰り返し処理で使う用の変数(i)を用意し、Forで「1」から「12」まで1つずつ繰り返しています。
「For~Next」の中では、「1月」から「12月」のシートを1つずつ繰り返しています。

「Worksheets(i & “月”)」と直接シート名で指定しているため、対象のシート名のシートが存在しないときにエラーになってしまいます。
その対策として、「On Error Resume Next」と「On Error GoTo 0」を記述しています。
「On Error Resume Next」で、それ以降でエラーになった際に、エラーを飛ばして処理を実行することができます。
「On Error GoTo 0」で、「On Error Resume Next」の設定を解除しています。

            If i = m Or ckRng.Value Then
                .Visible = xlSheetVisible
            Else
                .Visible = xlSheetHidden
            End If

Withの中で、「繰り返された対象の月と実行したときの月が同じ場合」、もしくは、「シートの表示非表示の状態を表すセルの値がTRUEの場合」は、繰り返された対象の月のシートを表示しています。
それ以外の場合は、繰り返された対象の月のシートを非表示にしています。

※「With」から「End With」で囲まれている範囲内は、「With」で指定した情報を省略して「.」から記述することができます。

    ws.Activate

シートの表示非表示を切り替える処理で、選択されているシートが変わってしまうことがあるため、最後に「設定」シートを選択しています。


3. ボタンの作成

コードが完成したら、実行用のボタンを用意します。
ボタンは、[開発]タブの中の[挿入]から作成することができます。

ExcelVBAレベル確認

4. 完成

以上の手順で完成です。
「設定」シートに配置した「表示切替」ボタンを押すことで、シートの表示非表示を切り替えることができます。

▼サンプルファイル▼