2024/08/26
【Excel】指定時間を自動で色付け「シフト表」

【Excel】指定時間を自動で色付け「シフト表」

Aならば9:00-14:00、Bならば14:00-20:00、Cならば9:00-20:00などとパターンが決まっている場合で、A~Cなどの文字を指定するだけで対象時間を色付けする仕組みの作成方法について解説していきます。

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

ExcelVBAレベル確認

条件付き書式の活用

では、以下の表を用いて解説していきます。

こちらの表は、セルB3~H3にA~Cの文字を指定することで、各列の対象時間を色付けする想定で用意されたものです。
A~Cに割り当てられた時間は以下の通りです。

A:9:00-14:00
B:14:00-20:00
C:9:00-20:00

まずは、「A」という文字が入力された場合に、「A」の対象時間(9:00-14:00)を色付けする設定から行います。
このような設定は「条件付き書式」を活用します。

初めに、表のAの対象時間を以下のように選択します。

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

条件付き書式の設定画面が表示されましたら、[ルールの種類]を[数式を使用して、書式設定するセルを決定]にし、[ルールの内容]には選択基準のセル(こちらの場合はセルB5)に対しての条件式を入力します。

基準のセルを色付けする条件は以下になります。

・基準の列の3行目のセルに「A」と入力されている場合

この内容を条件式で表現すると以下のような式になります。

=B3="A"
// 選択基準のセルがB5の場合

この式に関しては、他の選択しているセルにも相対参照で反映されます。
つまり、セルC5を色付けする条件式は「=C3=”A”」、セルC6を色付けする条件式は「=C4=”A”」になります。

ただ、「=C4=”A”」というように他の行を参照している条件式は正しくありません。
そのため、参照する行番号に関しては固定する必要があるので、以下のように行番号の隣に「$」を加えた条件式を入力します。

=B$3="A"

条件式の入力ができましたら、[書式]を選択し好みの書式を設定することで、「A」が入力されている列に対して自動で色付けすることができます。

「A」を入力すると以下のように反映されます。

ExcelVBAレベル確認

「B」と「C」に関しても同様に設定します。

・B:セルA15~H26を選択 → 条件付き書式にて条件式「=B$3=”B”」を設定
・C:セルA5~H26を選択 → 条件付き書式にて条件式「=B$3=”C”」を設定

A~Cなどとパターンが予め決まっている場合は、今回の方法を活用すると便利です。

設定した条件の編集や削除は、[条件付き書式]の[ルールの管理]にて行えます。

▼サンプルファイル▼

2024/08/24
【1-入門22|ex1】セルの文字を複数セルに分割「文字の割付」

【1-入門22|ex1】セルの文字を複数セルに分割「文字の割付」

#文字の割付

YouTubeで開く

「文字の割付」という機能を活用して、セルから溢れ出ている文字を複数セルに分割する方法と、その逆を行う方法について解説しています。

00:00 挨拶
00:39 一般的な使い方
02:14 一般的でない使い方
03:55 注意点
04:28 プレゼントについて

2024/08/23
【Excel】空白を上のセルの値で埋める

【Excel】空白を上のセルの値で埋める

何かしらのシステムから出力したファイルなどで、以下の表のように同じ属性の値が空白になっていることがあります。

この表の状態ですと、見やすいですがフィルター機能による操作が上手くできなかったり集計が大変だったりします。
そのため、こちらでは以下のように、空白を上のセルの値で埋める方法について解説していきます。


ジャンプ機能の活用

まずは、表の中の空白を含む対象の範囲を全選択し、[ホーム]タブの中の[検索と選択]から[条件を選択してジャンプ]を選択します。

選択すると表示される設定画面にて、[空白セル]を選択し[OK]を選択して確定します。

これだけで、選択した範囲内の空白セルのみを選択することができます。

選択している状態で、「=」と入力し、数式が入力されたセルの1つ上のセルを選択します。

数式の入力ができましたら、Ctrlキーを押しながらEnterキーを押して確定することで、空白のセルを埋めることができます。


数式を値に変換

以上の作業で空白を埋めることができましたが、このままでは一部のセルが数式のままです。
数式のままですと、並べ替え時に値が正しく表示されなくなってしまいます。
以下は、Noの項目を基準に降順にした場合です。

そのため、別の行のセルを参照する数式のセルに関しては値のみに変換する必要があります。
変換する方法は簡単です。
数式のセルを含む対象の範囲を選択し、Ctrlキーを押しながらCを押してコピーして、CtrlキーとShiftキーを押しながらVを押して値のみを貼り付けるだけです。

