#149 「経済センサス」から2014年(平成26年)産業別従業者数を推計

今回の投稿は、府内生産額を推計する際に指標として用いることが多いと予想される、2014年(平成26年)の産業別従業者数を統計資料「経済センサス」から推計についてです。

民営事業所の産業別従業者数の推計

最初に、「平成24年経済センサス‐活動調査」に掲載されている民営事業所の従業者数を推計していきます。なお、産業分類は小分類になります。

データのダウンロード

総務省・経済産業省「平成24年経済センサス‐活動調査 事業所に関する集計 産業横断的集計」の 表番号 11「産業(小分類),従業者規模(8区分),経営組織(4区分)別民営事業所数,男女別従業者数及び常用雇用者数―都道府県,市区町村」から、大阪府のデータをダウンロードします。

不要項目を除外

ダウンロードしたデータにおいて、産業分類名の

  • 1文字目がアルファベット
  • 1文字目が「@」
  • 1文字目と2文字目が数字かつ3文字目がアルファベット

を含む行は「不要項目」となるので、削除していきます。

不要項目の削除を行うVBAのコードは、以下のようになります。

Sub 不要項目の削除()
    Dim ws As Worksheet
    Dim i As Integer

    Set ws = Workbooks("H24経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")

    For i = 651 To 2 Step -1
        ' 産業分類名の1文字目がアルファベットであるセルを含む行を削除
        If ws.Cells(i, 1).Value Like "[A-Z]*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
        ' 産業分類名の1文字目が「@」であるセルを含む行を削除
        If ws.Cells(i, 1).Value Like "@*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
        ' 産業分類名の1文字目と2文字目が数字かつ3文字目がアルファベットであるセルを含む行を削除
        If ws.Cells(i, 1).Value Like "[0-9][0-9][A-Z]*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next
End Sub

「管理、補助的経済活動を行う事業所」の従業者数への対処

次に、三好(2020)が言及している、「管理、補助的経済活動を行う事業所」の従業者数についての処理を行います。

三好ゆう(2020)『ノン・サーベイ法による市町村産業連関表の作成と課題―京都府内全26市町村の「市内生産額」の推計から―』福知山公立大学研究紀要2020,4巻 1号 ,pp.185 - 208

小分類にある「管理、補助的経済活動を行う事業所」の従業者数について、これ以外の各産業が中分類に占める割合を「管理、補助的経済活動を行う事業所」の数値に乗じ、それを足し合わせた数値を小分類での各産業の数値とする。こうして「経済センサス」の元データを、小分類における産業名の項目欄のみとした表に作り替えるのである。

「管理、補助的経済活動を行う事業所」の従業者数の処理を行うコードは、以下のようになります。

Sub 管理補助的経済活動を行う事業所への対処()
    Dim ws As Worksheet
    Dim num  As Long
    Dim S_num As String
    Dim k_String As String
    Dim k_employee As Long
    Dim m_employee As Double
    Dim s_employee As Double
    Dim ratio As Double
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer

    Set ws = Workbooks("H24経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")

    For i = 2 To 591
        If ws.Cells(i, 1).Value Like "##" & "[!0-9]*" Then
            num = Val(ws.Cells(i, 1).Value)
            If num < 10 Then
                S_num = "0" & CStr(num)
            Else
                S_num = CStr(num)
            End If
            m_employee = ws.Cells(i, 2).Value
        For j = 2 To 591
            If ws.Cells(j, 1).Value Like S_num & "0*" Then
                k_employee = ws.Cells(j, 2).Value
                For k = 2 To 591
                    If ws.Cells(k, 1).Value Like S_num & "[1-9]*" Then
                        s_employee = ws.Cells(k, 2).Value
                        ratio = s_employee / m_employee
                        ws.Cells(k, 2).Value = s_employee + k_employee * ratio
                    End If
                Next
            End If
        Next
    End If
    Next
    ' 「管理、補助的経済活動を行う事業所」を含む行をすべて削除
    For i = 591 To 2 Step -1
        If ws.Cells(i, 1).Value Like "##" & "0*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next        
    ' 中分類をすべて削除
    For i = 591 To 2 Step -1
        If Not(ws.Cells(i, 1).Value Like "###*") Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next
End Sub

産業分類を「分類符号」と「産業分類名」に分割する

