2024/10/02
【Excel】請求書などの摘要欄を抽出

【Excel】請求書などの摘要欄を抽出

以下のような請求書のフォーマットに対し、セルF2の請求書Noを入力すると同時に、摘要欄の内容を別シート(請求管理)から抽出し表示する方法について解説していきます。


摘要欄の抽出

実現するためには、『FILTER関数』を活用します。
FILTER関数は、Excel2021以降で対応している関数になります。

FILTER関数は、指定した表から指定した条件を満たしたデータのみを抽出する関数になります。
この関数の使い方は以下の通りです。

=FILTER(配列, 含む, [空の場合])
// 配列:抽出対象の表
// 含む:抽出する条件
// [空の場合]:抽出対象が存在しない場合に表示する値(省略可能)

こちらの場合、「請求管理」シートから該当する「商品名、数量、単位、単価」を抽出します。

抽出条件は、「「No」が請求書Noと一致する場合」になります。

では、「FILTER関数」を活用して抽出していきます。

抽出する際は、抽出したい位置の先頭のセルに数式を入力します。
こちらでは、摘要欄の先頭のセルB15に数式を入力していきます。

入力する数式は、以下になります。

=FILTER(請求管理!D:G,請求管理!B:B=F2,"")
// 抽出対象の表:請求管理!D:G(今後データが追加されることを考慮し列全体を指定)
// 抽出する条件:請求管理!B:B=F2(請求管理シートのB列のNoが請求書Noと一致する場合)
// 見つからない場合:""(何も表示しない)

これだけで、今後は、セルF2の請求書Noを変更するだけで摘要欄を抽出することができます。
他の項目(請求日、宛名、件名、支払期日、振込先)に関しても別のシートで管理している場合は、請求書Noと紐づけて、今回のFILTER関数や他にもVLOOKUP関数、XLOOKUP関数などを用いて抽出することで、請求書の入力を効率化することができます。

他の書類に関しても、同様に活用できます。

2024/09/30
【Googleスプレッドシート】チェックボックスの自動表示

【Googleスプレッドシート】チェックボックスの自動表示

以下の表のように、値が入力されている行に関してのみチェックボックスを自動表示する方法について解説していきます。


条件付き書式の活用

実現するためには『条件付き書式』を活用します。
まずは、必要な数分のチェックボックスを用意する必要があります。
以下の表のチェックボックスの表示を切り替えたい範囲を選択し、[挿入]から[チェックボックス]を選択します。

次に、挿入したチェックボックスを選択している状態で、「条件付き書式」を設定していきます。
条件付き書式は、[表示形式]から[条件付き書式]を選択することで設定できます。

右側に設定画面が表示されましたら、[書式ルール]を[カスタム数式]にし、選択している先頭のセルB3のチェックボックスを非表示する条件式を[値または数式]と書かれているテキストボックスに入力します。

入力する条件式は、「隣のセルC3が空の場合」という意味を表す式になります。
実際に式にすると以下のようになります。

=C3=""

この式は、他の選択範囲にも相対参照で反映されます。
今回は1列のみを選択しているため、このままで問題ないのですが、複数列のチェックボックスを選択している場合などは、列を「$」で固定するなどと工夫が必要になります。

まずは、以下の式を入力します。

=C3=""

後は、[書式設定のスタイル]を設定するだけです。
チェックボックスの見た目を非表示にするには、「チェックボックスを挿入したセルの背景色」「チェックボックスの色」を同じ色にする必要があります。

こちらでは、背景色の塗りつぶしをなしにし、テキストの色(チェックボックスの色)を白にします。

これで[完了]を選択することで、設定は完了です。
以下のように、隣のセル(タスク)に値が入力されていない行に関しては、チェックボックスが非表示になったかと思います。

ExcelVBAレベル確認

補足

チェックボックスが表示されていないセルに関しても、チェックボックス自体は存在しています。
そのため、選択しようとすると、以下のような警告が表示されます。

2024/09/28
【番外-042】8桁の数値を日付形式に変換

【番外-042】8桁の数値を日付形式に変換

#VALUE #DATEVALUE #TEXT #表示形式