※「Ctrl + Shift + V」の貼り付けが出来ない場合は、右クリックのメニューから値のみを貼り付けることができます。

他にも、「Ctrl + Alt + V」を押して[形式を選択して貼り付け]の画面を表示し、Vを押して[値]を選択、Enterキーで確定することでも、値のみを貼り付けることができます。

2024/08/22
【業務】行数が異なる複数の表から値を抽出

【業務】行数が異なる複数の表から値を抽出

#FILTER #INDEX #If #For

YouTubeで開く

行数が異なる複数の表から特定の値を抽出する方法について解説しています。

00:00 挨拶
01:43 準備
02:30 数式で抽出する方法
07:30 VBAで抽出する方法
12:42 プレゼントについて

▼準備ファイル▼

2024/08/21
【Excel】日付と曜日を表示形式で改行して表示する

【Excel】日付と曜日を表示形式で改行して表示する

以下の日付と曜日が表示されているセルに関して、実は日付のみしか入力されていません。
曜日は表示形式を活用して表示しています。

このように、表示形式を活用して日付と曜日を改行して表示する方法について解説していきます。


曜日を表示する

まずは日付が入力されているセルを用意し、表示形式の設定を表示します。
表示形式の設定画面は、[ホーム]タブの中の表示形式のリストより[その他の表示形式]を選択することで表示できます。
※以下では単体のセルを選択していますが、複数のセルに適用したい場合は複数のセルを選択します。

次の設定画面で[ユーザー定義]を選択し、種類と書かれた場所の下のテキストボックス内に書式記号を入力していきます。

まずは、日付形式の先頭に曜日を加えた書式記号を入力します。
書式記号は「aaayyyy/m/d」になります。
※「aaa」が曜日を表しています。

書式記号については以下の記事で解説しています。

>表示形式の設定方法

ExcelVBAレベル確認

曜日と日付を改行して表示する

次に、曜日を表す「aaa」と日付の年を表す「yyyy」の間にカーソルを移動し、Ctrlキーを押しながらJを押します。
「Ctrl + J」を行うことで、分かりづらいですが改行されます。

「a」の下あたりを確認すると、カーソルが点滅しているのが見えます。

この設定内容で確定することで、改行の設定を行うことができます。
確定後に関しても改行されない場合は、[ホーム]タブの中の[折り返して全体を表示する]を選択することで改行することができます。

2024/08/19
【Excel】分表記を時刻表記(時:分)に変換

【Excel】分表記を時刻表記(時:分)に変換

以下のような分単位での表記を「h:mm」という時刻形式の表記に変換する方法について解説していきます。


分表記を時刻表記に変換

分表記を時刻表記に変換する場合は、TIME関数を活用することで、計算なしで簡単に変換することができます。
TIME関数の使い方は以下になります。

=TIME(時, 分, 秒)
// 指定した「時、分、秒」から時間を表すシリアル値を返す

シリアル値について不明な場合は、以下の記事が参考になります。
※シリアル値について理解していない状態でも読み進めることができます。

>シリアル値とは

今回の場合は、分表記を時刻表記に変換するため、TIME関数の「分」の引数のみを以下のように指定します。

=TIME(0,B3,0)

上記の数式を入力することで、以下のように時刻形式で時間を取得することができます。

しかし、表示形式がAM/PM表記で勝手に設定されることがあります。
このような場合は、表示形式を「h:mm」形式に変更する必要があります。

表示形式を変更する場合は、対象のセルを選択している状態で、表示形式の設定の[その他の表示形式]を選択します。

次に、表示された設定画面にて[時刻]を選択し、「h:mm」形式の表記を選択します。
※「13:30」と書かれているものが「h:mm」の表記になります

対象の表記を選択して確定することで、表示形式を変更することができます。

残りのセルに関しては、コピーするだけで時刻表記に変換することができます。


注意点

TIME関数を活用することで「時、分、秒」からシリアル値に変換することができますが、TIME関数では24時間を超える変換ができません。

例えば、「24:10」を分単位にした「1450」という数値を、TIME関数を用いて時刻形式に変換してみます。
そのようにすると、以下のように「24:10」ではなく「0:10」と表示されてしまいます。

※セルC3の表示形式は「[h]:mm」になっています。

>[h]の表記について

このように、TIME関数では24時間を超える場合に24時間以上の時間が引かれた時間になってしまいます。
そのため、24時間を超える可能性がある場合は、数式を用いて、以下のように計算する必要があります。

