成分表2020を表示値に変換する

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

2021年12月27日に「日本食品標準成分表2020年版(八訂)」の正誤表が公開されました。それに伴い公開されているデータも更新されたのですが,そのデータではセルの値と表示値が異なる場合があるという,非常に特徴的なデータ構成をしています。

おそらく,印刷用のデータとして利用することを想定されていると思われます。セルの値よりも,表示値が正しいとされるようです。印刷用の入稿データであれば問題とならないのかもしれませんが,計算用データとして二次利用しようとした場合には,とても扱いづらいものです。

そこで,成分表2020のデータをすべて表示値に変換したデータを作成してみました。そして,それに使用したVBAのコードも公開することとしました。参考になれば幸いです。

スポンサーリンク

成分表2020のデータ

成分表の成分値等を,すべて表示値に変換し,文字列としたExcelファイルです。そのまま計算には利用できませんが,元データよりは加工・利用しやすいと思います。シート「表示値」を参照してください。

ただし,表示値に変換したデータに何らかの不備があったとしても私では責任をとれませんので,その点はご了承ください。

使用したVBAコード

データの変換にはVBAを使用しています。コード全文は下記です:

'設定用の定数。必要に応じ変更のこと ---------------------------------
Const BN_TARGET As String = "fc2020本表_表示値変換_220102dl.xlsx" 'ブック名
Const SN_ORG    As String = "表全体"                              '本表のシート名
Const ADR_Data  As String = "A1:BM2490"                           'データ範囲
'--------------------------------------------------------------------

Sub main()
    
    Dim wsOrg As Worksheet: Set wsOrg = Workbooks(BN_TARGET).Worksheets(SN_ORG)
    Dim wsDst As Worksheet: wsOrg.Copy after:=wsOrg: Set wsDst = ActiveSheet
    wsDst.Name = "表示値"
    
    Dim ary As Variant: ary = wsOrg.Range(ADR_Data)
    Dim i As Long, j As Long
    
    For i = 1 To UBound(ary, 1)
        For j = 1 To UBound(ary, 2)
            ary(i, j) = wsOrg.Cells(i, j).Text
        Next j
    Next i
    
    wsDst.Range(ADR_Data).NumberFormat = "@"
    wsDst.Range(ADR_Data) = ary
    
End Sub

コードは単純で,元データのセルからTextプロパティを利用して表示値し,それをアウトプットしています。なお,食品成分表に限らず,表示値を取得したい場合は,下記も参考にしてください:

Excelで表示値を取得するためには

なお,表示値を計算可能な値に変換したい場合は,下記のような記事が参考になると思います:

タイトルとURLをコピーしました