今の段階で、産業分類に「分類符号(数字3桁)」と「産業分類名」が同じセル内に収まっています。そこで、産業分類を「分類符号」と「産業分類名」とに分割し、それぞれを異なる列に格納します。

VBAのコードは、以下のようになります。

Sub 最初の数字3桁と産業分類名を分割して別々の列に格納()
    Dim wsOrg As Worksheet
    Dim wsDes As Worksheet
    Dim i As Integer
    Dim num  As Long
    Dim code As String
    Dim iname As String

    Set wsOrg = Workbooks("H24経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")
    Set wsDes = Workbooks("H24経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet2")
    For i = 2 To 413
        num = Val(wsOrg.Cells(i, 1).Value)
        If num < 100 Then
            code = "0" & CStr(num)
        Else
            code = CStr(num)
        End If
        iname = Replace(wsOrg.Cells(i, 1).Value, code, "")
        wsDes.Cells(i, 1).NumberFormatLocal = "@" ' セルの書式を「文字」に設定
        wsDes.Cells(i, 1).Value = code
        wsDes.Cells(i, 2).Value = iname
        wsDes.Cells(i, 3).Value = wsOrg.Cells(i, 2).Value
    Next
End Sub

現時点で、ワークシートは以下のような状態になっています。

Fig.149.1 平成24年大阪府における民営事業所の産業別従業者(小分類)

平成26年の産業別従業者数を推計

平成26年の産業別従業者数を推計するためには、調査年のズレを調整する必要があります。つまり、「平成24年経済センサス - 活動調査」と「平成28年経済センサス - 活動調査」を用いて、直線補間法により平成26年の産業別従業者数を推計する必要があります。

したがって、先程「平成24年経済センサス - 活動調査」のデータに対して行った処理を、「平成28年経済センサス - 活動調査」に対しても行う必要があります。

というわけで、総務省・経済産業省「平成28年経済センサス‐活動調査 事業所に関する集計 産業横断的集計」の 表番号 9 「産業(小分類),従業者規模(8区分),経営組織(4区分)別民営事業所数,男女別従業者数及び常用雇用者数―都道府県,市区町村」における大阪府のデータに関して、上述した

  • データのダウンロード
  • 不要項目の除外
  • 「管理、補助的経済活動を行う事業所」の従業者数への対処
  • 産業分類を「分類符号」と「産業分類名」に分割

の処理を実行します。

小分類の分類符号を全て作成

次に、平成25年の民営事業所の産業別従業者数を計算するためのワークシートを用意します。

小分類のすべての産業が格納できるように、細分類のデータから、分類符号(code;数字3桁)を作成していきます。

VBAのコードは、以下のようになります。

Sub 細分類全てのcode作成()
    Dim ws As Worksheet
    Dim i As Integer
    Dim row As Integer
    Set ws = Workbooks("H25_民営_従業者数_全国_細分類.ods").Worksheets("Sheet1")
    row = 2
    ' 0001〜9999のcodeを作成
    ws.Columns(1).NumberFormatLocal = "@"
    For i = 100 To 9999
        If i < 1000 Then
            ws.Cells(row, 1).Value = "0" & CStr(i)
        Else
            ws.Cells(row, 1).Value = CStr(i)
        End If
        row = row + 1
    Next
End Sub

平成26年の民営事業所の産業別従業者数を推計

続いて、上記で作成したシートに平成24年及び平成28年の民営事業所の従業者数のデータを格納し、直線補完法により平成26年の民営事業所の産業別従業者を推計していきます。

[math-jax]推計式は以下のようになります。

$$
\begin{array}{}平成26年 従業者数 = 平成24年 従業者数 +{(平成28年 従業者数) - (平成24年 従業者数)}× \frac{平成26年から平成24年までの2年}{平成28年から平成24年までの4年}\end{array}
$$

VBAのコードは以下のようになります。