YouTubeで開く

システムから出力されたファイルなどで日付が8桁の数値で管理されていることがあります。
その8桁の数値を日付形式に変換する方法です。
こちらでは、短い数式で変換する方法について解説しています。

00:00 挨拶
00:42 準備
01:04 数値の日付の見た目の文字列に変換
02:57 文字列の日付を日付形式に変換
03:51 数式を短くする
05:47 まとめ
06:11 プレゼントについて

▼準備ファイル▼

2024/09/27
【ExcelVBA】セルの値とシート見出しの色を連動

【ExcelVBA】セルの値とシート見出しの色を連動

以下のシートのセルA2に入力されているステータスに応じて、シート見出しの色を自動で変更する仕組みについて解説していきます。

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


1. 開発準備

今回の機能は、各シートのセルA2のステータスの値に応じて、シート見出しの色が変換するという内容です。
セルA2にステータスが入力されているシートに関して、全てに適用する場合は、ブックモジュールを活用します。

ブックモジュールは、[開発]タブの中の[Visual Basic]を選択して、プロジェクトウィンドウから[ThisWorkbook]を選択することで、表示することができます。

表示されたブックモジュールにて、上のリストから[Workbook]を選択し、隣のリストから[SheetChange]を選択します。

表示された[Workbook_SheetChange]というプロシージャのみを活用します。
他のプロシージャに関しては、削除しても問題ございません。

[Workbook_SheetChange]というプロシージャが、各シートのセルが編集された時に実行されるイベントプロシージャになります。
このプロシージャの引数「Sh」に実行のきっかけとなったシートの情報、引数「Target」に実行のきっかけとなったセルの情報が渡されます。


2. コードの記述

これらの情報を活用して、以下のように処理を記述します。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    If Sh.Range("A1").Value = "ステータス" Then
        If Sh.Range("A2").Value = "確認待ち" Then
            Sh.Tab.Color = RGB(255, 255, 0)
        ElseIf Sh.Range("A2").Value = "修正待ち" Then
            Sh.Tab.Color = RGB(255, 165, 0)
        ElseIf Sh.Range("A2").Value = "完了" Then
            Sh.Tab.Color = RGB(180, 180, 180)
        Else
            Sh.Tab.ColorIndex = xlColorIndexNone
        End If
    End If
    
End Sub

では、このコードの処理の内容を解説します。

If Sh.Range("A1").Value = "ステータス" Then

初めに、対象のシートのセルA1に”ステータス”という文字が入力されているかどうかを確認します。
”ステータス”という文字が入力されている場合に関してのみ、内側の以下の処理を実行します。

If Sh.Range("A2").Value = "確認待ち" Then
    Sh.Tab.Color = RGB(255, 255, 0)
ElseIf Sh.Range("A2").Value = "修正待ち" Then
    Sh.Tab.Color = RGB(255, 165, 0)
ElseIf Sh.Range("A2").Value = "完了" Then
    Sh.Tab.Color = RGB(180, 180, 180)
Else
    Sh.Tab.ColorIndex = xlColorIndexNone
End If

ここで、セルA2の値が”確認待ち”なのか、”修正待ち”なのか、”完了”なのか、それ以外なのかを判断し、それぞれの条件に合ったシート見出しの色を設定しています。

Sh.Tab.Color = RGB(255, 255, 0)

”確認待ち”の場合は、上記の内容でシート見出しの色を黄色にしています。
色はRGBで指定しています。
他、”修正待ち”の場合はオレンジ色、”完了”の場合は灰色にしています。

Sh.Tab.ColorIndex = xlColorIndexNone

どれにも該当するステータスがない場合は、上記の内容でシート見出しの色をリセット(色なし)しています。
リセットする場合は、ColorIndexを使用し、xlColorIndexNoneと指定します。


3. 完成

このコードを記述することで、以下のように、セルA2のステータスに応じて、該当するシート見出しの色が自動で変更されます。

▼サンプルファイル▼

2024/09/26
【業務】好みの条件で「改ページ」を自動設定

【業務】好みの条件で「改ページ」を自動設定

