#58 部門別品目別国内生産額表よりH23年岩手県重量単価初期値を推計

今回から、H23(2011)年度岩手県の物質フローの推計に取り掛かりました。
まずは、H23年岩手県重量単価初期値の設定からです。

結合小分類一覧表の作成

手始めに、H23年岩手県産業連関表の結合小分類一覧を作成します。
岩手県産業連関表部門分類表を加工します。

加工前の岩手県産業連関表部門分類表は以下のようになります。

表58-1 H23岩手県産業連関表部門分類表(加工前)

赤枠で囲った空白行を削除し、詰めていって結合小分類の表を作成します。

Sub 結合小分類一覧作成()
    Dim ws As Worksheet
    Dim i As Long
    Dim toprow As Long
    Dim bottomrow As Long

    Set ws = Workbooks("H23岩手県産業連関表結合小分類一覧.ods").Worksheets("部門分類表")
    '開始する行
    toprow = 5
    '終了する行
    bottomrow = 885

    For i = bottomrow To toprow Step -1
        If ws.Cells(i, 6) = "" Then
           'F列が空白なら行削除
            ws.Rows(i).Delete
        End If
    Next
End Sub
表58-2 結合小分類一覧

重量単価初期値を推計するワークシートの作成

次に、重量単価初期値を推計するためのワークシートを作成していきます。
目標物は以下のような条件を満たすものになります。

・結合小分類表の分類コード(code)を1つずつ読み込んで、分類コード毎に新規ワークシートを作成する。
・新規ワークシート名は、部門コード(4桁)に変更する
・ワークブック「部門別品目別国内生産額表」中の各細品目のデータ(コード、名称、単位、生産数量、単価(円)、生産額(百万円))を部門コードにしたがって、属するワークシートに転記する。

以下が、目標物を作成するためのVBAのコードになります。

Sub 分類コード毎に新規ワークシート作成()
  ' 分類コードを読み込んで、分類コード1個毎に新規ワークシートを作成する
    Dim bunruiCode As String
    Dim bumonmei As String
    Dim wbOrg1 As Worksheet
    Dim wbOrg2 As Worksheet
    Dim wbDes AS Workbook
    Dim wSheet As Worksheet

    Set wbOrg1 = Workbooks("H23岩手県産業連関表結合小分類一覧.ods").Worksheets("部門分類表")
    Set wbOrg2 = Workbooks("H23部門別品目別国内生産額表.ods").Worksheets("国内生産額表")
    Set wbDes = Workbooks("H23岩手県重量単価初期値推計.ods")

    For i = 2 To 133
        bunruiCode = wbOrg1.Cells(i, 1).Value
        bumonmei = wbOrg1.Cells(i, 2).Value
        ' 最後尾にシートを追加
        Set wSheet = wbDes.Worksheets.Add(before:=Worksheets(Worksheets.Count))
        ' シート名を変更
        wSheet.Name = bunruiCode
        ' 列名を入力
        wSheet.RANGE("A1").VALUE = "コード"
        wSheet.RANGE("B1").VALUE = "名称"
        wSheet.RANGE("C1").VALUE = "単位"
        wSheet.RANGE("D1").VALUE = "生産数量"
        wSheet.RANGE("E1").VALUE = "単価(円)"
        wSheet.RANGE("F1").VALUE = "生産額(百万円)"
        wSheet.RANGE("H1").Value = "分類コード"
        wSheet.Range("H2").NumberFormatLocal = "@"
        wSheet.RANGE("H2").Value = bunruiCode
        wSheet.RANGE("I1").Value = "部門名"
        wSheet.RANGE("I2").Value = bumonmei
        wSheet.RANGE("J1").Value = "重量単価[初期値]"
        ' データを入力
        rw = 2
        For cnt = 4 To 4000
            If wbOrg2.Cells(cnt, 7).Value Like bunruiCode & "*" Then
                wSheet.Cells(rw, 1).NumberFormatLocal = "@"
                wSheet.Cells(rw, 1).Value = wbOrg2.Cells(cnt, 7).Value
                wSheet.Cells(rw, 2).Value = wbOrg2.Cells(cnt, 8).Value
                wSheet.Cells(rw, 3).Value = wbOrg2.Cells(cnt, 9).Value
                wSheet.Cells(rw, 4).Value = wbOrg2.Cells(cnt, 10).Value
                wSheet.Cells(rw, 5).Value = wbOrg2.Cells(cnt, 11).Value
                wSheet.Cells(rw, 6).Value = wbOrg2.Cells(cnt, 12).Value
                rw = rw + 1
            End If
        Next
    Next