Sub 直線補完法により平成26年の民営事業所の産業別従業者数を推計()
    Dim wsOrg1 As Worksheet
    Dim wsOrg2 As Worksheet
    Dim wsDes As Worksheet
    Dim i As Integer
    Dim j As Integer
    Dim h24 As Variant
    Dim h28 As Variant
    Dim h26 As Variant

    Set wsOrg1 = Workbooks("H24経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet2")
    Set wsOrg2 = Workbooks("H28経済センサス_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet2")
    Set wsDes = Workbooks("H26_民営_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")

    ' 平成24年の民営事業所の従業者数を格納
    h24 = wsDes.Range(wsDes.Cells(1, 3), wsDes.Cells(999, 3))
    For i = 2 To 999
        For j = 2 To 426
            If wsDes.Cells(i, 1).Value = wsOrg1.Cells(j, 1).Value Then
                h24(i, 1) = wsOrg1.Cells(j, 3)
            End If
        Next
    Next
    ' 平成28年の民営事業所の従業者を格納
    h28 = wsDes.Range(wsDes.Cells(1, 4), wsDes.Cells(999, 4))
    For i = 2 To 999
        For j = 2 To 427
            If wsDes.Cells(i, 1).Value = wsOrg2.Cells(j, 1).Value Then
                h28(i, 1) = wsOrg2.Cells(j, 3)
            End If
        Next
    Next
    ' 直線補完法により平成26年の民営事業所の産業別従業者数を推計
    h26 = wsDes.Range(wsDes.Cells(1, 5), wsDes.Cells(999, 5))
    For i = 2 To 999
        h26(i, 1) = h24(i, 1) + (h28(i, 1) - h24(i, 1)) * 2 / 4
    Next
    wsDes.Range(wsDes.Cells(1, 5), wsDes.Cells(999, 5)) = h26
End Sub

同様にして、全国における民営事業所の産業別従業者数も推計していきます。

民営以外の事業所の産業別従業者数を推計

「経済センサス−基礎調査を用いた」推計方法

民営事業所に関しては「経済センサス-活動調査」を用いることができるが、そこには民営以外 ( 例えば、国と地方の公共団体(公的部門) )の事業所の従業者数は含まれていない。そのため、これを補うために「経済センサス-基礎調査」を用いることになるが、その際、調査年のズレを調整する必要がある。たとえば、平成 23 年版の市町村産業連関表を作成する場合、民営以外の事業所の従業者数については、「平成 21 年 経済センサス-基礎調査」と「平成 26 年 経済センサス-基礎調査」を用いて、直線補間法により平成 23 年の産業別従業者数を推計する必要がある。

三好ゆう(2020)『ノン・サーベイ法による市町村産業連関表の作成と課題―京都府内全26市町村の「市内生産額」の推計から―』より引用。

今回は平成26年版の産業連関表を作成するので、民営以外の事業所の従業者数については線形補間をする必要はなく、「平成26年 経済センサス−基礎調査」をそのまま用いることになります。

データのダウンロード

データは、総務省・経済産業省「平成26年経済センサス‐基礎調査 事業所に関する集計」 表番号09100 表題産業(小分類)、経営組織(4区分)別事業所数、男女別従業者数及び常用雇用者数(国及び地方公共団体)-都道府県からダウンロードします。

大分類及び「数字2桁」+「アルファベット」の行を削除

大分類及び産業分類名が「数字2桁」+「アルファベット」で始まる行を削除します。VBAのコードは以下のようになります。

Sub 大分類及び数字2桁とアルファベット1文字で始まる行を削除()
    Dim ws As Worksheet
    Dim i As Integer

    Set ws = Workbooks("H26経済センサス_国地方公共団体_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")   

    For i = 139 To 2 Step -1
        If ws.Cells(i, 1).Value Like "[A-Z]*" Or ws.Cells(i, 1).Value Like "@*" Or ws.Cells(i, 1).Value Like "##[A-Z]*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next    
End Sub

「管理、補助的経済活動を行う事業所」の従業者数をそれ以外の産業に割り振る

作業中のワークシートには、「管理、補助的経済活動を行う事業所」の行が含まれています。なので、民営事業所の場合と同様に、「管理、補助的経済活動を行う事業所」の従業者数をそれ以外の産業に割り振ります。

VBAのコードは以下のようになります。