#改ページ #PageBreak #For #If #印刷 #ActiveSheet

YouTubeで開く

「A列に値が入力されている位置」などと自由に指定した条件を元に、「改ページ」を自動で設定する仕組みになります。
シートを印刷する際に、理想の位置で瞬時にページを分けることができます。

00:00 挨拶
00:26 完成イメージ
02:05 準備
02:28 改ページを手動で設定する方法
03:19 作成(改ページ設定機能)
07:29 作成(ショートカット割り当て)
08:22 完成
09:06 プログラムの全体
10:15 プレゼントについて

▼準備ファイル▼

2024/09/25
【Excel】表の中に集計行を瞬時に挿入

【Excel】表の中に集計行を瞬時に挿入

以下のように、元々ある表に対して、特定の項目でグループ化し集計行を挿入する方法について解説していきます。


「小計」機能の活用

集計行を挿入するには、[小計]という機能を活用します。
まずは、集計の基準となる項目で昇順もしくは降順にし、要素ごとで分ける必要があります。
こちらでは、以下のように[担当]の項目を基準に[昇順]にしています。
対象の項目のセルを選択し、[データ]タブの中の[昇順]を選択するだけで昇順にできます。

並べ替えることができましたら、表の中を選択している状態で、[データ]タブの中の[小計]を選択します。

[小計]を選択すると表示される以下の画面にて、[グループの基準]と[集計の方法]、[集計するフィールド]を選択します。
こちらでは、[担当]、[合計]、[契約数]を選択しています。

これで確定するだけで、集計行を挿入することができます。


複数の集計行を挿入

また、この[小計]の機能に関して、複数の集計行を挿入することもできます。
試しに平均の集計行を挿入していきます。 先ほどと同様に、[小計]を選択し、[担当]、[平均]、[契約数]と指定します。
この時、注意点として、前回の集計結果を上書きしないために、[現在の小計をすべて置き換える]のチェックを外した状態で確定します。

これだけで、以下のように[合計]に加え、[平均]も表示することができます。
グループを閉じることで、担当ごとの集計結果が確認しやすくなります。

2024/09/23
【Excel】表の中の集計項目を瞬時に埋める

【Excel】表の中の集計項目を瞬時に埋める

以下のような「小計と総計の枠が用意された表」に対して、瞬時に小計と総計を求める数式を入力する方法について解説していきます。


小計を求める

まずは小計から求めていきます。

初めに総計を除いた範囲(合計を含む)を選択します。

次に、選択範囲内の空白セルのみを選択します。
[ホーム]タブの中の[検索と選択]より[条件を選択してジャンプ]を選択し、[空白セル]を指定して確定することで、選択範囲内の空白セルのみを選択することができます。

この状態で、[ホーム]タブ内の[オートSUM]を選択するだけで、瞬時に小計と合計のセルを埋めることができます。

以下のように、自動でSUM関数が入力されて集計されます。


総計を求める

次に総計を求めていきます。

初めに総計を表示したい空白のセルのみを選択します。

次に、先ほどと同様に、[ホーム]タブ内の[オートSUM]を選択するだけで、総計のセルを埋めることができます。

以下のように、先ほどSUM関数で集計された範囲のみを合計した結果が表示されます。

ExcelVBAレベル確認

補足

[オートSUM]の機能に関しては、以下のショートカットでも実行することができます。

・日本語配列:Alt + Shift + –
・英語配列:Alt + =

2024/09/21
【1-入門26|ex1】ピボットテーブルのグループ化

【1-入門26|ex1】ピボットテーブルのグループ化

#ピボットテーブル #グループ化 #集計

YouTubeで開く

ピボットテーブルのグループ化という機能の使い方について解説しています。
こちらでは、グループ化の機能を活用して、表の年齢の項目を基準に年代別で集計しています。
数式を一切使用せずに、簡単に集計することができます。

00:00 挨拶
00:31 準備
00:42 作成(ピボットテーブル)
01:16 作成(表示する要素の指定)
02:42 作成(年代別にグループ化)
04:15 作成(日付の項目でグループ化)
05:20 補足
05:39 便利な小技
06:11 プレゼントについて

