ららぽてすらブログ

ららぽてすら

会社でデータ整形と完了%出力をVBAで作ったので紹介と解説します…☺️

こんにちわ〜ららぽてすらです🎵

仕事で都道府県とたくさんの完了方法のあるデータから一定の完了方法で終了しているデータ分が合計から完了件数の合計を都道府県毎に完了パーセンテージ出してとのことだったのでVBAで作ってみました。

データ整形用VBAソースコード

 

Sub DisplayOneInColumnB()

 

    Dim ws As Worksheet

    Dim lastRow As Long

    Dim i As Long

    

    ' アクティブなシートを設定

    Set ws = ThisWorkbook.ActiveSheet

    

    ' A列の最後の行を取得

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    

    ' 2行目から最後の行までループ

    For i = 2 To lastRow

        ' セルの値を取得

        cellValue = ws.Cells(i, "A").Value

        

        ' 値が指定された条件に一致しない場合、B列に1を表示

        If cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" Then

            ws.Cells(i, "B").Value = 1

        Else

            ws.Cells(i, "B").Value = ""

        End If

    Next i

 

End Sub

 

  1. Sub DisplayOneInColumnB(): DisplayOneInColumnBという名前のサブプロシージャを定義しています。
  2. Dim ws As Worksheet: シートオブジェクトを参照するための変数wsを宣言しています。
  3. Dim lastRow As Long: 最後の行を特定するための変数lastRowを宣言しています。
  4. Dim i As Long: ループカウンタとして使用する変数iを宣言しています。
  5. Set ws = ThisWorkbook.ActiveSheet: アクティブなシート(現在表示しているシート)を変数wsに代入しています。
  6. lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row: A列の最後の行を取得し、変数lastRowに格納しています。
  7. For i = 2 To lastRow: 2行目から最後の行までループ処理を行っています。
  8. cellValue = ws.Cells(i, "A").Value: セルの値を取得し、変数cellValueに代入しています。
  9. If cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" And cellValue <> "〇〇" Then: セルの値が指定された条件に一致しない場合に、次の処理を実行します。
  10. ws.Cells(i, "B").Value = 1: B列に1を表示します。
  11. Else: 値が指定された条件に一致する場合に、次の処理を実行します。
  12. ws.Cells(i, "B").Value = "": B列に空白を表示します。
  13. End If: If文の終わりを示しています。
  14. Next i: For文の終わりを示しており、次の行に移動します。
  15. End Sub: サブプロシージャの終わりを示しています。

このプログラムは、A列のデータを評価し、指定された条件に一致しない場合にB列に1を表示することで、特定の条件を満たさないデータをフィルタリングするのに役立ちます🎵

 

整形後のデータに対して都道府県・合計件数・完了%表示VBA

 

Sub CalculateCompletionData()

    Dim ws As Worksheet

    Dim lastRow As Long

    Dim prefecture As Variant

    Dim prefectures As Variant

    Dim totalCount As Long

    Dim completedCount As Long

    Dim completionPercentage As Double

    Dim outputRow As Long

 

    Set ws = ThisWorkbook.Worksheets("Sheet4")

    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

 

    prefectures = Array("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", _

                        "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", _

                        "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", _

                        "岐阜県", "静岡県", "愛知県", "三重県", _

                        "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", _

                        "鳥取県", "島根県", "岡山県", "広島県", "山口県", _

                        "徳島県", "香川県", "愛媛県", "高知県", _

                        "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県")

 

    outputRow = 2 ' 出力開始行を指定 (例: 2)

    ws.Cells(outputRow - 1, 4).Value = "都道府県"

    ws.Cells(outputRow - 1, 5).Value = "合計件数"

    ws.Cells(outputRow - 1, 6).Value = "1の累計"

    ws.Cells(outputRow - 1, 7).Value = "完了パーセント"

 

    For Each prefecture In prefectures

        totalCount = Application.WorksheetFunction.CountIf(ws.Range("A1:A" & lastRow), prefecture)

        completedCount = Application.WorksheetFunction.CountIfs(ws.Range("A1:A" & lastRow), prefecture, ws.Range("B1:B" & lastRow), 1)

 

        If totalCount > 0 Then

            completionPercentage = completedCount / totalCount * 100

        Else

            completionPercentage = 0

        End If

 

        ws.Cells(outputRow, 4).Value = prefecture

        ws.Cells(outputRow, 5).Value = totalCount

        ws.Cells(outputRow, 6).Value = completedCount

        ws.Cells(outputRow, 7).Value = completionPercentage

 

        outputRow = outputRow + 1

      Next prefecture

 

