ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

CEDEC セッションタイムテーブル CSV の整形マクロ

CEDEC 公式サイトのタイムテーブルのページ下部から、セッションのリストを CSVJSON ファイルでダウンロードできるのはご存知でしょうか?
https://cedec.cesa.or.jp/2022/session/timetable

しかし CSV のままでは見辛いです。

なので、毎年 CEDEC の時期になると Excel で整形するマクロで自分用にリストを作っています。実行するとこんな感じに(情報はバッサリ落としています)。

誰かの役に立つかも知れないので本記事に内容をメモっておこうかと思います。

Sub ArrangeCedecSessionList()
'
' ArrangeCedecSessionList Macro
'

    ' ページ全体のフォントをメイリオ・サイズを10pに
    Cells.Select
    With Selection.Font
        .Name = "メイリオ"
        .Size = 10
    End With
    

    '列ヘッダーを選択・センタリング・着色・フィルタ・開始時間で昇順ソート
    Range("A1:L1").Select
    
    With Selection
        .HorizontalAlignment = xlCenter
        .Interior.Color = 5296274
        .Replace What:="時間", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .AutoFilter
    End With
    
    With ActiveSheet.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add2 _
            Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
            :=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    
    ' 時間のみ表示・幅調整・センタリング
    Columns("A:B").Select
    
    With Selection
        .NumberFormatLocal = "h:mm"
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .ColumnWidth = 6
    End With
    
    
    ' 列の削除
    Columns("E:J").Select
    Selection.Delete Shift:=xlToLeft
    
        
    ' セッション名の列の幅を広げる
    Columns("D:D").Select
    Selection.ColumnWidth = 80
    
    
    ' 置換:基調講演と分表示だけ残して削除
    Columns("C:C").Select
    With Selection
        .Replace What:=")", Replacement:=""
        .Replace What:="(", Replacement:=""
        .Replace What:="チュートリアル", Replacement:=""
        .Replace What:="レギュラーセッション", Replacement:=""
        .Replace What:="ショートセッション", Replacement:=""
        .Replace What:="ラウンドテーブル", Replacement:=""
        .Replace What:="パネルディスカッション", Replacement:=""
        .Replace What:="インタラクティブセッション", Replacement:=""
    End With
    
    
    ' 置換:同時通訳・YouTube・Zoom配信だけ残して削除
    Columns("E:E").Select
    With Selection
        .Replace What:="現地講演", Replacement:=""
        .Replace What:="事前収録", Replacement:=""
        .Replace What:="公開", Replacement:=""
        .Replace What:="Ask the Speaker", Replacement:=""
        .Replace What:="ライトパス", Replacement:=""
    ' 置換:改行の削除
        .Replace What:="" & Chr(10) & "", Replacement:=""
    End With
    ' セルを折り返さない
    Selection.WrapText = False


    ' ハイパーリンク化
    Dim iRowStart   ' Forで処理する先頭行
    Dim iRowEnd     ' Forで処理する最終行
    Dim r           ' 処理する列番号
    Dim i           ' ループカウンタ
    Dim url         ' URL
    
    iRowStart = 2
    iRowEnd = Cells(Rows.Count, 1).End(xlUp).Row
    i = iRowEnd
    r = 6          ' URLの記載のある列番号
        
    For i = iRowStart To iRowEnd
        url = Cells(i, r).Value
        Cells(i, r).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
            url, TextToDisplay:="■"
    Next
    
    
    ' 基調講演の行を目立たせる
    i = iRowEnd
    r = 3          ' "基調講演"の記載のある列番号
    
    For i = iRowStart To iRowEnd
        ' 検索値を含む文字列を探す
        If InStr(Cells(i, r), "基調講演") > 0 Then
            ' セルを選択して塗り潰す
            Range(Cells(i, 1), Cells(i, 6)).Select  ' 先頭列と最終列を番号で指定
            With Selection.Interior
                .ThemeColor = xlThemeColorAccent6
                .TintAndShade = 0.799981688894314
            End With
        End If
    Next
    
    
    ' YouTube配信ありとタイムシフト無しの行を目立たせる
    i = iRowEnd
    r = 5          ' "基調講演"の記載のある列番号
    
    For i = iRowStart To iRowEnd
        ' 検索値を含む文字列を探す
        If InStr(Cells(i, r), "youtube") > 0 Then
            ' セルを選択して塗り潰す
            Range(Cells(i, 1), Cells(i, 6)).Select  ' 先頭列と最終列を番号で指定
            With Selection.Interior
                .ThemeColor = xlThemeColorAccent2
                .TintAndShade = 0.799981688894314
            End With
        End If
        ' 検索値を含む文字列を探す
        If InStr(Cells(i, r), "タイムシフトなし") > 0 Then
            ' セルを選択して塗り潰す
            Range(Cells(i, 1), Cells(i, 6)).Select  ' 先頭列と最終列を番号で指定
            With Selection.Interior
                .ThemeColor = xlThemeColorAccent2
                .TintAndShade = 0.399975585192419
            End With
        End If
    Next
        
    
    ' センタリング
    Range("C:C,E:F").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    
    
    ' 先頭のセルを選択
    Range("A1").Select
    
End Sub