▼準備ファイル▼

2024/09/20
【ExcelVBA】選択した値の関連データを自動で抽出

【ExcelVBA】選択した値の関連データを自動で抽出

この記事では、特定のデータを選択して「抽出」ボタンを押すだけで、関連データを別シートに自動で抽出する機能の開発方法について解説しています。
解説には、以下の表を活用します。

(例)「男」を選択して「抽出」ボタンを押す → 「男」シートが作成され「男」のデータのみが抽出される

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


1. 開発準備

まずは、[開発]タブの中の[マクロ]を選択します。

表示された以下の画面にて、開発する機能の名前を入力します。
こちらでは「抽出」と入力しています。

入力後、[作成]ボタンを押します。

以下の画面が表示されましたら、エディタ内のSub~End Subの中にプログラムを記述していきます。
※Option Explicitはエディタの設定内容によっては表示されません。


2. コードの記述

Sub~End Subの中に記述する内容は、以下になります。

Sub 抽出()
    
    Dim t As Range
    Set t = ActiveCell
    
    t.AutoFilter Field:=t.Column - 1, Criteria1:=t.Value
    Columns("A:E").Copy
    
    With Worksheets.Add
        .Range("A1").PasteSpecial Paste:=xlPasteFormats
        .Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
        .Range("A1").PasteSpecial Paste:=xlPasteValues
        .Name = t.Value
        .Range("A1").Select
    End With
    
    t.AutoFilter
    
End Sub

先頭から順番に解説していきます。

Dim t As Range
Set t = ActiveCell

こちらでは、tというセルの情報を格納する用の変数(入れ物)を用意し、アクティブセル(選択基準のセル)の情報を格納しています。

t.AutoFilter Field:=t.Column - 1, Criteria1:=t.Value

こちらで、先ほど定義したtのセルを基準にフィルター機能で絞り込みを行っています。
絞り込みの内容は、tの列番号から1を引いた位置の列(表がB列から始まっているため、実際の項目の位置情報と列番号は異なる)に対し、tのセルの値と一致するデータになります。

以下の場合、セルD5が選択されているため、D列の列番号の4から1を引いた3番目の項目(性別)に、セルD5の値(男)が入力されているデータのみで絞り込みを行います。

Columns("A:E").Copy

そして、絞り込みをした表を含むA~E列の範囲をコピーしています。

With Worksheets.Add
    .Range("A1").PasteSpecial Paste:=xlPasteFormats
    .Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
    .Range("A1").PasteSpecial Paste:=xlPasteValues
    .Name = t.Value
    .Range("A1").Select
End With

こちらで、新しいシートを追加し、コピーしたデータ(書式、列幅、値)を貼り付けています。
貼り付けた後に、シート名をtのセルの値にし、そのシートのセルA1を選択するという処理です。

t.AutoFilter

最後に、絞り込みをした表の絞り込みを解除して、処理が終了します。


3. ボタンの作成

後は、開発した機能をボタンに割り当てます。
ボタンは、[開発]タブの中の[挿入]から[ボタン]を選択することで作成することができます。

図形の作成時と同様に、好みの位置にボタンを作成することができます。
ボタンを作成すると[マクロの登録]という画面が表示されるため、開発したマクロ(こちらの場合は「抽出」)を選択して確定します。

必要に応じて、ボタンの表示名を変更することで、ボタンの完成です。
※一度作成したボタンを選択すると、割り当てた処理が実行されてしまいます。
作成したボタンを編集する際は、右クリック、もしくは、Ctrlキーを押しながら選択します。


4. 完成

以上の手順で完成です。

好みのデータを選択してから「抽出」ボタンを押すことで、選択したデータに関連するデータを別シートに抽出することができます。

こちらで開発したExcelファイルは、以下になります。

▼サンプルファイル▼

2024/09/19
【便利】日付が入力できるカレンダーフォーム

【便利】日付が入力できるカレンダーフォーム

#Workbook_SheetBeforeDoubleClick #Worksheet_SelectionChange #Worksheet_Change #If #For #While #カレンダー #シートモジュール #ブックモジュール

YouTubeで開く

