みなさん,こんにちは。
シンノユウキ(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で表示値を取得するためには
なお,表示値を計算可能な値に変換したい場合は,下記のような記事が参考になると思います:
表示値を計算可能な値に変換するためには