Sub 管理補助的経済活動を行う事業所への対処()
    Dim ws As Worksheet
    Dim num  As Long
    Dim S_num As String
    Dim k_String As String
    Dim k_employee As Long
    Dim m_employee As Double
    Dim s_employee As Double
    Dim ratio As Double
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer

    Set ws = Workbooks("H26経済センサス_国地方公共団体_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")

    For i = 2 To 597
        If ws.Cells(i, 1).Value Like "##" & "[!0-9]*" Then
            num = Val(ws.Cells(i, 1).Value)
            If num < 10 Then
                S_num = "0" & CStr(num)
            Else
                S_num = CStr(num)
            End If
            m_employee = ws.Cells(i, 2).Value
        For j = 2 To 597
            If ws.Cells(j, 1).Value Like S_num & "0*" Then
                k_employee = ws.Cells(j, 2).Value
                For k = 2 To 597
                    If ws.Cells(k, 1).Value Like S_num & "[1-9]*" Then
                        s_employee = ws.Cells(k, 2).Value
                        ratio = s_employee / m_employee
                        ws.Cells(k, 2).Value = s_employee + k_employee * ratio
                    End If
                Next
            End If
        Next
    End If
    Next
    ' 「管理、補助的経済活動を行う事業所」を含む行をすべて削除
    For i = 597 To 2 Step -1
        If ws.Cells(i, 1).Value Like "##" & "0*" Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next        
    ' 中分類をすべて削除
    For i = 597 To 2 Step -1
        If Not(ws.Cells(i, 1).Value Like "###*") Then
            ws.Cells(i, 1).EntireRow.Delete
        EndIf
    Next
End Sub

産業分類を「分類符号」と「部門名」に分割する

今の段階では、産業分類に「分類符号(数字3桁)」と「分類名」が同じセル内に収まっています。なので、産業分類の「分類符号」と「分類名」とに分割し、それぞれを違う列に格納します。

VBAのコードは、以下のようになります。

Sub 最初の数字3桁と産業分類名を分割して別々の列に格納()
    Dim wsOrg As Worksheet
    Dim wsDes As Worksheet
    Dim i As Integer
    Dim num  As Long
    Dim code As String
    Dim iname As String

    Set wsOrg = Workbooks("H26経済センサス_国地方公共団体_従業者数_大阪府_小分類.ods").Worksheets("Sheet1")
    Set wsDes = Workbooks("H26経済センサス_国地方公共団体_従業者数_大阪府_小分類.ods").Worksheets("Sheet2")
    For i = 2 To 417
        num = Val(wsOrg.Cells(i, 1).Value)
        If num < 100 Then
            code = "0" & CStr(num)
        Else
            code = CStr(num)
        End If
        iname = Replace(wsOrg.Cells(i, 1).Value, code, "")
        wsDes.Cells(i, 1).NumberFormatLocal = "@" ' セルの書式を「文字」に設定
        wsDes.Cells(i, 1).Value = code
        wsDes.Cells(i, 2).Value = iname
        wsDes.Cells(i, 3).Value = wsOrg.Cells(i, 2).Value
    Next
End Sub

民営事業所と民営以外の事業所の従業者数を合計する

「経済センサス - 活動調査」を用いて推計した民営事業所の産業別従業者数と「経済センサス - 基礎調査」を用いて推計した民営以外の事業所における産業別従業者数を合計します。

まず、合計を算出するワークシートを作成します。ワークシートには、

  • code(産業符号)
  • 産業分類名
  • 平成26年の民営事業所における産業別従業者数(a)
  • 平成26年の民営以外の事業所における産業別従業者数(b)
  • 平成26年の産業別従業者数(a+b)

の5つの列を用意します。

小分類の分類符号を全て作成

code(産業符号)に関しては、「管理、補助的経済活動を行う事業所」(分類符号の3桁目が「0」)を除いた小分類がすべて格納できるように、分類符号(code;数字3桁)を作成していきます。

VBAのコードは、以下のようになります。

Sub 小分類全てのcode作成()
    Dim ws As Worksheet
    Dim i As Integer
    Dim row As Integer
    Set ws = Workbooks("経済センサス_H26従業者数_全国_小分類.ods").Worksheets("Sheet1")
    row = 2
    ' 11〜999のcodeを作成
    ws.Columns(1).NumberFormatLocal = "@"
    For i = 11 To 999
        If i < 100 Then
            ws.Cells(row, 1).Value = "0" & CStr(i)
        Else
            ws.Cells(row, 1).Value = CStr(i)
        End If
        row = row + 1
    Next
    ' 3桁目が「0」のcodeの行を削除
    For i = 990 To 2 Step -1
        If ws.Cells(i, 1).Value Like "##0*" Then
             ws.Cells(i, 1).EntireRow.Delete
        End If
    Next
End Sub

産業分類名を全て転記

次に、産業分類名の列において、code(産業符号)に対応する産業分類名を「経済センサス - 活動調査」及び「経済センサス - 基礎調査」から転記します。