日付のセルを選択するだけでカレンダーフォームが表示される仕組みです。
表示されたカレンダーフォームから好みの日付を選択するだけで、日付を入力することができます。
こちらでは、ユーザーフォームを使わずに、シートを活用してフォームを実現しています。

00:00 挨拶
00:19 完成イメージ
02:41 準備
03:30 作成(年月リスト)
04:44 作成(カレンダー日付設定)
11:53 作成(カレンダー日付更新)
13:56 作成(セルに日付を入力)
18:39 作成(カレンダー表示)
24:25 完成
25:42 プログラムの全体
30:10 プレゼントについて

▼準備ファイル▼

2024/09/18
【Excel】瞬時に時間形式を分形式に変換

【Excel】瞬時に時間形式を分形式に変換

以下のように、「○:○○」と時間の形式で表示されているセルに対して、値を保持したまま「分だけの形式」に変換する方法について解説していきます。

(例)1:20 → 80


表示形式の設定を変更

表示形式の設定で、時間を「○:○○」という形式で表示している場合、表示形式の設定を変更することで、表示内容を「分だけの形式」に簡単に変換することができます。

通常、セルに「○:○○」と時間を入力すると、勝手に「時間の形式(シリアル値)」に変換されます。
シリアル値とは何かについては、以下の記事をご覧ください。

>シリアル値とは

まずは分形式にしたい対象の範囲を選択し、[セルの書式設定]の[表示形式]タブを開きます。
[セルの書式設定]の[表示形式]タブは、[ホーム]タブの表示形式の設定の中にある[その他の表示形式]を選択することで表示することができます。

表示された画面には、恐らく[ユーザー定義]にて、種類に「h:mm」と入力されているかと思います。
これが「○:○○」で表示するという形式です。

この内容を「分だけ」にする場合、分を表す「m」を「[m]」と括弧で囲って入力することで「分だけ」にすることができます。
この「[m]」とは、通常の「m」(分)とは異なり、60分を超えた分数を正しく表示する設定です。

「[m]」と入力して確定することで、以下のように分形式で表示することができます。

(例)1:20 → 80

2024/09/16
【Excel】複数条件で値を抽出

【Excel】複数条件で値を抽出

2つのキーから値を検索して抽出する場合、今までは、以下のように検索用の列を用意する必要がありました。

しかし、2021以降のバージョンに新たに追加されたFILTER関数を活用することで、上記のような検索用の列を用意する必要がなくなりました。
今回は、FILTER関数を活用して、検索用の列を用意せずに2つのキーから値を検索して抽出する方法について解説していきます。

紹介する方法は、数ある方法の中の1つになります。
他の関数を活用しても実現することができるので、色んな方法を試されると良いです。


FILTER関数の活用

FILTER関数の使い方は、以下のとおりです。

=FILTER(配列, 含む, [空の場合])
// 配列:抽出対象の範囲
// 含む:抽出条件
// [空の場合]:抽出対象が1件もない場合に表示する値(省略可)

FILTER関数で複数条件で指定する場合は、AND「*」、もしくは、OR「+」を活用します。

実際に、FILTER関数を用いて以下の表からキー1とキー2が一致する値を抽出していきます。

この場合は、抽出対象の範囲がD7~D12になります。
次に抽出条件が以下の2つになります。
・キー1:B7~B12の中でB3と一致するデータ
・キー2:C7~C12の中でC3と一致するデータ

実際に、FILTER関数の引数に割り当てることによって、以下のように抽出することができます。

=FILTER(D7:D12,(B7:B12=B3)*(C7:C12=C3),"なし")
// キー1とキー2が一致する場合になるため、それぞれの条件をAND「*」で並べる
// 抽出対象が1件もない場合は「なし」と表示する

※黄色のセルに数式を入力しています。

一致するデータが複数件ある場合は、セルから溢れ出て、以下のように表示されます。


補足

複数の連続した項目を抽出する場合は、スピル(セルから溢れ出して表示する機能)を活用することで、以下のように1つの数式で表現することができます。

=FILTER(D7:E12,(B7:B12=B3)*(C7:C12=C3),"なし")