End Sub

上記のコードを実行して作成されたワークシートの一例が、以下のようになります。

図58-1 重量単価初期値を推計するワークシートの作成

上記の画像を見てわかるように、分類コード:0111(部門名:麦)に、分類コードが0110である米が含まれています。

これは、H23年岩手県産業連関表の部門分類が、H23年全国版産業連関表のそれと異なっているためです。

具体的にいうと、岩手県産業連関表では、米は分類コードが0110、麦が0111と別れている一方、全国版産業連関表だと、米と麦はともに、分類コードが0111となっているためです。

よって、上記の例であれば、米に属する品目(玄米、くず米、稲わら)はワークシート「0110」に転記する必要があります。

同じように、各生産品目が、岩手県産業連関表の部門分類に一致するように、適宜転記や削除をしていきます。この作業は手作業になりますね^^;

重量単価の初期値設定(1)と(2)

(1)産業内製品の生産単位が全て[t]または[g],[kg]の場合、[g],[kg]は[t]に変換して算出します。算出式は以下のようになります。

Ux = Mx / Tx   (2.1)

Ux : x産業の重量単価[円/t]
Mx : x産業の総生産額[円]
Tx : x産業の総生産量[t]

(2)産業内製品の生産単位の一部が[t]または[g],[kg]の場合、その一部のみを用いて1)と同じように推計しました。

(1)と(2)の具体例は、#6で言及しています。

https://note.com/toshiyamiyazaki/n/n2c9ec33897e7

それでは、(1)と(2)をVBAで実装していきます。

Sub 重量単価初期値推計()
    ' 重量単価【初期値】を自動計算する
    Dim bunruiCode As String
    Dim totalWeight As Double
    Dim totalPrice As Double
    Dim pricePerTon As Double
    Dim wbOrg As Worksheet
    Dim wbDes As Workbook

    Set wbOrg = Workbooks("H23岩手県産業連関表結合小分類一覧.ods").Worksheets("部門分類表")
    Set wbDes = Workbooks("H23岩手県重量単価初期値推計.ods")

    For cnt = 2 To 133
        bunruiCode = wbOrg.Cells(cnt, 1).Value
        pricePerTon = 0
        totalWeight = 0
        totalPrice = 0
        For i = 2 To 1000
            If wbDes.Worksheets(bunruiCode).Cells(i, 3).Value = "千t" Then
                totalWeight = totalWeight + wbDes.Worksheets(bunruiCode).Cells(i, 4).Value * 1000
                totalPrice = totalPrice + wbDes.Worksheets(bunruiCode).Cells(i, 6).Value
            ElseIf wbDes.Worksheets(bunruiCode).Cells(i, 3).Value = "t" Then
                totalWeight = totalWeight + wbDes.Worksheets(bunruiCode).Cells(i, 4).Value
                totalPrice = totalPrice + wbDes.Worksheets(bunruiCode).Cells(i, 6).Value
            ElseIf wbDes.Worksheets(bunruiCode).Cells(i, 3).Value = "導体t" Then
                totalWeight = totalWeight + wbDes.Worksheets(bunruiCode).Cells(i, 4).Value
                totalPrice = totalPrice + wbDes.Worksheets(bunruiCode).Cells(i, 6).Value
            ElseIf wbDes.Worksheets(bunruiCode).Cells(i, 3).Value = "kg" Then
                totalWeight = totalWeight + wbDes.Worksheets(bunruiCode).Cells(i, 4).Value / 1000
                totalPrice = totalPrice + wbDes.Worksheets(bunruiCode).Cells(i, 6).Value
            ElseIf wbDes.Worksheets(bunruiCode).Cells(i, 3).Value = "g" Then
                totalWeight = totalWeight + wbDes.Worksheets(bunruiCode).Cells(i, 4).Value / 1000000
                totalPrice = totalPrice + wbDes.Worksheets(bunruiCode).Cells(i, 6).Value
            End If
        Next
        If totalWeight = 0 Then
                GoTo Continue
        End If
        pricePerTon = totalPrice * 1000000 / totalWeight
        wbDes.Worksheets(bunruiCode).Cells(2, 10).Value = pricePerTon
    Continue:
        Next cnt
End Sub

上記のコードで重量単価初期値を推計できたシートは、タブを青色に変更しました。

重量単価[初期値]設定(3)

(3)産業内生産品の生産単位に一つも[t], [g],[kg]が含まれておらず、生産単位が体積である場合、製品の比重を設定することで推計します。各部門とその製品の比重を、自身の修士論文から引用します。