VBAのコードは以下のようになります。

Sub 産業分類名を全て転記
    Dim wsOrg1 As Worksheet
    Dim wsOrg2 As Worksheet
    Dim wsOrg3 As Worksheet
    Dim wsDes As Worksheet
    Dim i As Integer
    Dim j As Integer

    Set wsOrg1 = Workbooks("H28経済センサス_民営_従業者数_全国_小分類.ods").Worksheets("Sheet2")
    Set wsOrg2 = Workbooks("H24経済センサス_民営_従業者数_全国_小分類.ods").Worksheets("Sheet2")
    Set wsOrg3 = Workbooks("H26経済センサス_国地方公共団体_従業者数_全国_小分類.ods").Worksheets("Sheet2")
    Set wsDes = Workbooks("経済センサス_H26_従業者数_全国_小分類.ods").Worksheets("Sheet1")

    For i = 2 To 427
        For j = 2 To 433
            If wsOrg1.Cells(i, 1).Value = wsDes.Cells(j, 1).Value Then
                wsDes.Cells(j, 2).Value = wsOrg1.Cells(i, 2).Value
            End If
        Next
    Next
    For i = 2 To 427
        If wsDes.Cells(i, 2).Value = "*" Then
            Goto Continue2
        Else
            For j = 2 To 426
                If wsDes.Cells(i, 1).Value = wsOrg2.Cells(j, 1).Value Then
                    wsDes.Cells(i, 2).Value = wsOrg2.Cells(j, 2).Value
                End If
            Next
        End If
    Continue2:
        Next
    For i = 2 To 427
        If wsDes.Cells(i, 2).Value = "*" Then
            Goto Continue3
        Else
            For j = 2 To 142
                If wsDes.Cells(i, 1).Value = wsOrg3.Cells(j, 1).Value Then
                    wsDes.Cells(i, 2).Value = wsOrg3.Cells(j, 2).Value
                End If
            Next
        End If
    Continue3:
        Next
End Sub

産業分類名が格納されていない行を削除

上記のコードを実行した後で、対応するcode(産業符号)がなく産業分類名が空白となったセルを含む行を削除していきます。

VBAのコードは以下のようになります。

Sub 産業分類名が空白のセルを含む行を削除
    Dim ws As Worksheet
    Dim i As Integer

    Set ws = Workbooks("経済センサス_H26_従業者数_全国_小分類.ods").Worksheets("Sheet1")

    For i = 433 To 2 Step -1
        ' 産業分類名が空白のセルを含む行を削除
        If ws.Cells(i, 2).Value Like "" Then
            ws.Cells(i, 2).EntireRow.Delete
        EndIf
    Next
End Sub

民営事業所の従業者数と公的部門の従業者数を転記・合計

続いて、民営事業所の従業者数と公的部門の従業者数を合計用ワークシートに転記し、合計します。

VBAのコードは以下のようになります。

Sub 民営事業所と公的部門の従業者数を転記し合計
    Dim wsOrg1 As Worksheet
    Dim wsOrg2 As Worksheet
    Dim wsDes As Worksheet
    Dim i As Integer
    Dim j As Integer

    Set wsOrg1 = Workbooks("H26民営_従業者数_全国_小分類.ods").Worksheets("Sheet1")
    Set wsOrg2 = Workbooks("H26公的部門_従業者数_全国_小分類.ods").Worksheets("Sheet1")
    Set wsDes = Workbooks("経済センサス_H26_従業者数_全国_小分類.ods").Worksheets("Sheet1")

    For i = 2 To 990
        For j = 2 To 990
            If wsOrg1.Cells(i, 1).Value = wsDes.Cells(j, 1).Value Then
                wsDes.Cells(j, 3).Value = wsOrg1.Cells(i, 5).Value
            End If
        Next
    Next
    For i = 2 To 990
        For j = 2 To 433
            If wsOrg2.Cells(i, 1).Value = wsDes.Cells(j, 1).Value Then
                wsDes.Cells(j, 4).Value = wsOrg2.Cells(i, 5).Value
            End If
        Next
    Next
    For i = 2 To 433
        wsDes.Cells(i, 5).Value = wsDes.Cells(i, 3) + wsDes.Cells(i, 4)
    Next
End Sub

同様にして、大阪府においても、民営事業所と民営以外の事業所の従業者数の合計を算出します。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です