=B3/24/60

この計算についての詳しい解説は、以下の記事(動画)にて解説しています。

>【ex39】複雑な計算なしで形式変換「○分⇔○時間○分」

2024/08/17
【番外-039】複雑な計算なしで形式変換「○分⇔○時間○分」

【番外-039】複雑な計算なしで形式変換「○分⇔○時間○分」

#時間 #時刻 #分 #表示形式 #TIME #VALUE #TEXT #シリアル値

YouTubeで開く

複雑な計算なしで、分形式を時間形式、時間形式を分形式に変換する方法について解説しています。
(例) 210 ⇔ 3:30

00:00 挨拶
00:49 分→時分の変換
08:15 時分→分の変換
10:55 まとめ
11:41 プレゼントについて

▼準備ファイル▼

2024/08/16
【ExcelVBA】選択セルの列幅を自動調整

【ExcelVBA】選択セルの列幅を自動調整

セルの列幅に収まらない値が入力されている場合、その値はセルからはみ出してしまいます。
右隣りのセルにも値が入力されている場合は、はみ出した値が見えなくなってしまいます。
その対策として、セル内の値を[折り返して表示する]や、セルの列幅を広げるといった方法がありますが、以下のような予定表などの場合は、見た目が悪くなってしまいます。

そのため今回は、選択したセルの列幅を自動で調整し、他のセルを選択すると同時に列幅が元に戻る仕組みを、VBAを用いて実現していきます。

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


仕組み

今回の仕組みは以下のようになります。

①セルを選択すると同時に、選択しているセルを基準に列幅を自動調整
②他のセルを選択すると同時に、列幅を元に戻す

「①」に関しては、予定表の中が選択された時のみに適用します。

「②」に関しては、曜日の列を基準に列幅を調整することで、元の状態に戻していきます。

特定のシート上のセルを選択すると同時に何かしらの処理を実行するには、シートモジュールを活用します。


1. 開発準備

シートモジュールを開くには、対象のシートタブの上で右クリックし、[コードの表示]を選択します。

表示された画面がシートモジュールの編集画面になります。

次に、編集画面の上部にあるリストから[Worksheet]を選択します。

選択すると「Worksheet_SelectionChange」というイベントプロシージャが表示されます。
万が一、異なるイベントプロシージャが表示された場合は、先ほどのリストの右隣りのリストから「SelectionChange」を選択してください。
※「Option Explicit」は環境設定によっては表示されません。

このイベントプロシージャは、該当するシートのセルの選択位置が変更されると同時に実行されるものになります。


2. コードの記述

SubからEnd Subの間に、以下のコードを記述します。

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

「Worksheet_SelectionChange」の引数である「Target」には、選択されたセルの情報が渡されます。
先頭行の「If Target.CountLarge = 1 Then」から末尾の「End If」の中に関しては、「Target.CountLargr = 1」の条件を満たしている時のみ、要するに選択しているセルが複数ではなく1つの時のみに実行されます。

先ほどの条件を満たしている場合は、「Range(“C4:AF4”).Columns.AutoFit」が実行されます。
この処理は、「Range(“C4:AF4”)」を基準に列幅を自動調整するというものです。
「Range(“C4:AF4”)」は曜日が入力されているセルのため、この処理で、予定表全体が曜日のセルを基準とした列幅で自動調整されます。

次に、以下のIFの処理です。

こちらの内容は、以下の条件が書かれています。

・選択されたセルの行番号が5以上、かつ、19以下、かつ、列番号が3(C列)以上、かつ32(AF列)以下

つまり、予定を入力する範囲の中になります。

この範囲の中のセルが選択された場合に関してのみ、Ifの中の「Target.Columns.AutoFit」が実行されます。
「Target.Columns.AutoFit」は選択したセルを基準に列幅を自動調整するというものです。


3. 完成

以上の内容をシートモジュールに記述することで、機能としては完成です。
こちらの内容を実装したサンプルファイルは以下になります。

▼サンプルファイル▼

2024/08/16
【便利】入力と同時に全角文字に変換

【便利】入力と同時に全角文字に変換

#全角文字 #半角文字 #StrConv #シートモジュール #Worksheet_Change

※サイト内の限定動画です。

予め指定したセルに文字を入力して確定すると同時に、半角文字が含まれている場合に自動で全角文字に変換する仕組みになります。
こちらでは、全角文字への変換ですが、必要に応じて、半角文字への変換などとアレンジできます。