表58-3 製品の単位変換

分類コード:0621(部門名:石炭・原油・天然ガス)

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

図58-2 0621(石炭・原油・天然ガス)

重量単価[初期値]は、(1)の方法で算出してあるのですが、算出式には生産単位が[t]の「石炭及び亜炭(精炭)」のみが計上されています。

なので、先述の単位変換を用いて、原油と天然ガスを含んだ重量単価[初期値]を算出します。

Sub 単位換算での重量単価初期値推計()
    ' 単位換算での重量単価初期値の推計
    Dim totalWeight As Double
    Dim totalPrice As Double
    Dim pricePerTon As Double
    Dim wSheet As Worksheet

    Set wSheet = Workbooks("H23岩手県重量単価初期値推計.ods").Worksheets("0621")
    pricePerTon = 0
    totalWeight = 0
    totalPrice = 0
    For i = 2 To 300
        If wSheet.Cells(i, 3).Value = "t" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        ElseIf wSheet.Cells(i, 3).Value = "kl" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        ElseIf wSheet.Cells(i, 3).Value = "千N立方米" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.714
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        End If
    Next
    pricePerTon = totalPrice * 1000000 / totalWeight
    wSheet.Cells(2, 10).Value = pricePerTon
End Sub

再計算が済んだので、ワークシートのタブの色を青色に変更します。

分類コード:1112(部門名:畜産食料品)

生産額表の一部に、単位が[kl]である飲用牛乳があります。

図58-3 1112(畜産食料品)

これらは、先述の単位変換の「飲用牛乳」の値を使って、[t]に変換して、重量単価[初期値]を再計算します。

分類コード:1129(部門名:その他の飲料・たばこ)

生産額表は以下のようになっています。

図58-4 1129(その他の飲料・たばこ)

先述の単位変換の「清涼飲料」の単位換算値(1.0t/kl)を用いて、清涼飲料の生産単位を[kl]から[t]に換算して、重量単価[初期値]を再計算します。

分類コード:2111(部門名:石油製品)

上述の単位変換の表での「石油製品」の単位換算値(0.865[t/kl])を用いて、「ガソリン」・「ジェット燃料油」・「灯油」・「軽油」・「A重油」・「B・C重油」、「ナフサ」の生産単位を[t]に換算して、重量単価[初期値]を再計算します。

Sub 単位換算での重量単価初期値推計()
    ' 単位換算での重量単価初期値の推計
    Dim totalWeight As Double
    Dim totalPrice As Double
    Dim pricePerTon As Double
    Dim wSheet As Worksheet

    Set wSheet = Workbooks("H23岩手県重量単価初期値推計.ods").Worksheets("2111")
    pricePerTon = 0
    totalWeight = 0
    totalPrice = 0
    For i = 2 To 1000
        If wSheet.Cells(i, 3).Value = "t" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        ElseIf wSheet.Cells(i, 2).Value Like "自動車ガソリン" +"*" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "ジェット燃料油" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "*" + "ガソリン" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "灯油" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "軽油" + "*" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "A重油" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "B重油・C重油" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "石油化学用" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        ElseIf wSheet.Cells(i, 2).Value Like "その他用" Then
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 0.865
        End If
    Next
    pricePerTon = totalPrice * 1000000 / totalWeight
    wSheet.Cells(2, 10).Value = pricePerTon
End Sub

分類コード:2521(部門名:セメント・セメント製品)

上述の単位変換の表の、「生コンクリート」の単位換算値を用いて、重量単価[初期値]を再計算します。

Sub 単位換算での重量単価初期値推計()
    ' 単位換算での重量単価初期値の推計
    Dim totalWeight As Double
    Dim totalPrice As Double
    Dim pricePerTon As Double
    Dim wSheet As Worksheet

    Set wSheet = Workbooks("H23岩手県重量単価初期値推計.ods").Worksheets("2521")
    pricePerTon = 0
    totalWeight = 0
    totalPrice = 0
    For i = 2 To 1000
        If wSheet.Cells(i, 3).Value = "t" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        ElseIf wSheet.Cells(i, 2).Value = "生コンクリート" Then
            totalWeight = totalWeight + wSheet.Cells(i, 4).Value * 1.5
            totalPrice = totalPrice + wSheet.Cells(i, 6).Value
        End If
    Next
    pricePerTon = totalPrice * 1000000 / totalWeight
    wSheet.Cells(2, 10).Value = pricePerTon
End Sub

Follow me!

コメントを残す

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