【Excel】シートの一覧表示

Excelのシートが数十枚になってくると探すのが大変です。

今日はシートの一覧を表示し、素早くシート間移動する方法を紹介させて頂きます。

以下のように、Excelの左下部分を右クリックすることでシートの一覧を表示できます。

【Excel】当日分のシフトを自動で抽出

通常、シフト表は横軸に日付、縦軸にスタッフ名を記載したマトリクスにすることが多いです。

1ヵ月の期間などでシフトを把握するのにマトリクスは有効ですが、今日出勤のスタッフを確認したい場合はマトリクスは不向きです。

今回は、Excel関数のみで今日出勤のスタッフを抽出できるようにしてみました。

このエクセルファイルの作り方

①TODAY関数で本日日付を取得

②以下の関数で、今日のシフト毎のスタッフを表示

IFERROR(TEXTJOIN(“、”,TRUE,FILTER($B$4:$B$15,INDIRECT(ADDRESS(4, MATCH($C$17,$3:$3)) & “:” & ADDRESS(15, MATCH($C$17,$3:$3)))=$B18)), “なし”)

以下、各関数の解説

1. MATCH(検査値, 検査範囲)で検査値を5/3、検査範囲を3行目とし、5/3のある列(5)を取得

2.ADDRESS(行番号, 列番号) で行番号には表の範囲である「4」と「15」を指定し、セルの座標「$E$4」「$E$15」をそれぞれ取得

3.INDIRECT(参照文字列) で、参照文字列にはADDRESSで取得した「$E$4」「$E$15」と「:」を連結した文字列「$E$4:$E$15」を指定

4.FILTERで「$E$4:$E$15」の中で「$B18(早番)」に該当する行と一致する「$B$4:$B$15」内の値「久保、前田、三宅」を取得

5.TEXTJOINで「久保」「前田」「三宅」を「、」で区切り連結

6.IFERRORで該当データがない場合(早番がいない場合)は「なし」と表示

【Excel】画面を最大化するショートカットキー

最近ほとんど会社に行くことなく自宅でテレワークをしています。
今日はリモート会議で役立つ機能の紹介です。

↓のように、通常の設定だと赤枠の部分が人に見せる時には邪魔な事が多いです。

「Alt → V → U」と順番にキーボードを押すと、↓のように全画面表示にすることができます。

元に戻したい時は「Esc」キーを押します。

【Excel】背の順や成績順で座席表を自動作成

背の小さい順や成績の悪い順で、座席を割り振りたいケースがあると思います。
今回は生徒の名簿一覧から背の順で座席を割り振る方法を紹介させて頂きます。

このエクセルファイルの作り方

①マクロを使えるようにする
マクロを使えるようにする」を参照

②生徒情報の表を作成

③座席表を作成

④席決め配置ボタンを配置する
 ※ ボタンの配置方法は「表を複数の条件で絞り込む②」を参照

⑤ボタン配置時の以下の画面で「マクロ名」を「 StartSeatSelection 」として「新規作成」を押す

⑥「Microsoft Visual Basic for Applications」にて以下のコードを記載

Sub StartSeatSelection()

Dim noCol As Integer: noCol = 1 '★
Dim nameCol As Integer: nameCol = 2 '★
Dim heightCol As Integer: heightCol = 3 '★

Dim startRow As Integer: startRow = 2 '★
Dim lastRow As Integer: lastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1

Dim studentList As Dictionary
Set studentList = New Dictionary

Dim tempStudentList As Dictionary
Set tempStudentList = New Dictionary

'「生徒情報」シートの内容を1行ずつ読み込み、studentListに身長順で格納します。
For i = startRow To lastRow Step 1

    Set tempStudentList = studentList
    Set studentList = New Dictionary

    Dim no As String
    no = Cells(i, noCol).Value
    Dim name As String
    name = Cells(i, nameCol).Value
    Dim height As String
     height = Cells(i, heightCol).Value
    
    If IsEmpty(no) Then
        MsgBox "生徒番号が空欄です。"
    End If
    If Not IsNumeric(no) Then
        MsgBox no & ":生徒番号には数値を指定してください。"
    End If
        
    If IsEmpty(name) Then
        MsgBox "氏名が空欄です。"
    End If
        
     If IsEmpty(height) Then
        MsgBox "身長が空欄です。"
    End If
    If Not IsNumeric(height) Then
        MsgBox height & ":身長には数値を指定してください。"
    End If
    
    If tempStudentList.Count > 0 Then
        For Each tempStudent In tempStudentList.Items
            If (tempStudent(2) > height Or (tempStudent(2) = height And tempStudent(0) > no)) And Not studentList.Exists(no) Then
                studentList.Add no, Array(no, name, height)
            End If
            
            studentList.Add tempStudent(0), Array(tempStudent(0), tempStudent(1), tempStudent(2))
         Next tempStudent
    End If
    

    If Not studentList.Exists(no) Then
        studentList.Add no, Array(no, name, height)
    End If

Next

'studentListを基に、座席に名前をあてはめます。

Dim startSheetRow As Integer: startSheetRow = 4 '★
Dim lastSheetRow As Integer: lastSheetRow = 14 '★
Dim startSheetCol As Integer: startSheetCol = 2 '★
Dim lastSheetCol As Integer: lastSheetCol = 12 '★

Dim targetRow As Integer
Dim targetCol As Integer

Dim studentListCnt As Integer: studentListCnt = 0 '★

For targetRow = startSheetRow To lastSheetRow Step 2
    For targetCol = startSheetCol To lastSheetCol Step 2
    
    Worksheets("座席表").Cells(targetRow, targetCol).Value = studentList.Items(studentListCnt)(1)
    studentListCnt = studentListCnt + 1
    
    Next targetCol
    
Next targetRow

End Sub