End Sub

 

  1. Sub CalculateCompletionData(): CalculateCompletionDataという名前のサブプロシージャを定義しています。
  2. Dim ws As Worksheet: シートオブジェクトを参照するための変数wsを宣言しています。
  3. Dim lastRow As Long: 最後の行を特定するための変数lastRowを宣言しています。
  4. Dim prefecture As Variant: 各都道府県を格納するための変数prefectureを宣言しています。
  5. Dim prefectures As Variant: 都道府県リストを格納するための配列prefecturesを宣言しています。
  6. Dim totalCount As Long: 各都道府県の合計件数を格納するための変数totalCountを宣言しています。
  7. Dim completedCount As Long: 各都道府県の完了件数を格納するための変数completedCountを宣言しています。
  8. Dim completionPercentage As Double: 各都道府県の完了率を格納するための変数completionPercentageを宣言しています。
  9. Dim outputRow As Long: 出力開始行を指定するための変数outputRowを宣言しています。
  10. Set ws = ThisWorkbook.Worksheets("Sheet4"): ワークブック内の"Sheet4"をwsに設定しています。
  11. lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row: A列の最後の行を取得し、変数lastRowに格納しています。
  12. prefectures = Array(...): 都道府県名を含む配列を作成しています。
  13. ws.Cells(outputRow - 1, 4).Value = "都道府県" ...: 出力テーブルのヘッダーを設定しています。
  14. For Each prefecture In prefectures: 配列内の各都道府県に対してループを実行しています。
  15. totalCount = Application.WorksheetFunction.CountIf(ws.Range("A1:A" & lastRow), prefecture): 各都道府県の合計件数を計算しています。
  16. completedCount = Application.WorksheetFunction.CountIfs(ws.Range("A1:A" & lastRow), prefecture, ws.Range("B1:B" & lastRow), 1): 各都道府県の完了件数を計算しています。
  17. If totalCount > 0 Then ... Else ... End If: 合計件数が0より大きい場合は、完了率を計算し、それ以外の場合は、完了率を0とします。
  18. ws.Cells(outputRow, 4).Value = prefecture: 現在の都道府県名を出力します。
  19. ws.Cells(outputRow, 5).Value = totalCount: 現在の都道府県の合計件数を出力します。
  20. ws.Cells(outputRow, 6).Value = completedCount: 現在の都道府県の完了件数を出力します。
  21. ws.Cells(outputRow, 7).Value = completionPercentage: 現在の都道府県の完了率を出力します。
  22. outputRow = outputRow + 1: 出力行を次の行に移動します。
  23. Next prefecture: 都道府県配列の次の要素に進むためのループの終わりを示します。
  24. End Sub: サブプロシージャの終わりを示します。

このプログラムは、Excelシート内の情報を都道府県ごとに分析し、各都道府県の合計件数、完了件数、そしてそれらから計算される完了率を新たな表として出力します🎵それぞれの都道府県がどれだけの件数を処理し、その中で何件が完了しているのかを一目で確認することができます!

 

結果 例

都道府県 合計件数 1の累計 完了パーセント
山形県 5 2 40
富山県 10 9 90
山梨県 20 19 95
長野県 15 10 66.67
三重県 30 25 83.33
奈良県 25 20 80
福島県 40 30 75
群馬県 50 40 80
新潟県 45 35 77.78
静岡県 35 30 85.71
宮城県 30 25 83.33
京都府 25 20 80
埼玉県 40 35 87.5
神奈川県 50 45 90
兵庫県 20 15 75
東京都 100 90 90
大阪府 90 80 88.89
栃木県 80 70 87.5
愛知県 70 60 85.71
茨城県 60 50 83.33
千葉県 50 40 80
岐阜県 40 30 75
北海道 0 0 0
青森県 0 0 0
岩手県 0 0 0
秋田県 0 0 0
石川県 0 0 0
福井県 0 0 0
滋賀県 0 0 0
鳥取県 0 0 0
島根県 0 0 0
岡山県 0 0 0
広島県 0 0 0
山口県 0 0 0
徳島県 0 0 0
香川県 0 0 0
愛媛県 0 0 0
高知県 0 0 0
福岡県 0 0 0
佐賀県 0 0 0
長崎県 0 0 0
熊本県 0 0 0
大分県 0 0 0
宮崎県 0 0 0
鹿児島県 0 0 0
沖縄県 0 0 0

VBAしばらく使ってなかったから肩慣らししていかないと…🚀

 

母の日 スイーツ ギフト【 送料無料!とろける生大福セット 10個入】ランキング1位!TV雑誌で紹介ふわとろクリーム大福 定番の5種類10個入 誕生日 御祝 内祝 お取り寄せ 抹茶 ミルク 和菓子 プレゼント 御中元 父の日 ※本州宛送料無料

価格:2,980円
(2023/5/5 19:28時点)
感想(6389件)

【公式】【300P対象◆エントリー&1万円以上購入で】ジェニフィック アドバンスト N / 30ml / 美容液 / ランコム lancome 正規品 ベストセラー うるおい ツヤ ハリ 日本専用 プレゼント 誕生日 彼女 化粧品 コスメ デパコス ギフト 母の日

価格:11,990円
(2023/5/5 19:29時点)
感想(2241件)

GYUSOO グシュ スキンケアセット スキンケア5点セット カタツムリ 化粧水 乳液 クリーム SET 高保湿 保湿乳液 保湿化粧水 カタツムリクリーム かたつむり 韓国コスメ セット 韓国スキンケア 化粧品 セット 女性 ギフト プレゼント 母の日 送料無料

価格:4,430円
(2023/5/5 19:31時点)
感想(4214件)