00:00 挨拶
01:38 完成イメージ
02:23 準備
02:53 作成(全角文字変換)
10:19 作成(全角文字変換:欠点の改善)
12:57 完成
14:29 プログラムの全体
17:16 まとめ

▼準備ファイル▼

2024/08/14
【Excel】計算なしで年代別集計

【Excel】計算なしで年代別集計

以下の表を元に、年代および種別ごとの集計を行う方法について解説していきます。
また今回紹介する方法では、数式による計算が不要になります。

ExcelVBAレベル確認

ピボットテーブルの作成

数式による計算なしで表を集計する場合は、「ピボットテーブル」が便利です。
まずは、対象の表からピボットテーブルを作成します。

対象の表の中を選択して、[挿入]タブから[ピボットテーブル]を選択し、以下の画面が表示されることを確認します。

表示された画面にて、表の範囲が正しいことを確認し、問題がなければ[OK]を選択することで、新しいシートにピボットテーブルが作成されます。


ピボットテーブルの設定

次に作成されたピボットテーブルの設定を行います。

こちらでは、年代および種別ごとの集計を行うため、[ピボットテーブルのフィールド]と書かれた設定画面にて、行のボックスに[年齢][種別]の順番で配置、値のボックスに[氏名]を配置します。
値に関しては、人数が求められればよいので、他の項目の個数での集計することができます。

以上の設定を行うことで、以下のような表が作成されます。

ただ、年齢および種別ごとの集計にはなっていますが、年代別にはなっていません。
そのため、年齢の項目を10歳間隔でグループ化する必要があります。

年齢の値を元にグループ化する場合は、年齢のいずれかの数値の上で右クリックし、[グループ化]を選択します。

選択後、表示されたグループ化の設定画面にて、グループ化する間隔を指定します。
こちらでは、[先頭の値]を「20」、[末尾の値]を「59」、[単位]を「10」にしています。

以上の手順で、以下のように年齢および種別ごとの集計表を作成することができます。


補足

必要に応じて表の見出しを変更すると、より見やすくなります。
[行ラベル]と書かれているセルに関しては直接変更することができ、[個数 / 氏名]と書かれている集計の見出しのセルに関しては、ダブルクリックした時に表示される[値フィールドの設定]画面の[名前の指定]にて変更することができます。

2024/08/12
【Excel】クリック操作で端のセルまで移動

【Excel】クリック操作で端のセルまで移動

「セルを編集しようとクリックしたところ、選択がどこかに飛んで行ってしまった」
このような経験をされたことがある方は少なくないと思います。

この現象は不具合ではなく、Excelの機能になります。
この機能について解説していきます。


クリックで移動する機能

セルを選択すると緑色の枠でセルが囲まれます。
この枠線上にカーソルを移動すると、カーソルが十字矢印になります。

この十字矢印になる位置でダブルクリックすると、そのセルを基準に隣接するセルで値が入力されている端のセルまで選択が移動します。

緑色の枠線の上を選択すると上方向、下を選択すると下方向、左を選択すると左方向、右を選択すると右方向へ移動します。

選択されていないセルの枠の上の場合はカーソルが十字矢印になりませんが、そのような場合でも、セルの枠をダブルクリックすると同時に端のセルまで移動します。
その場合、セルの枠の少し下をダブルクリックすると上方向、少し上をダブルクリックすると下方向となります。

上記の画像のように、どこのセルを基準にダブルクリックされたかによって、その後の移動先が異なります。
左右の枠をダブルクリックした時に関しても同様です。

以上の理由で、セルの選択時に選択が移動することが確認できたかと思います。
そのため、特にサイズの小さいセルを編集する際は、いきなりセルをダブルクリックせずに、「セルをクリックし選択してからF2キーで編集する」、もしくは、「セルをクリックし選択してからカーソルが十字矢印でない位置でダブルクリックし編集する」というようにすると、意図せずに選択が端まで飛んで行ってしまうことがなくなります。

2024/08/10
【業務】シートの目次を自動作成

【業務】シートの目次を自動作成

#目次 #Hyperlinks #If #TypeName #ハイパーリンク

YouTubeで開く

ブック内のシートの目次をリンク付きで作成する機能の開発方法になります。
また、こちらの機能では、シート見出しの色まで目次に反映することができます。

00:00 挨拶
00:28 完成イメージ
02:52 準備
03:26 作成(目次作成機能)
21:32 作成(更新ボタン)
22:23 完成
23:20 プログラムの全体
28:05 まとめ

▼準備ファイル▼