2025/12/05
【Excel】表の順番をローテーション

【Excel】表の順番をローテーション

以下のように、特定の項目の、要素の順番を回転させる方法について、2通りで解説していきます。

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

ExcelVBAレベル確認

方法1

1つ目は、末尾のデータを切り取りして、先頭に挿入するという方法です。

まずは、末尾のデータを選択します。

次に、緑の枠の上にカーソルを移動させ、Shiftを押しながら先頭までドラッグすることで、簡単に切り取りと挿入を行うことができます。

しかし、この方法の場合、行数が多い表や複数項目を回転させる必要がある場合に、若干面倒になります。
そんな時は、次の方法が便利です。


方法2

2つ目は、並べ替え用の数値が入力された項目を用意し、その列を基準に並べ替えるという方法です。
具体的には以下のように、各行の行番号を常に表示し、末尾のみ「1」と表示されるような項目を数式で用意して、対象の項目のみを並べ替えます。

そのような特殊な項目は、以下の数式を入力することで実現できます。

=IF(ROW()=COUNTA($C$3:$C$17)+2,1,ROW())
// ROW()=COUNTA(…)+2:「数式を入力したセルの行番号」と「データの件数+2」が等しい
// 1:先ほどの条件を満たしたときに「1」を表示
// ROW():先ほどの条件を満たさない時に「数式を入力したセルの行番号」を表示

この数式を表の末尾までコピーすることで、各行の行番号、末尾のみ「1」と表示させることができます。

最後に、並べ替える対象の範囲(見出しを含む)のみを選択し、フィルターを設定します。

以上で、準備完了です。
番号が入力された列を基準に、フィルターボタンから昇順にすることで、データを回転することができます。

番号以外の項目に罫線を設定すると、表が見やすくなります。

▼サンプルファイル▼


方法2の注意点

フィルターを設定せずに、[データ]タブから並べ替えしてしまうと、以下のように、先頭列も並べ替えられてしまいます。

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()&"日"

まとめ

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

▼サンプルファイル▼

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. 完成

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

▼サンプルファイル▼