Excelで公休や有給の管理を行う際に、「公1/1」「公2/1」など異なる表記の公休データをそのまま別シートに反映させる方法を解説します。本記事では、Excelの関数やフィルタ機能を活用し、指定の形式のデータを自動的に抽出する方法を紹介します。
Excelで特定の文字列を含むデータを抽出する方法
Excelでは、FILTER関数やIF関数を使って、特定の文字列を含むデータを別シートに自動反映させることができます。
① FILTER関数を使う方法(Excel 365 / 2019 以降)
「公○/○」のデータを別シートにそのまま反映させるには、FILTER関数を使用するのが最も簡単です。
例えば、「Sheet1」のA列に日付、B列に「公○/○」などの勤務状況があるとします。
「Sheet2」に「公○/○」のみを抽出したい場合、B列のデータを参照して、以下の数式を使用します。
=FILTER(Sheet1!A:B, LEFT(Sheet1!B:B,1)="公")
解説:
FILTER(Sheet1!A:B, LEFT(Sheet1!B:B,1)="公")
は、Sheet1のB列のデータの先頭が「公」の場合、その行をSheet2に抽出します。- 動的にリストを更新するため、新しいデータを入力してもリアルタイムで反映されます。
② IF関数とFILTER関数を組み合わせる方法
FILTER関数が利用できないExcelバージョンでは、IF関数とINDEX関数を組み合わせてフィルタリングを行います。
「Sheet2」のA1セルに以下の数式を入力し、Ctrl+Shift+Enter(配列数式)を実行します。
=IFERROR(INDEX(Sheet1!A:A, SMALL(IF(LEFT(Sheet1!B:B,1)="公", ROW(Sheet1!B:B), ""), ROW(A1))), "")
解説:
IF(LEFT(Sheet1!B:B,1)="公", ROW(Sheet1!B:B), "")
で、「公○/○」の行番号を取得SMALL(… , ROW(A1))
で、順番にデータを取り出すINDEX(Sheet1!A:A, …)
で、対応する日付を取得IFERROR(… , "")
で、エラーを空白にする
③ VBAを使用して「公○/○」データを別シートにコピーする
関数ではなく、VBAマクロを使って「公○/○」のデータを別シートにコピーすることも可能です。
Sub CopyPublicHolidays() Dim wsSource As Worksheet, wsTarget As Worksheet Dim lastRow As Long, targetRow As Long Dim i As Long Set wsSource = ThisWorkbook.Sheets("Sheet1") ' 元のシート Set wsTarget = ThisWorkbook.Sheets("Sheet2") ' コピー先のシート lastRow = wsSource.Cells(Rows.Count, 2).End(xlUp).Row ' B列の最終行を取得 targetRow = 1 ' Sheet2の書き込み開始位置 For i = 1 To lastRow If Left(wsSource.Cells(i, 2).Value, 1) = "公" Then wsTarget.Cells(targetRow, 1).Value = wsSource.Cells(i, 1).Value ' 日付 wsTarget.Cells(targetRow, 2).Value = wsSource.Cells(i, 2).Value ' 公休データ targetRow = targetRow + 1 End If Next i MsgBox "公○/○のデータをコピーしました。", vbInformation End Sub
VBAの使用手順:
- Excelの[Alt] + [F11]を押してVBAエディターを開く
- [挿入] → [標準モジュール] を選択
- 上記のコードを貼り付ける
- [F5]を押して実行
このマクロを実行すると、Sheet1のB列から「公○/○」のデータをSheet2にコピーします。
まとめ
Excelで「公○/○」の文字列を含むデータを別シートに反映させる方法には、関数を使用する方法とVBAを活用する方法があります。
- Excel 365 / 2019 以降:
FILTER関数
を使うのが最も簡単 - 古いバージョンのExcel:
IF関数 + INDEX関数
を組み合わせる - VBAで自動化:マクロを使って「公○/○」のデータを一括コピー
用途に応じた方法を選んで、公休や有給の管理を効率化しましょう!
コメント