Extract from text revised edition of “METs table of Physical Activities”

National Institute of Health and Nutrition has revised ‘METs table of Physical Activities’ 2011 edition. Because it’s difficult to use as PDF file, I have extracted text data from it. I have asked if I could publish the file on this blog on July 3rd, 2012.

1. Open the file and copy all text.

2. Create new EXCEL book and paste with ‘Text File Wizard’. In the second tab, you have to remove all check mark of delimiters. In the third tab, select ‘String’ data type of column.

3. Press ‘Alt’ key and ‘F11’ key to launch VBE, insert module, and run the following code.

Option Explicit
Sub METS()
Dim mySht   As Worksheet
Dim myRng   As Range
Dim myAr    As Variant
Dim i       As Long
Dim j       As Long
Dim myReg   As Object
Dim myMatches   As Object
Dim myMatch     As Object
Const strReg    As String = "^[0-9]{5}$"
Dim CODE()  As String
Dim METS()  As Single
Dim MajorHeading()  As String
Dim SpecificActivities()    As String
Dim myArray()   As Variant
Set myReg = CreateObject("VBScript.RegExp")
With myReg
    .Pattern = strReg
    .IgnoreCase = True
    .Global = True
End With

Set mySht = ActiveSheet
Set myRng = mySht.UsedRange
myAr = myRng
j = 0
For i = LBound(myAr) To UBound(myAr)
    If myReg.Test(myAr(i, 1)) Then
        Set myMatches = myReg.Execute(myAr(i, 1))
        ReDim Preserve CODE(j)
        ReDim Preserve METS(j)
        ReDim Preserve MajorHeading(j)
        ReDim Preserve SpecificActivities(j)
        CODE(j) = myAr(i, 1)
        METS(j) = myAr(i + 1, 1)
        MajorHeading(j) = myAr(i + 2, 1)
        SpecificActivities(j) = myAr(i + 3, 1)
        j = j + 1
    End If
Next i
ReDim myArray(j, 3)
For j = LBound(myArray) To UBound(myArray) - 1
    myArray(j, 0) = CODE(j)
    myArray(j, 1) = METS(j)
    myArray(j, 2) = MajorHeading(j)
    myArray(j, 3) = SpecificActivities(j)
Next j
Set mySht = Worksheets.Add
mySht.Range("A1").Value = "CODE"
mySht.Range("B1").Value = "METS"
mySht.Range("C1").Value = "MajorHeading"
mySht.Range("D1").Value = "SpecificActivities"
mySht.Range("A2:D827") = myArray
End Sub

改訂版『身体活動のメッツ表』からテキストを抽出する



 国立健康・栄養研究所が2011年版『身体活動のメッツ表』を改訂しました.下記リンクはPDFファイルですが,そのままでは使いにくいためEXCELでテキスト情報を抽出しました.2012年7月3日,国立健康・栄養研究所に抽出したテキストファイルを公開して良いか問い合わせました.

身体活動のメッツ表



1. PDFファイルを開き,全てを選択してコピーします.

2. EXCELの新規ブックを作成し,テキストファイルウィザードを使用して貼り付けます.この際,テキストファイルウィザードの2番目のタブで区切り文字の全てのチェックを外して下さい.3番目のタブでは列のデータ形式を『文字列』に変更して下さい.

3. ‘Alt’ キーと ‘F11’ キーを押下して VBE を起動し,標準モジュールを挿入して下記コードを実行して下さい.

Option Explicit
Sub METS()
Dim mySht   As Worksheet
Dim myRng   As Range
Dim myAr    As Variant
Dim i       As Long
Dim j       As Long
Dim myReg   As Object
Dim myMatches   As Object
Dim myMatch     As Object
Const strReg    As String = "^[0-9]{5}$"
Dim CODE()  As String
Dim METS()  As Single
Dim MajorHeading()  As String
Dim SpecificActivities()    As String
Dim myArray()   As Variant
Set myReg = CreateObject("VBScript.RegExp")
With myReg
    .Pattern = strReg
    .IgnoreCase = True
    .Global = True
End With

Set mySht = ActiveSheet
Set myRng = mySht.UsedRange
myAr = myRng
j = 0
For i = LBound(myAr) To UBound(myAr)
    If myReg.Test(myAr(i, 1)) Then
        Set myMatches = myReg.Execute(myAr(i, 1))
        ReDim Preserve CODE(j)
        ReDim Preserve METS(j)
        ReDim Preserve MajorHeading(j)
        ReDim Preserve SpecificActivities(j)
        CODE(j) = myAr(i, 1)
        METS(j) = myAr(i + 1, 1)
        MajorHeading(j) = myAr(i + 2, 1)
        SpecificActivities(j) = myAr(i + 3, 1)
        j = j + 1
    End If
Next i
ReDim myArray(j, 3)
For j = LBound(myArray) To UBound(myArray) - 1
    myArray(j, 0) = CODE(j)
    myArray(j, 1) = METS(j)
    myArray(j, 2) = MajorHeading(j)
    myArray(j, 3) = SpecificActivities(j)
Next j
Set mySht = Worksheets.Add
mySht.Range("A1").Value = "CODE"
mySht.Range("B1").Value = "METS"
mySht.Range("C1").Value = "MajorHeading"
mySht.Range("D1").Value = "SpecificActivities"
mySht.Range("A2:D827") = myArray
End Sub

Effect of a Mediterranean-Style Diet on Endothelial Dysfunction and Markers of Vascular Inflammation in the Metabolic Syndrome

Although it is not clear that how mediterranean style diet reduce the inflammation state associated with metabolic syndrome, C reactive protein has been suggested to form lesion directly with endothelial dysfunction and leukocyte activation.

Effect of a Mediterranean-Style Diet on Endothelial Dysfunction and Markers of Vascular Inflammation in the Metabolic Syndrome

A Randomized Trial

Katherine Esposito, MD; Raffaele Marfella, MD, PhD; Miryam Ciotola, MD; Carmen Di Palo, MD; Francesco Giugliano, MD; Giovanni Giugliano, MD; Massimo D’Armiento, MD; Francesco D’Andrea, MD; Dario Giugliano, MD, PhD

ABSTRACT

Context The metabolic syndrome has been identified as a target for dietary therapies to reduce risk of cardiovascular disease; however, the role of diet in the etiology of the metabolic syndrome is poorly understood.

Objective To assess the effect of a Mediterranean-style diet on endothelial function and vascular inflammatory markers in patients with the metabolic syndrome.

Design, Setting, and Patients Randomized, single-blind trial conducted from June 2001 to January 2004 at a university hospital in Italy among 180 patients (99 men and 81 women) with the metabolic syndrome, as defined by the Adult Treatment Panel III.

Interventions Patients in the intervention group (n = 90) were instructed to follow a Mediterranean-style diet and received detailed advice about how to increase daily consumption of whole grains, fruits, vegetables, nuts, and olive oil; patients in the control group (n = 90) followed a prudent diet (carbohydrates, 50%-60%; proteins, 15%-20%; total fat, <30%).

Main Outcome Measures Nutrient intake; endothelial function score as a measure of blood pressure and platelet aggregation response to L-arginine; lipid and glucose parameters; insulin sensitivity; and circulating levels of high-sensitivity C-reactive protein (hs-CRP) and interleukins 6 (IL-6), 7 (IL-7), and 18 (IL-18).

Results After 2 years, patients following the Mediterranean-style diet consumed more foods rich in monounsaturated fat, polyunsaturated fat, and fiber and had a lower ratio of omega-6 to omega-3 fatty acids. Total fruit, vegetable, and nuts intake (274 g/d), whole grain intake (103 g/d), and olive oil consumption (8 g/d) were also significantly higher in the intervention group (P<.001). The level of physical activity increased in both groups by approximately 60%, without difference between groups (P = .22). Mean (SD) body weight decreased more in patients in the intervention group (−4.0 [1.1] kg) than in those in the control group (−1.2 [0.6] kg) (P<.001). Compared with patients consuming the control diet, patients consuming the intervention diet had significantly reduced serum concentrations of hs-CRP (P = .01), IL-6 (P = .04), IL-7 (P = 0.4), and IL-18 (P = 0.3), as well as decreased insulin resistance (P<.001). Endothelial function score improved in the intervention group (mean [SD] change, +1.9 [0.6]; P<.001) but remained stable in the control group (+0.2 [0.2]; P = .33). At 2 years of follow-up, 40 patients in the intervention group still had features of the metabolic syndrome, compared with 78 patients in the control group (P<.001).

Conclusion A Mediterranean-style diet might be effective in reducing the prevalence of the metabolic syndrome and its associated cardiovascular risk.

メタボリック症候群における内皮機能障害と血管炎症マーカーに対する地中海式料理の影響

 地中海式料理がいかなる機序でメタボリック症候群に関連する炎症状態を減少させるかについては分かっていませんが,白血球活性化と内皮機能障害を通じて,CRP が直接病変形成に関与している可能性が示唆されています.

 考察の文中の丸括弧は参考文献の番号です.和訳の瑕疵の責任は私にありますが,この記事の利用に関する責任は各自でお願いします.

メタボリック症候群における内皮機能障害と血管炎症マーカーに対する地中海式料理の影響

無作為化試験

Katherine Esposito, MD; Raffaele Marfella, MD, PhD; Miryam Ciotola, MD; Carmen Di Palo, MD; Francesco Giugliano, MD; Giovanni Giugliano, MD; Massimo D’Armiento, MD; Francesco D’Andrea, MD; Dario Giugliano, MD, PhD

背景 メタボリック症候群は心血管疾患を減少させる食事療法の目標として同定されている.しかしながら,メタボリック症候群の疫学において食事の役割はほとんど理解されていない.

対象 メタボリック症候群患者における地中海式料理の内皮機能と血管炎症性マーカーに対する影響を評価すること.

デザイン,設定,患者 無作為化した単盲検試験が 2001 年6月から 2004年1月まで大学病院において成人治療パネル III によってメタボリック症候群を有すると同定された患者180 名(男性 99 名,女性 81 名)を対象に実施された.

介入 介入群患者 (n=90) は地中海式料理に従うよう指示され,全粒穀物,果実類,野菜類,ナッツ類,オリーブオイルの日々の消費をどうやって増やすかについての詳細な指導を受けた.対照群患者 (n=90) は慎重な食事(炭水化物 50% – 60%; 蛋白質 15% – 20%; 総脂質 30% 未満)に従った.

主な転帰の指標 栄養摂取.血圧とL-アルギニンに対する血小板凝集反応としての内皮機能スコア.脂質とグルコースの変数.インスリン感受性.循環血漿中の高感度C反応性蛋白 (hs-CRP)とインターロイキン6 (IL-6), インターロイキン7 (IL-7), インターロイキン 18 (IL-18).

結果 2年後,地中海式料理に従った患者では一価不飽和脂肪酸,多価不飽和脂肪酸,食物繊維,ω-3脂肪酸に対するω-6脂肪酸の比率などにおいてより豊富に食物を消費していた.あらゆる果実類,野菜類,ナッツ類 (274 g/d) の摂取,全粒穀物 (103 g/d), オリーブオイルの消費 (8 g/d) もまた介入群では有意に高かった (P < 0.001).身体活動レベルは両群ともに 60% 近く増加していたが,群間での差異は認められなかった (P = 0.22).体重の平均値と標準偏差はそれぞれ – 4.0 [1.1] kg, - 1.2 [0.6] kgであり,対照群よりも介入群でより減少していた (P < 0.001).対象食事群と比較して,介入食消費群では高感度 CRP (P = 0.01), IL-6 (P = 0.04), IL-7 (P = 0.4), IL-18 (P = 0.3) が低下しており,インスリン抵抗性も減少していた (P < 0.001).内皮機能スコア (mean [SD]) は介入群では改善が見られた (+ 1.9 [0.6]; P < 0.001) が,対照群では変化しないまま (+ 0.2 [0.2]; P = 0.33) であった.2年間の経過観察時点で介入群の患者でメタボリック症候群の基準を満たす患者は40 名に過ぎなかったが,対照群患者では 78 名であった (P < 0.001).

結論 地中海式料理はメタボリック症候群とそれに関連する心血管危険因子の有病率を減少させる効果がある可能性がある.

JAMA. 2004; 292: 1440-1446

 メタボリック症候群は心血管疾患と2型糖尿病のリスクを増やす因子の集合からなる.最近の推定では合衆国においてメタボリック症候群は一般的であるとされ,成人人口の 24% が罹患していると推定されている.その臨床的同定方法は腹部肥満の腹囲測定,動脈硬化性脂質異常,血圧上昇,耐糖能異常に基づいている.本症候群の成因は大きすぎて不明だが,恐らく遺伝因子,代謝因子,食事を含む環境因子の複雑な相互作用を表している.最近の幾つかの研究では,炎症状態もまたメタボリック症候群の要素の一つであると示されている.さらに,低レベルの炎症が内皮機能障害に関連していることのエビデンスが蓄積しつつある.

 食事はメタボリック症候群の個々の特徴に繋がる観点であるにもかかわらず,本症候群の原因としての食事の役割は殆ど理解されておらず,少数の観察研究がなされているに過ぎない.成人治療パネル III のメタボリック症候群を有する患者への推奨は一般的な食事の推奨からなる.最近アメリカ心臓病学会の科学諮問委員会は,地中海式料理が心血管疾患の進展に対して印象的な効果を有すると述べた.

 本研究の目的は,メタボリック症候群患者において内皮機能障害と血管炎症とに対する地中海式料理の効果を評価することであった.我々は L-アルギニン,つまり一酸化窒素の自然の前駆体なのだが,これに対する血管の反応を評価することで内皮機能を研究した.更に我々は例のメタボリック症候群患者の低レベルの炎症状態を,循環血漿中の高感度 CRP の他 IL-6, IL-7, IL-18 を測定することで特徴づけた.これらの前炎症インターロイキンは恐らく血栓性の心血管イベントに関連しているか (16, 17),プラークの不安定化への関与を示唆されている (18).そこで我々は,植物性化学物質,抗酸化剤,αリノレン酸,食物繊維に富む食品の消費を増やすようにデザインした地中海式料理の無作為化試験を行った.

方法

 2001 年6月から 2004 年1月までの間に,イタリアのナプレスのナプレス第2大学代謝疾病部門の外来に通院する男女から参加者を採用した.本研究の参加者は坐位勝ち(1週間の身体運動が1時間未満)で過去6ヶ月以内に体重減少プログラムに参加した証拠がなく,安定した体重 (+- 1 kg) を維持している人々であった.栄養の研究に従事している参加者は一人もいなかった.各々の患者は完全な個人的健康状態と病歴に関するアンケートを受けた.これはスクリーニングツールとして役立った.

 本試験に登録するには患者は以下に示すメタボリック症候群の基準の3つ以上を有していなければならなかった.成人治療パネル III に定義されているが,(1) 内臓脂肪(ウエスト周囲径が男性で 102 cm より大,女性で 88 cm より大と定義).(2) 血清 HDL コレステロール低値(男性で 40 mg/dL 未満,女性で 50 mg/dL 未満).(3) 高中性脂肪血症(中性脂肪値が 150 mg/dL 以上).(4) 血圧上昇(130/85 mm Hg 以上).(5) 耐糖能異常(空腹時血糖値 110 mg/dL 以上).心血管疾患を有しているか,精神的問題があるか,アルコール中毒の既往(過去1年以内に1週間に 500 g 以上のアルコール消費)があるか,喫煙歴があるか,何らかの薬物を服用している患者は除外した.本試験はナプレス第2大学倫理委員会が承認し,全患者が書面で同意した.

 患者はコンピュータで発生させた乱数列を用いて介入群か対照群のいずれかに無作為に割り付けられた (Figure 1).インフォームドコンセントが済んだ後,中央の安全な場所で割付を行い,密封したフォルダの中に隠蔽した.訪問をスケジュールした看護師は無作為化リストに関与しなかった.しかしながら,介入に関与した職員は割付の群に注意せざるを得なかった.そこで,本試験は一部盲検化したものとなった.検査部門の職員は患者の群割付を知らなかった.

 例の介入食を消費する患者は伝統料理の有用性について詳細な指導を受けた.月に一回の少人数でのセッションを経て,介入群患者は食事カロリーを(必要があれば)減らすこと,個人の目標を設定すること,食事日記を付けてセルフモニタリングを行うことの教育を受けた.行動精神カウンセリングも提供された. 3日間の食事記録に基づいて個々の患者に合わせて食事指導を調整した.推奨される食事療法の成分は以下の通り.炭水化物 50% から 60%.蛋白質 15% から 20%.総脂質 30% 未満.飽和脂肪酸 10% 未満.コレステロール消費は1日 300 mg 未満.さらに患者は1日ごとに最低 250 g から 300 g の果実類,125 g から 150 g の野菜類,25 g から 50 g のクルミを消費するように指導された.加えて1日ごとに 400 g の全粒穀物(マメ,コメ,トウモロコシ,小麦)を消費すること,オリーブオイルの消費を増やすことを推奨された.患者は24ヶ月間プログラムに従事し,1年目は毎月,2年目は2ヶ月ごとに栄養セッションを開催した.プログラムへの準拠は会合への出席と食事日記の徹底によって評価した.

 対照食事を消費する患者は一般に口頭又は文書で,ベースラインにおいて健康的な食品の選択についての情報を受けその後訪問を受けたが,個人的なプログラムの提供は受けなかった.しかしながら,一般的に推奨される食事の主要栄養素の組成は介入群のそれと近似していた(炭水化物 50% から 60%,蛋白質 15% から 20%,総脂質 30% 未満).さらに対照群の患者は2年間の試験期間中,2ヶ月ごとに個人的に勉強会にも参加した.両群の全患者は身体活動レベルを増やす手引きを受け取り,1日に30分間,主にウォーキングだがそれだけでなく水泳や有酸素球技(サッカーなど)を行った.

 身長と体重は参加者が軽装で靴を脱いだ状態で Seca 200 体重計とそれに付属する身長測定器で測定した.24時間の栄養摂取量は食品成分表と患者の週ごとの食事記録から計算した.食事の順守と運動活動を評価するため,すべての参加者に3日間の完全な記録,つまり食事記録および就業中の身体活動,家事の身体活動,余暇時間の身体活動の完全な記録を求めた.食事は標準計量カップとスプーンおよび重量の近似ダイアグラムで計量した.

内皮機能

 内皮機能は前述したように L-アルギニンテストにより評価した.手短に述べると,血圧と心拍数の自動測定装置 (Omheda 2300; Finalpres, Englewood, Calif) にかけた後,血管内に 3g のL-アルギニン(L-アルギニン塩化物の 30% 溶液 10 mL),これは一酸化窒素の自然前駆体であるが,これを 60 秒以内に急速静注した.L-アルギニン静注前と投与 10 分後の 1.25 microM アデノシン2リン酸に対する血圧と血小板凝集反応を測定した.

 我々は両者の反応を加算した点数を発展させた.血圧に関しては1点を平均血圧 2 mm Hg 未満の反応とし,2点2 mm Hgと3 mm Hgの間,3点を3 mm Hg と 4 mm Hg の間,4点を 4 mm Hg と 5 mm Hg の間,5点を 5 mm Hg より大とした.血小板凝集反応については1点を 2.5% 未満の反応とし,2点を 2.5% と 5% の間,3点を 5% と7.5% の間,4点を 7.5% と 10% の間,5点を 10% より大とした.我々の研究においては,血圧と血小板凝集反応の平均値(標準偏差)は健康な男女(それぞれn = 50)の対照群において L-アルギニン静注に従って(基準値と10 分値との差異),- 6.5 (1.5) mm Hg, – 13% (3%) それぞれ低下した.その対応する最大点数は 10 点であった.

検査解析

 空腹時のインスリン感受性の推定値は恒常性モデル評価 (HOMA) により評価され,以下の式で計算する.空腹時血漿グルコース濃度 (mmol/L) ×空腹時血清インスリン値 (microU/mL) / 25.これはMatthews らの提唱による.その方法では HOMA 点数が高いことはインスリン感受性が低い(インスリン抵抗性である)ことを示している.病院の臨床検査室において血清総コレステロール値,HDL コレステロール値,中性脂肪,グルコース濃度を測定した.血漿インスリン濃度はラジオイムノアッセイ法により測定した (Ares, Serono, Italy).

 サイトカインと高感度 CRP 値の血清標本は測定まで – 80 度で保管した.IL-6, IL-7, IL-18 の血清濃度は高感度の定量的サンドイッチ酵素アッセイ法 (Quantikine HS, R&D Systems, Minneapolis, Minn) で重複して決定した.高感度 CRP は Behring Nephelometer 2 (Dade Behring, Marburg, Germany) を用いて免疫比濁法により測定した.我々の研究室では,健康な男女 50 名ずつ計 100 名の四分位範囲における中央値は以下のとおり.高感度 CRP 0.7 mg/L (0.2 – 3.2 mg/L), IL-6 2.1 pg/mL (0.3 – 5.2 pg/mL), IL-7 1.8 pg/mL (0.5 – 5.2 pg/mL), IL-18 129 pg/mL (50 – 275 pg/mL).

統計解析

 データは他に記述がなければ平均値(標準偏差)として記述する.データを治療目的により解析した.我々は連続変数にはt検定を,高感度 CRP, IL-6, IL-7, IL-18 にはWilcoxon テストを用いてベースライン値を評価した.我々は全患者をメタボリック症候群の3,4,5の要素数で分類し,高感度 CRP 中央値と HOMA 平均値との関係のエビデンスについて評価し,これらの群にまたがる内皮機能スコアを Jonckheere – Terpstra test を用いて評価した.我々は危険因子と栄養摂取量を比較した,経過観察期間の終了時点での値に基くテストを用いた2年後に,ベースラインからの差異に基く t-test を用いて.経過観察期間中に脱落した患者を除いた解析の結果は,脱落した患者の最後に得られた記録を含めてもさほど変化しなかった.それ故全患者のデータを含めて無作為化として表記した.Spearman 順位相関係数を用いてメタボリック症候群の変数とサイトカイン値の関連を定量化した.HOMA と内皮機能点数における治療効果,サイトカイン値,メタボリック症候群のそれぞれの要素は対応のあるt検定と Wilcoxon matched test を用いて体重変化を調整した後に検定した.治療後のメタボリック症候群を有する2群における参加者の割合を比較するのにχ二乗検定を用いた.P < 0.05 を統計的有意とみなした.すべての解析は SPSS 9.0 (SPSS inc, Chicago, Ill) を用いて実施した.

結果

 180 名の患者を介入群 (n = 90) か対照群 (n = 90) に無作為割付した (Figure 1).両群ともメタボリック症候群の要素数を含めて同等であった (Table 1).メタボリック症候群の要素数が増えるにつれて高感度 CRP 値と HOMA 点数が増加していた.一方で,メタボリック症候群の要素数と内皮機能スコアの間には逆相関が見られた (すべての傾向において P < 0.001) (Figure 1).Spearman 順位相関係数によると,以下の関連は否定的であった.つまり内皮機能スコアとウエスト周囲径 (r = – 0.30, P = 0.01), 高感度 CRP (r = – 0.33, P = 0.01), HOMA スコア (r = – 0.24, P = 0.02),IL-6 (r = – 0.21, P = 0.02).

 2年間の経過観察後,介入群の8名と対照群の8名が試験から脱落した.脱落者は全員観察開始後 24 週以降であった.介入群の脱落者は 24 週の観察期間後体重減少を認めており,生活習慣の変更を遵守していたことを示唆していた.

 ベースラインのデータは2群間での栄養摂取量に重要な差異がないことを示している (Table 2).2年後,介入群では対照群と比較して以下の傾向が見られた.すなわち一価不飽和脂肪酸と多価不飽和脂肪酸からなるカロリー摂取の増加,食物繊維摂取の増加,ω-3 脂肪酸に対するω-6 脂肪酸摂取量の減少,エネルギー・飽和脂肪酸・コレステロールの減少.果実類,野菜類,ナッツ類,全粒穀物の摂取量とオリーブオイルの消費量は介入群において著明に増加していた (Table 2).運動量は両群ともに増加していた(介入群 48 [SD, 10] 分間/週から 84 [SD, 36] 分間/週,P < 0.001.対照群 51 [SD, 9] 分間/週から 81 [SD, 38] 分間/週,P < 0.001).両群間での差異は認めなかった (P = 0.22).

 2年後,介入群の患者は体重,BMI, ウエスト周囲径,HOMA スコア,血圧,血糖値,インスリン値,総コレステロール値,中性脂肪値の著明な減少を認め,HDL コレステロール値,対照群において記録されたすべての値において著明な増加を認めた (Table 3).性別での差異は認めなかった.IL-6, IL-7, IL-18, 高感度 CRP の介入群での血清濃度は対照群のそれと比較して著明に減少していた.内皮機能スコアは介入群においては改善を認めたが対照群では変化しなかった.内皮機能スコアと高感度 CRP 値(r = – 0.36, P < 0.01) および HOMA スコア (r = - 0.31, P = 0.01) の間には負の相関が見られた.

 2年間の観察期間後の時点において介入群の 60 名の参加者はメタボリック症候群の要素数の減少を経験し (Table 3), 40 名がメタボリック症候群のままと分類されたに過ぎなかった.対照群においては大きく様相は異なり,78 名の患者が未だメタボリック症候群を有していると分類された (P < 0.001).体重変化の調整前のデータはメタボリック症候群の要素数の著明な減少を示し,2年間の観察期間後の時点では介入群で 30 名,対照群で 73 名がメタボリック症候群を有していると分類された.

コメント

 本試験においては,メタボリック症候群を有する患者による地中海式料理の消費は内皮機能の改善と全身血管炎症マーカーの著明な減少に関係していた.更に,介入食に従事した参加者はメタボリック症候群の要素数の減少を認め,全体のメタボリック症候群の有病率は約半分に減少した.体重でデータを調整したため,介入後のメタボリック症候群の全体の有病率の減少は保守的な測定を表す.これらの所見は共に地中海式料理がメタボリック症候群の治療に安全な戦略であり心血管リスクの減少に役立つことを示唆している.

 メタボリック症候群の個々の要素に対する現在のガイドラインは生活習慣の修飾(体重の減量と運動)を一次治療として強調しており,一方で心血管疾患ガイドラインが指示しない限り薬物治療は二次治療とみなされている (22).我々の試験では,介入食の効果は体重変化には控えめな関係を示していたが,CRP 値には効果がなく,対照群において運動を増量しても変化がなかったのと同様であった (23).体重変化で結果を調整したため,我々の所見は,体重の同時変化は大きく独立しており,地中海式料理はメタボリック症候群に関連する炎症状態と内皮機能障害を減少させる役割を演じているかもしれないことを示唆している.

 地中海式料理がいかなる機序でメタボリック症候群に関連する炎症状態を減少させるかについては分かっていない.主要栄養素の摂取が酸化ストレス物質を生じて前炎症状態に至る (24).この興味深いエビデンスは,健康な個人が高脂肪食を食べた後,抗酸化ビタミン (25, 26) や食物の抗酸化物質 (20) が一過性の内皮機能障害を改善する可能性により支持されている.更に,食事中の食物繊維含有の修飾がサイトカイン環境に影響を及ぼす可能性がある.高炭水化物食における食物繊維含有の上昇 (4.5 g から 16.8 g)は,健康な人においても2型糖尿病患者においても,循環血漿中の IL-18 値の減少に関係する (27).食物繊維が抗炎症作用を有する可能性があるため,最低でも腸管機能においては,介入食における食物繊維の含有は,最終的には他の幾つかの抗酸化機能を有する要素に拡大したとしても,主要栄養素の消化後に一過性に発生する酸化ストレス物質に影響を及ぼす可能性がある.ω-3 脂肪酸の抗炎症作用が示唆されたが,この効果の大部分はサプリメントの使用で見られるものである.

 我々の結果では,メタボリック症候群の要素数が増えると高感度 CRP が直線的に上昇し,内皮機能スコアが直線的に障害を示した.このことから以下のことが推測される.CRP は IL-6 の影響下に肝臓で産生される (9) が,メタボリック症候群に関する補助的なサイトカイン環境と内皮機能障害の間を橋渡しするものであるのかもしれない.強力なリスクマーカーであることに加えて,最近の知見では CRP は白血球活性化と内皮機能障害を通じて,直接病変形成に関与している可能性を示唆している (30, 31).更に,炎症反応の増加がインスリン抵抗性と代償性の高インスリン血症に至ることを示唆しており,炎症性サイトカインは脂肪細胞から放出され,重要な役割の大部分に起因している (9).代わりに,インスリン抵抗性は,インスリン抵抗状態におけるインスリンの抗炎症効果を減弱させた結果としての高サイトカイン産生に責任があるのかもしれない (32).機序のいかんに関わらず,メタボリック症候群に伴う前炎症状態はインスリン抵抗性と内皮機能障害に関連しており,炎症と代謝過程の間の接続を提供しており,血管機能にとって極めて有害なものである.

 我々の試験には1つの限界がある.個々の食事の要素が観察された変化を考慮できるのか否か,または代謝性危険因子がすべての食事変化の結果なのか否かについて定義できないことである.本試験のような複数の食事介入にもかかわらず,各々の介入を個別に評価することは困難であり,食事全般の手法は心血管疾患の予防に臨床的に有効と強調されてきた (33).Lyon Heart Study (34) は食事療法が心血管疾患を有する個人において致死的または非致死的心血管イベントの現象に役立つことを示した.Singh らは既に冠動脈疾患を有するかその高リスクの患者 1000 名を対象にインド地中海料理を試験した (35).対象食事群と比較して,介入食群では致死的心筋梗塞が 1/3 に減少し,心臓由来の突然死の割合が 2/3 に減少した.ギリシャにおける健康な成人 22,043 名を含む人口ベースの研究においては,伝統的地中海料理の順守は総死亡率の低さ,冠動脈疾患による死亡率の低さおよび癌による死亡率の低さと有意な関係がある (36).地中海料理スコアと死亡率の間には堅牢な逆相関があるにも関わらず,個々の食事の要素には目立った関連は見られない.そのため,部分の総和と言うよりも,多数の食事の要素の(相乗的,相互作用的な)累積効果が実質的なのかもしれないと示唆される.

 本試験の結果は最初の実証を示したもので,我々の知識にとって,全粒穀物や果実類,野菜類,豆類,クルミ,そしてオリーブオイルに富む地中海料理はメタボリック症候群の有病率とそれに関連ずる心血管リスクを共に減少させるかもしれない.そのような食事の心血管保護効果の1つの機序は,メタボリック症候群に関連する低レベルの炎症状態の軽減を通しているのかもしれない.体重減少がメタボリック症候群の治療の礎石として依然重要であることに違いはないものの,公衆衛生の視点からここにあの調査に似た食事の導入は,特に体重を減らせない人にとっては,心血管リスクに更なる利益をもたらすかも知れない.

Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 2

According to the article, download the PDF files ‘1299012_1.pdf’ to ‘1299012_18.pdf’. Corresponding to each PDF file in PDF files, copy all text from one file and option paste to one worksheet. As a result, you would make 18 worksheets in a book. In the first tab of ‘Text File Wizard’, select option ‘The data field separated by delimiters such as comma or tab’. Go to the last tab without any change in second tab. In the last tab, change option data type of the first column to ‘String’. Mainly in column A of all worksheets, you have to fix cell value by yourself. Save the book as ‘Category.xlsm’. Furthermore, download the EXCEL book from this site, copy worksheet from it to ‘Category.xlsm’ which you previously prepared, and change the sheet name to ‘Sheet0’.

Copy or move the worksheet, which you made at Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 1, to ‘Category.xlsm’. As a result, ‘Category.xlsm’ book has 20 worksheets. Press ‘Alt’ key and ‘F11’ key to launch VBE, insert module and run the code below. The code makes ‘M_CATEGORY’ sheet.

Option Explicit
Sub Select_Class()
Dim tmpSht              As Worksheet
Dim tmpRng              As Range
Dim tmpArray            As Variant
Dim workArray           As Variant
Dim h                   As Long
Dim i                   As Long
Dim j                   As Long
Dim k                   As Long
Dim l                   As Long
Dim m                   As Long
Dim n                   As Long
Dim p                   As Long
Dim q                   As Long
Dim r                   As Long
Dim RegExp_Japanese     As Object
Dim RegExp_English      As Object
Dim RegExp_ItemNum      As Object
Const PtnJPN            As String = "[^A-Za-z0-9'\.\-\*]{2,}"
Const PtnENG            As String = "^[A-Za-z0-9'\,\.\-\%]+$"
Const PtnItemNum        As String = "^[0-9]{5}$"
Dim Item_Number()       As String
Dim JapaneseItem()      As String
Dim EnglishItem()       As String
Dim EnglishString       As String
Dim JapaneseClass()     As String
Dim English_Class()     As String
Dim ClassStringEN       As String
Dim ItemNumArray()      As String
Dim ItemENGArray()      As String
Dim ClassArrayJP()      As String
Dim ClassArrayEN()      As String
Dim RegExp_AngleBracket As Object
Dim RegExp_RoundStartJP As Object
Dim RegExp_RoundStartEN As Object
Dim RegExp_RoundExitEN  As Object
Const Ptn_Round_Start   As String = "^(\(|()"
Const Ptn_Round_Exit    As String = "(\)|))$"
Dim StringRoundEnglish  As String
Dim SubClassJapanese()  As String
Dim SubClass_English()  As String
Dim RegExp_Square_Start As Object
Dim RegExp_SquareExitEN As Object
Const Ptn_Angle_Start   As String = "^[<<]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_Exit   As String = "\]$"
Dim MidleClassJP()      As String
Dim MidleClassEN()      As String
Dim StrMidClassENG      As String
Dim SubClass_JPN()      As String
Dim SubClass_ENG()      As String
Dim mySht               As Worksheet
Dim myRng               As Range
Dim myAr                As Variant
Dim workArray2()        As String
Dim workArray3()        As String
Dim mySht2              As Worksheet
Dim myRng2              As Range
Dim myAr2               As Variant
Dim CEREALS             As Long
Dim POTATOES            As Long
Dim SUGARS              As Long
Dim PULSES              As Long
Dim NUTS                As Long
Dim VEGETABLES          As Long
Dim FRUITS              As Long
Dim MUSHROOMS           As Long
Dim ALGAE               As Long
Dim FISHES              As Long
Dim MEATS               As Long
Dim EGGS                As Long
Dim MILK                As Long
Dim OIL                 As Long
Dim CONFECTIONERIES     As Long
Dim BEVERAGES           As Long
Dim SEASONINGS          As Long
Dim PREPARED            As Long
    Set RegExp_Japanese = CreateObject("VBScript.RegExp")
    With RegExp_Japanese
        .Pattern = PtnJPN
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_English = CreateObject("VBScript.RegExp")
    With RegExp_English
        .Pattern = PtnENG
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_ItemNum = CreateObject("VBScript.RegExp")
    With RegExp_ItemNum
        .Pattern = PtnItemNum
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_Square_Start = CreateObject("VBScript.RegExp")
    With RegExp_Square_Start
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_SquareExitEN = CreateObject("VBScript.RegExp")
    With RegExp_SquareExitEN
        .Pattern = "[A-Za-z0-9'\,\.\-\%]+" & Ptn_Square_Exit
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_RoundStartJP = CreateObject("VBScript.RegExp")
    With RegExp_RoundStartJP
        .Pattern = Ptn_Round_Start & "[^A-Za-z0-9'\.\-\*]{2,}"
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_RoundStartEN = CreateObject("VBScript.RegExp")
    With RegExp_RoundStartEN
        .Pattern = Ptn_Round_Start & "[A-Za-z'\,\.\-\%]+"
    End With
    Set RegExp_RoundExitEN = CreateObject("VBScript.RegExp")
    With RegExp_RoundExitEN
        .Pattern = "[A-Za-z0-9'\,\.\-\%]+" & Ptn_Round_Exit
        .IgnoreCase = True
        .Global = True
    End With
j = 0
k = 0
l = 0
m = 0
q = 0
For Each tmpSht In Worksheets
    If tmpSht.Name = "M_CATEGORY" Then
        MsgBox prompt:="This book already has M_CATEGORY sheet." & vbCrLf & _
                       "Exit procedure.", _
              Buttons:=vbOKOnly, _
                Title:="Internal Error"
        Exit Sub
    End If
    If tmpSht.Name <> "Sheet0" And _
       tmpSht.Name <> "Sheet00" And _
       tmpSht.Name <> "Result" Then
        Set tmpRng = tmpSht.UsedRange
        tmpArray = tmpRng
        workArray = NoCancelArray(tmpArray)
        For h = LBound(workArray) To UBound(workArray)
            For i = workArray(h, 0) To workArray(h, 1)
                On Error Resume Next
                If RegExp_ItemNum.Test(tmpArray(i, 1)) And _
                   tmpArray(i, 2) <> "(欠番)" Then
                    EnglishString = ""
                    ReDim Preserve Item_Number(j)
                    ReDim Preserve JapaneseItem(j)
                    ReDim Preserve EnglishItem(j)
                    For p = 1 To 6
                        If RegExp_English.Test(tmpArray(i + 1, p)) Then
                            EnglishString = EnglishString & " " & tmpArray(i + 1, p)
                            EnglishString = Trim(EnglishString)
                        Else
                            Exit For
                        End If
                    Next p
                    Item_Number(j) = tmpArray(i, 1)
                    JapaneseItem(j) = tmpArray(i, 2)
                    EnglishItem(j) = EnglishString
                    j = j + 1
                End If
                On Error GoTo 0
                If RegExp_Japanese.Test(tmpArray(i, 1)) And _
                   RegExp_English.Test(tmpArray(i + 1, 1)) Then
                    ClassStringEN = ""
                    ReDim Preserve JapaneseClass(k)
                    ReDim Preserve English_Class(k)
                    For p = 1 To 6
                        If RegExp_English.Test(tmpArray(i + 1, p)) Then
                            ClassStringEN = ClassStringEN & " " & tmpArray(i + 1, p)
                            ClassStringEN = Trim(ClassStringEN)
                        Else
                            Exit For
                        End If
                    Next p
                    JapaneseClass(k) = tmpArray(i, 1)
                    English_Class(k) = ClassStringEN
                    k = k + 1
                End If
                If RegExp_Square_Start.Test(tmpArray(i, 1)) And _
                   RegExp_Square_Start.Test(tmpArray(i + 1, 1)) Then
                    StrMidClassENG = ""
                    ReDim Preserve MidleClassJP(l)
                    ReDim Preserve MidleClassEN(l)
                    For p = 1 To 6
                        StrMidClassENG = StrMidClassENG + " " + tmpArray(i + 1, p)
                        StrMidClassENG = Trim(StrMidClassENG)
                        If RegExp_SquareExitEN.Test(tmpArray(i + 1, p)) Then Exit For
                    Next p
                    MidleClassJP(l) = tmpArray(i, 1)
                    MidleClassEN(l) = StrMidClassENG
                    l = l + 1
                End If
                If RegExp_RoundStartJP.Test(tmpArray(i, 1)) And _
                   RegExp_RoundStartEN.Test(tmpArray(i + 1, 1)) Then
                    StringRoundEnglish = ""
                    ReDim Preserve SubClassJapanese(m)
                    ReDim Preserve SubClass_English(m)
                    For p = 1 To 6
                        StringRoundEnglish = StringRoundEnglish & " " & tmpArray(i + 1, p)
                        StringRoundEnglish = Trim(StringRoundEnglish)
                        If RegExp_RoundExitEN.Test(tmpArray(i + 1, p)) Then Exit For
                    Next p
                    tmpArray(i, 1) = Replace(tmpArray(i, 1), "(", "(")
                    tmpArray(i, 1) = Replace(tmpArray(i, 1), ")", ")")
                    SubClassJapanese(m) = tmpArray(i, 1)
                    StringRoundEnglish = Replace(StringRoundEnglish, "(", "(")
                    StringRoundEnglish = Replace(StringRoundEnglish, ")", ")")
                    SubClass_English(m) = StringRoundEnglish
                    m = m + 1
                End If
            Next i
        Next h
        q = q + 1
    End If
Next tmpSht
Set mySht = Worksheets("Sheet0")
Set myRng = Intersect(mySht.Range("A:H"), mySht.UsedRange)
myAr = myRng
ReDim workArray2(UBound(myAr) - 1, 16)
For i = LBound(workArray2) To UBound(workArray2)
    workArray2(i, 0) = myAr(i + 1, 1)
    workArray2(i, 1) = myAr(i + 1, 2)
    workArray2(i, 2) = myAr(i + 1, 3)
    myAr(i + 1, 4) = Replace(myAr(i + 1, 4), "(", "(")
    myAr(i + 1, 4) = Replace(myAr(i + 1, 4), ")", ")")
    workArray2(i, 6) = myAr(i + 1, 4)
    workArray2(i, 8) = myAr(i + 1, 5)
    workArray2(i, 10) = myAr(i + 1, 6)
    workArray2(i, 12) = myAr(i + 1, 7)
    workArray2(i, 14) = myAr(i + 1, 8)
Next i
Set mySht2 = Worksheets("Result")
Set myRng2 = mySht2.UsedRange
myAr2 = myRng2
For i = LBound(workArray2) To UBound(workArray2)
    For k = LBound(JapaneseClass) To UBound(JapaneseClass)
        If workArray2(i, 2) = JapaneseClass(k) Then
           workArray2(i, 3) = English_Class(k)
        End If
        If workArray2(i, 4) = JapaneseClass(k) Then
           workArray2(i, 5) = English_Class(k)
        End If
        If workArray2(i, 8) = JapaneseClass(k) Then
           workArray2(i, 9) = English_Class(k)
        End If
        If workArray2(i, 12) = JapaneseClass(k) Then
           workArray2(i, 13) = English_Class(k)
        End If
    Next k
    For m = LBound(SubClassJapanese) To UBound(SubClassJapanese)
        If workArray2(i, 6) = SubClassJapanese(m) Then
           workArray2(i, 7) = SubClass_English(m)
        End If
    Next m
    For l = UBound(MidleClassJP) To LBound(MidleClassJP) Step -1
        If workArray2(i, 10) = MidleClassJP(l) Then
           workArray2(i, 11) = MidleClassEN(l)
        End If
    Next l
    For r = LBound(myAr2) To UBound(myAr2)
        If workArray2(i, 0) = myAr2(r, 1) Then
            workArray2(i, 4) = myAr2(r, 5)
            On Error Resume Next
            Select Case True
            Case workArray2(i, 0) >= "10001" And workArray2(i, 0) <= "10278"
                 workArray2(i, 4) = "<魚類>"
            Case workArray2(i, 0) >= "10319" And workArray2(i, 0) <= "10341"
                 workArray2(i, 4) = "<えび・かに類>"
            Case workArray2(i, 0) >= "10342" And workArray2(i, 0) <= "10362"
                 workArray2(i, 4) = "<いか・たこ類>"
            Case workArray2(i, 0) >= "10376" And workArray2(i, 0) <= "10388"
                 workArray2(i, 4) = "<水産練り製品>"
            Case workArray2(i, 0) >= "11205" And workArray2(i, 0) <= "11240"
                 workArray2(i, 4) = "<鳥肉類>"
            Case workArray2(i, 0) >= "11245" And workArray2(i, 0) <= "11246"
                 workArray2(i, 4) = "<獣肉類>"
            Case workArray2(i, 0) >= "11247" And workArray2(i, 0) <= "11247"
                 workArray2(i, 4) = "<鳥肉類>"
            Case workArray2(i, 0) >= "13001" And workArray2(i, 0) <= "13050"
                 workArray2(i, 4) = "<牛乳及び乳製品>"
            Case workArray2(i, 0) >= "15001" And workArray2(i, 0) <= "15040"
                 workArray2(i, 4) = "<和生菓子・和半生菓子類>"
            Case workArray2(i, 0) >= "15041" And workArray2(i, 0) <= "15068"
                 workArray2(i, 4) = "<和干菓子類>"
            Case workArray2(i, 0) >= "15069" And workArray2(i, 0) <= "15072"
                 workArray2(i, 4) = "<菓子パン類>"
            Case workArray2(i, 0) >= "15073" And workArray2(i, 0) <= "15085"
                 workArray2(i, 4) = "<ケーキ・ペストリー類>"
            Case workArray2(i, 0) >= "15086" And workArray2(i, 0) <= "15091"
                 workArray2(i, 4) = "<デザート菓子類>"
            Case workArray2(i, 0) >= "15092" And workArray2(i, 0) <= "15100"
                 workArray2(i, 4) = "<ビスケット類>"
            Case workArray2(i, 0) >= "15101" And workArray2(i, 0) <= "15104"
                 workArray2(i, 4) = "<スナック類>"
            Case workArray2(i, 0) >= "15105" And workArray2(i, 0) <= "15113"
                 workArray2(i, 4) = "<キャンデー類>"
            Case workArray2(i, 0) >= "15114" And workArray2(i, 0) <= "15116"
                 workArray2(i, 4) = "<チョコレート類>"
            Case workArray2(i, 0) >= "15117" And workArray2(i, 0) <= "15117"
                 workArray2(i, 4) = "<果実菓子類>"
            Case workArray2(i, 0) >= "15118" And workArray2(i, 0) <= "15120"
                 workArray2(i, 4) = "<チューインガム類>"
            Case workArray2(i, 0) >= "16001" And workArray2(i, 0) <= "16032"
                 workArray2(i, 4) = "<アルコール飲料類>"
            Case workArray2(i, 0) >= "16033" And workArray2(i, 0) <= "16044"
                 workArray2(i, 4) = "<茶類>"
            Case workArray2(i, 0) >= "16045" And workArray2(i, 0) <= "16049"
                 workArray2(i, 4) = "<コーヒー・ココア類>"
            Case workArray2(i, 0) >= "16050" And workArray2(i, 0) <= "16055"
                 workArray2(i, 4) = "<その他>"
            Case workArray2(i, 0) >= "17001" And workArray2(i, 0) <= "17054"
                 workArray2(i, 4) = "<調味料類>"
            Case workArray2(i, 0) >= "17055" And workArray2(i, 0) <= "17081"
                 workArray2(i, 4) = "<香辛料類>"
            Case workArray2(i, 0) >= "17082" And workArray2(i, 0) <= "17084"
                 workArray2(i, 4) = "<その他>"
            End Select
            On Error GoTo 0
            workArray2(i, 5) = myAr2(r, 6)
            On Error Resume Next
            Select Case True
            Case workArray2(i, 0) >= "10001" And workArray2(i, 0) <= "10278"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10319" And workArray2(i, 0) <= "10341"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10342" And workArray2(i, 0) <= "10362"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10376" And workArray2(i, 0) <= "10388"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11205" And workArray2(i, 0) <= "11240"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11245" And workArray2(i, 0) <= "11246"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11247" And workArray2(i, 0) <= "11247"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "13001" And workArray2(i, 0) <= "13050"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15001" And workArray2(i, 0) <= "15040"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15041" And workArray2(i, 0) <= "15068"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15069" And workArray2(i, 0) <= "15072"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15073" And workArray2(i, 0) <= "15085"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15086" And workArray2(i, 0) <= "15091"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15092" And workArray2(i, 0) <= "15100"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15101" And workArray2(i, 0) <= "15104"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15105" And workArray2(i, 0) <= "15113"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15114" And workArray2(i, 0) <= "15116"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15117" And workArray2(i, 0) <= "15117"
                 workArray2(i, 5) = "<CANDIED FRUITS>"
            Case workArray2(i, 0) >= "15118" And workArray2(i, 0) <= "15120"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16001" And workArray2(i, 0) <= "16032"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16033" And workArray2(i, 0) <= "16044"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16045" And workArray2(i, 0) <= "16049"
                 workArray2(i, 5) = "COFFEES AND COCOAS>"
            Case workArray2(i, 0) >= "16050" And workArray2(i, 0) <= "16055"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17001" And workArray2(i, 0) <= "17054"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17055" And workArray2(i, 0) <= "17081"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17082" And workArray2(i, 0) <= "17084"
                 workArray2(i, 5) = ""
            End Select
            On Error GoTo 0
            If workArray2(i, 6) <> "" And _
               workArray2(i, 7) = "" Then
                workArray2(i, 7) = myAr2(r, 8)
            End If
            If workArray2(i, 8) <> "" And _
               workArray2(i, 9) = "" Then
                If myAr2(r, 10) = "" Then
                    workArray2(i, 9) = myAr2(r, 15)
                Else
                    workArray2(i, 9) = myAr2(r, 10)
                End If
            End If
            If workArray2(i, 12) <> "" And _
               workArray2(i, 13) = "" Then
                workArray2(i, 13) = myAr2(r, 15)
            End If
            If workArray2(i, 14) <> "" Then
                workArray2(i, 15) = myAr2(r, 15)
            End If
            workArray2(i, 16) = myAr2(r, 11)
        End If
        Select Case True
            Case workArray2(i, 0) = "14004a"
                workArray2(i, 9) = "Safflower oil"
            Case workArray2(i, 0) = "14011a"
                workArray2(i, 9) = "Sunflower oil"
            Case workArray2(i, 0) = "14011b"
                workArray2(i, 9) = "Sunflower oil"
        End Select
    Next r
Next i
ReDim workArray3(UBound(workArray2), UBound(workArray2, 2))
For i = LBound(workArray3) To UBound(workArray3)
    workArray3(i, 0) = workArray2(i, 0)
    workArray3(i, 1) = workArray2(i, 1)
    workArray3(i, 2) = workArray2(i, 2)
    workArray3(i, 3) = workArray2(i, 4)
    workArray3(i, 4) = workArray2(i, 6)
    workArray3(i, 5) = workArray2(i, 8)
    workArray3(i, 6) = workArray2(i, 10)
    workArray3(i, 7) = workArray2(i, 12)
    workArray3(i, 8) = workArray2(i, 14)
    workArray3(i, 9) = workArray2(i, 3)
    workArray3(i, 10) = workArray2(i, 5)
    workArray3(i, 11) = workArray2(i, 7)
    workArray3(i, 12) = workArray2(i, 16)
    workArray3(i, 13) = workArray2(i, 9)
    workArray3(i, 14) = workArray2(i, 11)
    workArray3(i, 15) = workArray2(i, 13)
    workArray3(i, 16) = workArray2(i, 15)
Next i
Set mySht = Worksheets.Add
With mySht
    .Name = "M_CATEGORY"
    .Range("A1").Value = "ItemNumber"
    .Range("B1").Value = "FoodGroupNumber"
    .Range("C1").Value = "FoodGroupJP"
    .Range("D1").Value = "SubGroupJP"
    .Range("E1").Value = "SubCategoryJP"
    .Range("F1").Value = "MajorCategoryJP"
    .Range("G1").Value = "MediumCategoryJP"
    .Range("H1").Value = "MinorCategoryJP"
    .Range("I1").Value = "DetailsJP"
    .Range("J1").Value = "FoodGroupEN"
    .Range("K1").Value = "SubGroupEN"
    .Range("L1").Value = "SubCategoryEN"
    .Range("M1").Value = "AcademicName"
    .Range("N1").Value = "MajorCategoryEN"
    .Range("O1").Value = "MediumCategoryEN"
    .Range("P1").Value = "MinorCategoryEN"
    .Range("Q1").Value = "DetailsEN"
    .Range("A2:Q1892") = workArray3
End With
Set tmpSht = Nothing
Set tmpRng = Nothing
Set tmpArray = Nothing
Set workArray = Nothing
Set RegExp_Japanese = Nothing
Set RegExp_English = Nothing
Set RegExp_ItemNum = Nothing
Set RegExp_Square_Start = Nothing
Set RegExp_SquareExitEN = Nothing
Set RegExp_RoundStartJP = Nothing
Set RegExp_RoundStartEN = Nothing
Set RegExp_RoundExitEN = Nothing
Erase Item_Number()
Erase JapaneseItem()
Erase EnglishItem()
Erase JapaneseClass()
Erase English_Class()
Erase ItemNumArray()
Erase ItemENGArray()
Erase ClassArrayJP()
Erase ClassArrayEN()
Erase SubClassJapanese()
Erase SubClass_English()
Erase MidleClassJP()
Erase MidleClassEN()
Erase SubClass_JPN()
Erase SubClass_ENG()
Erase workArray2()
Erase workArray3()
Set mySht = Nothing
Set myRng = Nothing
Set myAr = Nothing
Set mySht2 = Nothing
Set myRng2 = Nothing
Set myAr2 = Nothing
End Sub

Function NoCancelArray(ByRef Sh As Variant) As Variant
Dim mySht           As Variant
Dim myRng           As Range
Dim tmpAr           As Variant
Dim i               As Long
Dim j               As Long
Dim RegExpCancel    As Object
Dim RegExp_Exit     As Object
Const StrCancel     As String = "^(1\)|residues)$"
Dim CancelItem()    As String
Dim CancelRow1()    As String
Dim CancelRow2()    As String
Dim myCancelAr()    As String
Dim Cancel_Array()  As String
    Set RegExpCancel = CreateObject("VBScript.RegExp")
    With RegExpCancel
        .Pattern = StrCancel
        .IgnoreCase = True
        .Global = True
    End With
tmpAr = Sh
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If RegExpCancel.Test(tmpAr(i, 1)) Then
        ReDim Preserve CancelItem(j)
        ReDim Preserve CancelRow1(i)
        CancelItem(j) = tmpAr(i, 1)
        CancelRow1(j) = i
        j = j + 1
    End If
Next i
ReDim myCancelAr(UBound(CancelItem), 1)
For j = LBound(myCancelAr) To UBound(myCancelAr)
    myCancelAr(j, 0) = CancelItem(j)
    myCancelAr(j, 1) = CancelRow1(j)
Next j
ReDim Preserve myCancelAr(UBound(myCancelAr), 2)
j = 0
For i = LBound(myCancelAr) To UBound(myCancelAr) - 1
    If myCancelAr(i, 0) = "1)" Then
        If UBound(myCancelAr) >= 2 Then
            If myCancelAr(i + 2, 0) = "residues" Then
                myCancelAr(i, 2) = myCancelAr(i + 2, 1)
            Else
                myCancelAr(i, 2) = myCancelAr(i + 1, 1)
            End If
        Else
            myCancelAr(i, 2) = myCancelAr(i + 1, 1)
        End If
        j = j + 1
    End If
Next i
Erase CancelRow1
j = 0
ReDim CancelRow1(j)
ReDim CancelRow2(j)
CancelRow1(j) = myCancelAr(j, 1)
CancelRow2(j) = myCancelAr(j, 2)
For i = LBound(myCancelAr) + 1 To UBound(myCancelAr)
    If myCancelAr(i, 0) = "1)" And _
       myCancelAr(i - 1, 0) <> "1)" Then
        j = j + 1
        ReDim Preserve CancelRow1(j)
        ReDim Preserve CancelRow2(j)
        CancelRow1(j) = myCancelAr(i, 1)
        CancelRow2(j) = myCancelAr(i, 2)
    End If
Next i
ReDim Cancel_Array(UBound(CancelRow1), 1)
j = 0
For j = LBound(Cancel_Array) To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow1(j)
    Cancel_Array(j, 1) = CancelRow2(j)
Next j
j = 0
Cancel_Array(j, 0) = 1
Cancel_Array(j, 1) = CancelRow1(j)
For j = LBound(Cancel_Array) + 1 To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow2(j - 1) + 1
    Cancel_Array(j, 1) = CancelRow1(j) - 1
Next j
NoCancelArray = Cancel_Array
End Function

I have counted number of modified cells. It was more than 2400. I could not write complete code without manual processing. It is the responsibility of the Ministry of Education, Culture, Sports, Science & Technology in Japan (MEXT).

References:
CSV file of the ‘Standard Tables of Food Composition in Japan 2010′
Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 1

日本食品標準成分表2010の食品番号をカテゴリー分類する その2

日本食品標準成分表2010』のPDFを.txtファイルに変換するの記事を参考に,ファイル名 “1299012_1.pdf” から “1299012_18.pdf” までのファイルをダウンロードします.PDF1ファイルの全テキストをコピーしてワークシート1枚に貼り付けのオプションでペーストします.テキストファイルウィザード1/3では元のデータ形式で『カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ』を選択します.テキストファイルウィザード2/3では特に変更なく次へ進みます.テキストファイルウィザード3/3では最初のカラムの列のデータ形式のみ『文字列』に変更して完了をクリックします.この作業をPDFファイル分繰り返します.主にA列に対して若干の修正を施します.さらに Webテク実験室 からダウンロードしたブック “成分表2010.xls” のワークシートをコピーし,シート名を “Sheet0” に変更します.このEXCELのブックに “Category.xlsm” と名前を付けて保存します.

日本食品標準成分表2010の食品番号をカテゴリー分類する その1で作成した ”Sample.xlsm” ブックから ”Result” シートを “Category.xlsm” ブックに移動又はコピーします.AltキーとF11キーを押下してVBEを起動します.標準モジュールを挿入し,下記コードを貼り付けて実行して下さい.結果として “M_CATEGORY” という名のシートが生成します.

Option Explicit
Sub Select_Class()
Dim tmpSht              As Worksheet
Dim tmpRng              As Range
Dim tmpArray            As Variant
Dim workArray           As Variant
Dim h                   As Long
Dim i                   As Long
Dim j                   As Long
Dim k                   As Long
Dim l                   As Long
Dim m                   As Long
Dim n                   As Long
Dim p                   As Long
Dim q                   As Long
Dim r                   As Long
Dim RegExp_Japanese     As Object
Dim RegExp_English      As Object
Dim RegExp_ItemNum      As Object
Const PtnJPN            As String = "[^A-Za-z0-9'\.\-\*]{2,}"
Const PtnENG            As String = "^[A-Za-z0-9'\,\.\-\%]+$"
Const PtnItemNum        As String = "^[0-9]{5}$"
Dim Item_Number()       As String
Dim JapaneseItem()      As String
Dim EnglishItem()       As String
Dim EnglishString       As String
Dim JapaneseClass()     As String
Dim English_Class()     As String
Dim ClassStringEN       As String
Dim ItemNumArray()      As String
Dim ItemENGArray()      As String
Dim ClassArrayJP()      As String
Dim ClassArrayEN()      As String
Dim RegExp_AngleBracket As Object
Dim RegExp_RoundStartJP As Object
Dim RegExp_RoundStartEN As Object
Dim RegExp_RoundExitEN  As Object
Const Ptn_Round_Start   As String = "^(\(|()"
Const Ptn_Round_Exit    As String = "(\)|))$"
Dim StringRoundEnglish  As String
Dim SubClassJapanese()  As String
Dim SubClass_English()  As String
Dim RegExp_Square_Start As Object
Dim RegExp_SquareExitEN As Object
Const Ptn_Angle_Start   As String = "^[<<]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_Exit   As String = "\]$"
Dim MidleClassJP()      As String
Dim MidleClassEN()      As String
Dim StrMidClassENG      As String
Dim SubClass_JPN()      As String
Dim SubClass_ENG()      As String
Dim mySht               As Worksheet
Dim myRng               As Range
Dim myAr                As Variant
Dim workArray2()        As String
Dim workArray3()        As String
Dim mySht2              As Worksheet
Dim myRng2              As Range
Dim myAr2               As Variant
Dim CEREALS             As Long
Dim POTATOES            As Long
Dim SUGARS              As Long
Dim PULSES              As Long
Dim NUTS                As Long
Dim VEGETABLES          As Long
Dim FRUITS              As Long
Dim MUSHROOMS           As Long
Dim ALGAE               As Long
Dim FISHES              As Long
Dim MEATS               As Long
Dim EGGS                As Long
Dim MILK                As Long
Dim OIL                 As Long
Dim CONFECTIONERIES     As Long
Dim BEVERAGES           As Long
Dim SEASONINGS          As Long
Dim PREPARED            As Long
    Set RegExp_Japanese = CreateObject("VBScript.RegExp")
    With RegExp_Japanese
        .Pattern = PtnJPN
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_English = CreateObject("VBScript.RegExp")
    With RegExp_English
        .Pattern = PtnENG
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_ItemNum = CreateObject("VBScript.RegExp")
    With RegExp_ItemNum
        .Pattern = PtnItemNum
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_Square_Start = CreateObject("VBScript.RegExp")
    With RegExp_Square_Start
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_SquareExitEN = CreateObject("VBScript.RegExp")
    With RegExp_SquareExitEN
        .Pattern = "[A-Za-z0-9'\,\.\-\%]+" & Ptn_Square_Exit
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_RoundStartJP = CreateObject("VBScript.RegExp")
    With RegExp_RoundStartJP
        .Pattern = Ptn_Round_Start & "[^A-Za-z0-9'\.\-\*]{2,}"
        .IgnoreCase = True
        .Global = True
    End With
    Set RegExp_RoundStartEN = CreateObject("VBScript.RegExp")
    With RegExp_RoundStartEN
        .Pattern = Ptn_Round_Start & "[A-Za-z'\,\.\-\%]+"
    End With
    Set RegExp_RoundExitEN = CreateObject("VBScript.RegExp")
    With RegExp_RoundExitEN
        .Pattern = "[A-Za-z0-9'\,\.\-\%]+" & Ptn_Round_Exit
        .IgnoreCase = True
        .Global = True
    End With
j = 0
k = 0
l = 0
m = 0
q = 0
For Each tmpSht In Worksheets
    If tmpSht.Name = "M_CATEGORY" Then
        MsgBox prompt:="M_CATEGORYと同名のシートがあります." & vbCrLf & _
                        "処理を終了します", _
              Buttons:=vbOKOnly, _
                Title:="内部エラー"
        Exit Sub
    End If
    If tmpSht.Name <> "Sheet0" And _
       tmpSht.Name <> "Sheet00" And _
       tmpSht.Name <> "Result" Then
        Set tmpRng = tmpSht.UsedRange
        tmpArray = tmpRng
        workArray = NoCancelArray(tmpArray)
        For h = LBound(workArray) To UBound(workArray)
            For i = workArray(h, 0) To workArray(h, 1)
                On Error Resume Next
                If RegExp_ItemNum.Test(tmpArray(i, 1)) And _
                   tmpArray(i, 2) <> "(欠番)" Then
                    EnglishString = ""
                    ReDim Preserve Item_Number(j)
                    ReDim Preserve JapaneseItem(j)
                    ReDim Preserve EnglishItem(j)
                    For p = 1 To 6
                        If RegExp_English.Test(tmpArray(i + 1, p)) Then
                            EnglishString = EnglishString & " " & tmpArray(i + 1, p)
                            EnglishString = Trim(EnglishString)
                        Else
                            Exit For
                        End If
                    Next p
                    Item_Number(j) = tmpArray(i, 1)
                    JapaneseItem(j) = tmpArray(i, 2)
                    EnglishItem(j) = EnglishString
                    j = j + 1
                End If
                On Error GoTo 0
                If RegExp_Japanese.Test(tmpArray(i, 1)) And _
                   RegExp_English.Test(tmpArray(i + 1, 1)) Then
                    ClassStringEN = ""
                    ReDim Preserve JapaneseClass(k)
                    ReDim Preserve English_Class(k)
                    For p = 1 To 6
                        If RegExp_English.Test(tmpArray(i + 1, p)) Then
                            ClassStringEN = ClassStringEN & " " & tmpArray(i + 1, p)
                            ClassStringEN = Trim(ClassStringEN)
                        Else
                            Exit For
                        End If
                    Next p
                    JapaneseClass(k) = tmpArray(i, 1)
                    English_Class(k) = ClassStringEN
                    k = k + 1
                End If
                If RegExp_Square_Start.Test(tmpArray(i, 1)) And _
                   RegExp_Square_Start.Test(tmpArray(i + 1, 1)) Then
                    StrMidClassENG = ""
                    ReDim Preserve MidleClassJP(l)
                    ReDim Preserve MidleClassEN(l)
                    For p = 1 To 6
                        StrMidClassENG = StrMidClassENG + " " + tmpArray(i + 1, p)
                        StrMidClassENG = Trim(StrMidClassENG)
                        If RegExp_SquareExitEN.Test(tmpArray(i + 1, p)) Then Exit For
                    Next p
                    MidleClassJP(l) = tmpArray(i, 1)
                    MidleClassEN(l) = StrMidClassENG
                    l = l + 1
                End If
                If RegExp_RoundStartJP.Test(tmpArray(i, 1)) And _
                   RegExp_RoundStartEN.Test(tmpArray(i + 1, 1)) Then
                    StringRoundEnglish = ""
                    ReDim Preserve SubClassJapanese(m)
                    ReDim Preserve SubClass_English(m)
                    For p = 1 To 6
                        StringRoundEnglish = StringRoundEnglish & " " & tmpArray(i + 1, p)
                        StringRoundEnglish = Trim(StringRoundEnglish)
                        If RegExp_RoundExitEN.Test(tmpArray(i + 1, p)) Then Exit For
                    Next p
                    tmpArray(i, 1) = Replace(tmpArray(i, 1), "(", "(")
                    tmpArray(i, 1) = Replace(tmpArray(i, 1), ")", ")")
                    SubClassJapanese(m) = tmpArray(i, 1)
                    StringRoundEnglish = Replace(StringRoundEnglish, "(", "(")
                    StringRoundEnglish = Replace(StringRoundEnglish, ")", ")")
                    SubClass_English(m) = StringRoundEnglish
                    m = m + 1
                End If
            Next i
        Next h
        q = q + 1
    End If
Next tmpSht
Set mySht = Worksheets("Sheet0")
Set myRng = Intersect(mySht.Range("A:H"), mySht.UsedRange)
myAr = myRng
ReDim workArray2(UBound(myAr) - 1, 16)
For i = LBound(workArray2) To UBound(workArray2)
    workArray2(i, 0) = myAr(i + 1, 1)
    workArray2(i, 1) = myAr(i + 1, 2)
    workArray2(i, 2) = myAr(i + 1, 3)
    myAr(i + 1, 4) = Replace(myAr(i + 1, 4), "(", "(")
    myAr(i + 1, 4) = Replace(myAr(i + 1, 4), ")", ")")
    workArray2(i, 6) = myAr(i + 1, 4)
    workArray2(i, 8) = myAr(i + 1, 5)
    workArray2(i, 10) = myAr(i + 1, 6)
    workArray2(i, 12) = myAr(i + 1, 7)
    workArray2(i, 14) = myAr(i + 1, 8)
Next i
Set mySht2 = Worksheets("Result")
Set myRng2 = mySht2.UsedRange
myAr2 = myRng2
For i = LBound(workArray2) To UBound(workArray2)
    For k = LBound(JapaneseClass) To UBound(JapaneseClass)
        If workArray2(i, 2) = JapaneseClass(k) Then
           workArray2(i, 3) = English_Class(k)
        End If
        If workArray2(i, 4) = JapaneseClass(k) Then
           workArray2(i, 5) = English_Class(k)
        End If
        If workArray2(i, 8) = JapaneseClass(k) Then
           workArray2(i, 9) = English_Class(k)
        End If
        If workArray2(i, 12) = JapaneseClass(k) Then
           workArray2(i, 13) = English_Class(k)
        End If
    Next k
    For m = LBound(SubClassJapanese) To UBound(SubClassJapanese)
        If workArray2(i, 6) = SubClassJapanese(m) Then
           workArray2(i, 7) = SubClass_English(m)
        End If
    Next m
    For l = UBound(MidleClassJP) To LBound(MidleClassJP) Step -1
        If workArray2(i, 10) = MidleClassJP(l) Then
           workArray2(i, 11) = MidleClassEN(l)
        End If
    Next l
    For r = LBound(myAr2) To UBound(myAr2)
        If workArray2(i, 0) = myAr2(r, 1) Then
            workArray2(i, 4) = myAr2(r, 5)
            On Error Resume Next
            Select Case True
            Case workArray2(i, 0) >= "10001" And workArray2(i, 0) <= "10278"
                 workArray2(i, 4) = "<魚類>"
            Case workArray2(i, 0) >= "10319" And workArray2(i, 0) <= "10341"
                 workArray2(i, 4) = "<えび・かに類>"
            Case workArray2(i, 0) >= "10342" And workArray2(i, 0) <= "10362"
                 workArray2(i, 4) = "<いか・たこ類>"
            Case workArray2(i, 0) >= "10376" And workArray2(i, 0) <= "10388"
                 workArray2(i, 4) = "<水産練り製品>"
            Case workArray2(i, 0) >= "11205" And workArray2(i, 0) <= "11240"
                 workArray2(i, 4) = "<鳥肉類>"
            Case workArray2(i, 0) >= "11245" And workArray2(i, 0) <= "11246"
                 workArray2(i, 4) = "<獣肉類>"
            Case workArray2(i, 0) >= "11247" And workArray2(i, 0) <= "11247"
                 workArray2(i, 4) = "<鳥肉類>"
            Case workArray2(i, 0) >= "13001" And workArray2(i, 0) <= "13050"
                 workArray2(i, 4) = "<牛乳及び乳製品>"
            Case workArray2(i, 0) >= "15001" And workArray2(i, 0) <= "15040"
                 workArray2(i, 4) = "<和生菓子・和半生菓子類>"
            Case workArray2(i, 0) >= "15041" And workArray2(i, 0) <= "15068"
                 workArray2(i, 4) = "<和干菓子類>"
            Case workArray2(i, 0) >= "15069" And workArray2(i, 0) <= "15072"
                 workArray2(i, 4) = "<菓子パン類>"
            Case workArray2(i, 0) >= "15073" And workArray2(i, 0) <= "15085"
                 workArray2(i, 4) = "<ケーキ・ペストリー類>"
            Case workArray2(i, 0) >= "15086" And workArray2(i, 0) <= "15091"
                 workArray2(i, 4) = "<デザート菓子類>"
            Case workArray2(i, 0) >= "15092" And workArray2(i, 0) <= "15100"
                 workArray2(i, 4) = "<ビスケット類>"
            Case workArray2(i, 0) >= "15101" And workArray2(i, 0) <= "15104"
                 workArray2(i, 4) = "<スナック類>"
            Case workArray2(i, 0) >= "15105" And workArray2(i, 0) <= "15113"
                 workArray2(i, 4) = "<キャンデー類>"
            Case workArray2(i, 0) >= "15114" And workArray2(i, 0) <= "15116"
                 workArray2(i, 4) = "<チョコレート類>"
            Case workArray2(i, 0) >= "15117" And workArray2(i, 0) <= "15117"
                 workArray2(i, 4) = "<果実菓子類>"
            Case workArray2(i, 0) >= "15118" And workArray2(i, 0) <= "15120"
                 workArray2(i, 4) = "<チューインガム類>"
            Case workArray2(i, 0) >= "16001" And workArray2(i, 0) <= "16032"
                 workArray2(i, 4) = "<アルコール飲料類>"
            Case workArray2(i, 0) >= "16033" And workArray2(i, 0) <= "16044"
                 workArray2(i, 4) = "<茶類>"
            Case workArray2(i, 0) >= "16045" And workArray2(i, 0) <= "16049"
                 workArray2(i, 4) = "<コーヒー・ココア類>"
            Case workArray2(i, 0) >= "16050" And workArray2(i, 0) <= "16055"
                 workArray2(i, 4) = "<その他>"
            Case workArray2(i, 0) >= "17001" And workArray2(i, 0) <= "17054"
                 workArray2(i, 4) = "<調味料類>"
            Case workArray2(i, 0) >= "17055" And workArray2(i, 0) <= "17081"
                 workArray2(i, 4) = "<香辛料類>"
            Case workArray2(i, 0) >= "17082" And workArray2(i, 0) <= "17084"
                 workArray2(i, 4) = "<その他>"
            End Select
            On Error GoTo 0
            workArray2(i, 5) = myAr2(r, 6)
            On Error Resume Next
            Select Case True
            Case workArray2(i, 0) >= "10001" And workArray2(i, 0) <= "10278"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10319" And workArray2(i, 0) <= "10341"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10342" And workArray2(i, 0) <= "10362"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "10376" And workArray2(i, 0) <= "10388"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11205" And workArray2(i, 0) <= "11240"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11245" And workArray2(i, 0) <= "11246"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "11247" And workArray2(i, 0) <= "11247"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "13001" And workArray2(i, 0) <= "13050"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15001" And workArray2(i, 0) <= "15040"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15041" And workArray2(i, 0) <= "15068"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15069" And workArray2(i, 0) <= "15072"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15073" And workArray2(i, 0) <= "15085"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15086" And workArray2(i, 0) <= "15091"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15092" And workArray2(i, 0) <= "15100"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15101" And workArray2(i, 0) <= "15104"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15105" And workArray2(i, 0) <= "15113"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15114" And workArray2(i, 0) <= "15116"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "15117" And workArray2(i, 0) <= "15117"
                 workArray2(i, 5) = "<CANDIED FRUITS>"
            Case workArray2(i, 0) >= "15118" And workArray2(i, 0) <= "15120"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16001" And workArray2(i, 0) <= "16032"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16033" And workArray2(i, 0) <= "16044"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "16045" And workArray2(i, 0) <= "16049"
                 workArray2(i, 5) = "COFFEES AND COCOAS>"
            Case workArray2(i, 0) >= "16050" And workArray2(i, 0) <= "16055"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17001" And workArray2(i, 0) <= "17054"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17055" And workArray2(i, 0) <= "17081"
                 workArray2(i, 5) = ""
            Case workArray2(i, 0) >= "17082" And workArray2(i, 0) <= "17084"
                 workArray2(i, 5) = ""
            End Select
            On Error GoTo 0
            If workArray2(i, 6) <> "" And _
               workArray2(i, 7) = "" Then
                workArray2(i, 7) = myAr2(r, 8)
            End If
            If workArray2(i, 8) <> "" And _
               workArray2(i, 9) = "" Then
                If myAr2(r, 10) = "" Then
                    workArray2(i, 9) = myAr2(r, 15)
                Else
                    workArray2(i, 9) = myAr2(r, 10)
                End If
            End If
            If workArray2(i, 12) <> "" And _
               workArray2(i, 13) = "" Then
                workArray2(i, 13) = myAr2(r, 15)
            End If
            If workArray2(i, 14) <> "" Then
                workArray2(i, 15) = myAr2(r, 15)
            End If
            workArray2(i, 16) = myAr2(r, 11)
        End If
        Select Case True
            Case workArray2(i, 0) = "14004a"
                workArray2(i, 9) = "Safflower oil"
            Case workArray2(i, 0) = "14011a"
                workArray2(i, 9) = "Sunflower oil"
            Case workArray2(i, 0) = "14011b"
                workArray2(i, 9) = "Sunflower oil"
        End Select
    Next r
Next i
ReDim workArray3(UBound(workArray2), UBound(workArray2, 2))
For i = LBound(workArray3) To UBound(workArray3)
    workArray3(i, 0) = workArray2(i, 0)
    workArray3(i, 1) = workArray2(i, 1)
    workArray3(i, 2) = workArray2(i, 2)
    workArray3(i, 3) = workArray2(i, 4)
    workArray3(i, 4) = workArray2(i, 6)
    workArray3(i, 5) = workArray2(i, 8)
    workArray3(i, 6) = workArray2(i, 10)
    workArray3(i, 7) = workArray2(i, 12)
    workArray3(i, 8) = workArray2(i, 14)
    workArray3(i, 9) = workArray2(i, 3)
    workArray3(i, 10) = workArray2(i, 5)
    workArray3(i, 11) = workArray2(i, 7)
    workArray3(i, 12) = workArray2(i, 16)
    workArray3(i, 13) = workArray2(i, 9)
    workArray3(i, 14) = workArray2(i, 11)
    workArray3(i, 15) = workArray2(i, 13)
    workArray3(i, 16) = workArray2(i, 15)
Next i
Set mySht = Worksheets.Add
With mySht
    .Name = "M_CATEGORY"
    .Range("A1").Value = "ItemNumber"
    .Range("B1").Value = "FoodGroupNumber"
    .Range("C1").Value = "FoodGroupJP"
    .Range("D1").Value = "SubGroupJP"
    .Range("E1").Value = "SubCategoryJP"
    .Range("F1").Value = "MajorCategoryJP"
    .Range("G1").Value = "MediumCategoryJP"
    .Range("H1").Value = "MinorCategoryJP"
    .Range("I1").Value = "DetailsJP"
    .Range("J1").Value = "FoodGroupEN"
    .Range("K1").Value = "SubGroupEN"
    .Range("L1").Value = "SubCategoryEN"
    .Range("M1").Value = "AcademicName"
    .Range("N1").Value = "MajorCategoryEN"
    .Range("O1").Value = "MediumCategoryEN"
    .Range("P1").Value = "MinorCategoryEN"
    .Range("Q1").Value = "DetailsEN"
    .Range("A2:Q1892") = workArray3
End With
Set tmpSht = Nothing
Set tmpRng = Nothing
Set tmpArray = Nothing
Set workArray = Nothing
Set RegExp_Japanese = Nothing
Set RegExp_English = Nothing
Set RegExp_ItemNum = Nothing
Set RegExp_Square_Start = Nothing
Set RegExp_SquareExitEN = Nothing
Set RegExp_RoundStartJP = Nothing
Set RegExp_RoundStartEN = Nothing
Set RegExp_RoundExitEN = Nothing
Erase Item_Number()
Erase JapaneseItem()
Erase EnglishItem()
Erase JapaneseClass()
Erase English_Class()
Erase ItemNumArray()
Erase ItemENGArray()
Erase ClassArrayJP()
Erase ClassArrayEN()
Erase SubClassJapanese()
Erase SubClass_English()
Erase MidleClassJP()
Erase MidleClassEN()
Erase SubClass_JPN()
Erase SubClass_ENG()
Erase workArray2()
Erase workArray3()
Set mySht = Nothing
Set myRng = Nothing
Set myAr = Nothing
Set mySht2 = Nothing
Set myRng2 = Nothing
Set myAr2 = Nothing
End Sub

Function NoCancelArray(ByRef Sh As Variant) As Variant
Dim mySht           As Variant
Dim myRng           As Range
Dim tmpAr           As Variant
Dim i               As Long
Dim j               As Long
Dim RegExpCancel    As Object
Dim RegExp_Exit     As Object
Const StrCancel     As String = "^(1\)|residues)$"
Dim CancelItem()    As String
Dim CancelRow1()    As String
Dim CancelRow2()    As String
Dim myCancelAr()    As String
Dim Cancel_Array()  As String
    Set RegExpCancel = CreateObject("VBScript.RegExp")
    With RegExpCancel
        .Pattern = StrCancel
        .IgnoreCase = True
        .Global = True
    End With
tmpAr = Sh
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If RegExpCancel.Test(tmpAr(i, 1)) Then
        ReDim Preserve CancelItem(j)
        ReDim Preserve CancelRow1(i)
        CancelItem(j) = tmpAr(i, 1)
        CancelRow1(j) = i
        j = j + 1
    End If
Next i
ReDim myCancelAr(UBound(CancelItem), 1)
For j = LBound(myCancelAr) To UBound(myCancelAr)
    myCancelAr(j, 0) = CancelItem(j)
    myCancelAr(j, 1) = CancelRow1(j)
Next j
ReDim Preserve myCancelAr(UBound(myCancelAr), 2)
j = 0
For i = LBound(myCancelAr) To UBound(myCancelAr) - 1
    If myCancelAr(i, 0) = "1)" Then
        If UBound(myCancelAr) >= 2 Then
            If myCancelAr(i + 2, 0) = "residues" Then
                myCancelAr(i, 2) = myCancelAr(i + 2, 1)
            Else
                myCancelAr(i, 2) = myCancelAr(i + 1, 1)
            End If
        Else
            myCancelAr(i, 2) = myCancelAr(i + 1, 1)
        End If
        j = j + 1
    End If
Next i
Erase CancelRow1
j = 0
ReDim CancelRow1(j)
ReDim CancelRow2(j)
CancelRow1(j) = myCancelAr(j, 1)
CancelRow2(j) = myCancelAr(j, 2)
For i = LBound(myCancelAr) + 1 To UBound(myCancelAr)
    If myCancelAr(i, 0) = "1)" And _
       myCancelAr(i - 1, 0) <> "1)" Then
        j = j + 1
        ReDim Preserve CancelRow1(j)
        ReDim Preserve CancelRow2(j)
        CancelRow1(j) = myCancelAr(i, 1)
        CancelRow2(j) = myCancelAr(i, 2)
    End If
Next i
ReDim Cancel_Array(UBound(CancelRow1), 1)
j = 0
For j = LBound(Cancel_Array) To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow1(j)
    Cancel_Array(j, 1) = CancelRow2(j)
Next j
j = 0
Cancel_Array(j, 0) = 1
Cancel_Array(j, 1) = CancelRow1(j)
For j = LBound(Cancel_Array) + 1 To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow2(j - 1) + 1
    Cancel_Array(j, 1) = CancelRow1(j) - 1
Next j
NoCancelArray = Cancel_Array
End Function

参照:
日本食品標準成分表2010の食品番号をカテゴリー分類する その1
日本食品標準成分表2010のcsvファイル

Effects of a Mediterranean-Style Diet on Cardiovascular Risk Factors

I have read an article which describes about effect of Mediterranean diet on cardiovascular risk factors. In Mediterranean countries, epidemiological evidence has been shown to low rate of cardiovascular death. It is derived from original diet pattern that people eat olive oil, nuts, vegetables, beans, fishes and red wine and don’t eat red meat, daily products and sweets so much. In this article, authors said that Mediterranean diets supplemented with olive oil or nuts have beneficial effects on such cardiovascular risks as plasma glucose, blood pressure, body weight, lipid profile and inflammatory marker factors compared with a low-fat diet. Although the authors had shown the epidemiological evidence, the discussion lacks the reason why only olive oil has beneficial effect on CRP but nuts doesn’t have.

Effects of a Mediterranean-Style Diet on Cardiovascular Risk Factors

Ramon Estruch, MD, PhD; Miguel A´ngel Marti´nez-Gonza´lez, MD, PhD; Dolores Corella, PhD; Jordi Salas-Salvado´, MD, PhD; Valentina Ruiz-Gutie´rrez, PhD; Mari´a Isabel Covas, PhD; Miguel Fiol, MD, PhD; Enrique Go´mez-Gracia, MD, PhD; Mari Carmen Lo´pez-Sabater, PhD; Ernest Vinyoles, MD, PhD; Fernando Aro´s, MD, PhD; Manuel Conde, MD, PhD; Carlos Lahoz, MD, PhD; Jose´ Lapetra, MD, PhD; Guillermo Sa´ez, MD, PhD; and Emilio Ros, MD, PhD, for the PREDIMED Study Investigators

Background: The Mediterranean diet has been shown to have beneficial effects on cardiovascular risk factors.

Objective: To compare the short-term effects of 2 Mediterranean diets versus those of a low-fat diet on intermediate markers of cardiovascular risk.

Design: Substudy of a multicenter, randomized, primary prevention trial of cardiovascular disease (Prevencio´n con Dieta Mediterra´nea [PREDIMED] Study).

Setting: Primary care centers affiliated with 10 teaching hospitals.

Participants: 772 asymptomatic persons 55 to 80 years of age at high cardiovascular risk who were recruited from October 2003 to March 2004.

Interventions: Participants were assigned to a low-fat diet (n = 257) or to 1 of 2 Mediterranean diets. Those allocated to Mediterranean diets received nutritional education and either free virgin olive oil, 1 liter per week (n = 257), or free nuts, 30 g/d (n = 258). The authors evaluated outcome changes at 3 months.

Measurements: Body weight, blood pressure, lipid profile, glucose levels, and inflammatory molecules.

Results: The completion rate was 99.6%. Compared with the low-fat diet, the 2 Mediterranean diets produced beneficial changes in most outcomes. Compared with the low-fat diet, the mean changes in the Mediterranean diet with olive oil group and the Mediterranean diet with nuts group were – 0.39 mmol/L (95% CI, – 0.70 to – 0.07 mmol/L) and – 0.30 mmol/L (CI, – 0.58 to – 0.01 mmol/L), respectively, for plasma glucose levels; – 5.9 mm Hg (CI, – 8.7 to – 3.1 mm Hg) and – 7.1 mm Hg (CI, – 10.0 to – 4.1 mm Hg), respectively, for systolic blood pressure; and – 0.38 (CI, – 0.55 to – 0.22) and – 0.26 (CI, – 0.42 to – 0.10), respectively, for the cholesterol–high-density lipoprotein cholesterol ratio. The Mediterranean diet with olive oil reduced C-reactive protein levels by 0.54 mg/L (CI, 1.04 to 0.03 mg/L) compared with the low-fat diet.

Limitations: This short-term study did not focus on clinical outcomes. Nutritional education about low-fat diet was less intense than education about Mediterranean diets.

Conclusion: Compared with a low-fat diet, Mediterranean diets supplemented with olive oil or nuts have beneficial effects on cardiovascular risk factors.

Ann Intern Med. 2006; 145: 1-11.

心血管危険因子における地中海料理の効果

 最近読んだ論文の和訳です.地中海沿岸諸国においては心血管疾病の罹患率が低いことが知られています.その理由は独特の食材パターンに由来し,オリーブオイルやナッツ類,野菜類,果実類,豆類,魚類,赤ワインなどを豊富に使用し,肉類や乳製品類,菓子類などの消費が少ないことが理由ではないかと言われています.この論文ではオリーブオイルとナッツ類を補充したら,単に脂肪を制限した群よりも心血管危険因子である血糖値,血圧,体重,脂質組成,炎症性マーカーなどが低下した,と報告しています.ですが惜しいことに,オリーブオイル群では CRP が低下したのにナッツ群ではなぜ低下していないのか,その理由については考察していません.

 考察の丸括弧で囲った数字は参考文献の番号です.日本語訳の瑕疵の責任は私にあります.



心血管危険因子における地中海料理の効果

Ramon Estruch, MD, PhD; Miguel A´ngel Marti´nez-Gonza´lez, MD, PhD; Dolores Corella, PhD; Jordi Salas-Salvado´, MD, PhD; Valentina Ruiz-Gutie´rrez, PhD; Mari´a Isabel Covas, PhD; Miguel Fiol, MD, PhD; Enrique Go´mez-Gracia, MD, PhD; Mari Carmen Lo´pez-Sabater, PhD; Ernest Vinyoles, MD, PhD; Fernando Aro´s, MD, PhD; Manuel Conde, MD, PhD; Carlos Lahoz, MD, PhD; Jose´ Lapetra, MD, PhD; Guillermo Sa´ez, MD, PhD; and Emilio Ros, MD, PhD, for the PREDIMED Study Investigators

背景

地中海料理は心血管危険因子において有益な効果をもたらすことが示されている.

目的

心血管危険因子の中間マーカーで2種類の地中海料理の効果と低脂肪食の効果とを比較した.

設計

多施設共同で無作為化した心血管疾病一次予防試験のサブ研究.

設定

10 の教育病院と提携したプライマリーケアセンター.

参加者

772 名の無症候で 55 歳から 80 歳までの心血管危険の高リスク患者.2003 年 10 月から 2004 年 3 月まで.

介入

参加者は低脂肪食群 (n=257) または2種類の地中海料理のうちの1群に割り付けられた.地中海料理群は栄養教育を受け,それぞれ無料で1週間に1Lずつのバージンオリーブオイル (n=257) か,1日30gのナッツ (n=258) を受け取った.著者らは3ヶ月後に転帰の変化を評価した.

測定項目

体重,血圧,脂質組成,血糖値,炎症分子.

結果

完遂率は 99.6% だった.低脂肪食群と比較して地中海料理2群では大部分の項目で有益な変化が得られた.低脂肪食群と比較して地中海料理群の血糖値平均はオリーブオイル群とナッツ群でそれぞれ -0.39 mmol/L (95% CI, – 0.70 to – 0.07 mmol/L), – 0.30 mmpl/L (CI, – 0.58 to – 0.01 mmol/L)であった.収縮期圧平均はそれぞれ – 5.9 mmHg (CI, – 8.7 to – 3.1 mmHg), – 7.1 mmHg (CI, – 10.0 to – 4.1 mmHg)であった.コレステロール・HDLコレステロール比はそれぞれ – 0.38 (CI, – 0.55 to – 0.22), – 0.26 (CI, – 0.42 to – 0.10) であった.オリーブオイル群の地中海料理群では低脂肪食群と比較して CRP 値が 0.54 mg/L (CI, 1.04 to 0.03 mg/L) 減少した.

限界

この短期間の研究では臨床的転帰には焦点を当てていない.低脂肪食に対する栄養教育は地中海料理の教育よりも強くない.

結論

低脂肪食に比較してオリーブオイルやナッツを添加した地中海料理は心血管危険因子に対して有益な効果をもたらした.

Ann Intern Med. 2006; 145:1-11.

 先進国において心血管疾患は主要な死因であるが,その発生率には著明な地理的差異がある.地中海諸国における冠動脈疾患の発生率の低さは食生活に帰されてきた.ヨーロッパにおけるコホート研究からの最近の知見では,地中海料理との順守性が高いことと死亡率の減少に関係があることを示唆している.小規模な臨床研究では地中海料理やその何らかの要素が血圧を低下させ,脂質組成と内皮機能を改善した.さらに最近の横断的研究と2年間の供給試験では地中海料理の順守が血管の炎症マーカーの減少と関連していることが示された.心血管リスクの代理マーカーへのこれらの有益な効果は生物学的妥当性に疫学的根拠を与えるものであり,地中海料理の保護効果を示唆するものである.

 オリーブオイルは一価不飽和脂肪酸の豊富なソースであり,地中海料理の主要な要素である.バージンオリーブオイルは果実の脂溶性成分,つまりαトコフェロールとフェノール化合物を保持しており,それらには強い抗酸化作用と抗炎症作用がある.ナッツ類もまた地中海料理では典型的であり,好ましい脂肪酸組成を有しており,栄養素に富み,冠動脈疾患リスクに有利な影響を及ぼす他の生物活性化合物,例えば食物繊維,植物ステロール,葉酸,酸化防止剤などに富む.クルミは特にαリノレン酸,植物 n-3 系脂肪酸といった多価不飽和脂肪酸の含有量が多い点で他のナッツ類と異なっており,さらに抗動脈硬化作用を与えてくれる.それゆえ,我々は高リスク参加者に対して2種類の地中海料理の効果を評価するために大規模な供給試験をデザインした.一方にはバージンオリーブオイルを補い,他方にはミックスナッツを補い,それらと低脂肪食群を心血管転帰で比較した.我々は3ヶ月間の介入を行い,最初の772名の試験参加者において心血管リスクの中間マーカーを測定したので報告する.

方法

研究デザイン

 PREDIMED study は大規模,並行群間,多施設,無作為,対照臨床試験で4年間の臨床試験であり,地中海料理の心血管疾患に対する一次予防効果を評価するものである.推定9000名の高リスク参加者が3つの介入試験に割り付けられる予定で,既に5000名以上が採用されている.3つの介入試験とはオリーブオイルを用いた地中海料理,ミックスナッツを用いた地中海料理および低脂肪食である.主要な転帰は心血管死,非致死性心筋梗塞や非致死性脳卒中などの心血管イベントを集計することである.完了予定日は2010年12月である.

 我々は現在の研究を最初の6ヶ月間の間に研究への参加者を募り,3ヶ月間の食事介入によって心血管リスクの代理マーカーへの効果を評価するようにデザインした.参加した 10 施設の倫理委員会はこの研究プロトコルを承認した.

参加者と採用

 2003 年 10 月から 2004 年 3 月まで我々はスペイン全土の10の教育病院と提携したプライマリーケアセンターにいた 930 名の潜在的参加者を選んだ.適格な参加者とは地域在住の男性なら 55 歳から 80 歳まで,女性なら 60 歳から 80 歳まで,2つの基準の内少なくとも1つを満たすことが求められた.すなわち,2型糖尿病であるか,3つ以上の冠動脈疾患の危険因子(現在喫煙している,血圧 140/90 mmHg 以上の高血圧ないしは降圧剤の処方を受けている,LDL コレステロール値が 4.14 mmol/L (160 mg/dL) 以上であるないしは高脂血症薬の処方を受けている,HDL コレステロール値が 1.04 mmol/L (40 mg/dL) 以下である,BMI が 25 kg/m2 以上である,または若年発症の冠動脈疾患の家族歴がある)を有していることである.除外基準は冠動脈疾患の既往があること,何らかの重篤な慢性疾患があること,薬物中毒ないしはアルコール中毒,オリーブオイルやナッツに対するアレルギーまたは不耐症の既往があること,変化モデルの段階に従って食習慣を変更できると予測するのが難しい場合であった.

 プライマリーケア医師は診療録と訪問スクリーニングの参加者の適格性を徹底した.彼らは協力施設に通院する患者の電子カルテから候補者リストを観察し,適合基準に合致しない患者を除外するために診療録を検討した.そして医師らは適格な候補者に電話をかけてスクリーニング訪問に出席するよう招待した.その訪問には 26 項目からなるアンケートが含まれており,医学的状態と適格性に関連する危険因子を問い合わせるものであった.試験への参加を呼びかけた患者のうち 95% が同意した.

無作為化と介入

 訪問スクリーニングの後,コンピュータによって発生させた乱数列を用いて各施設は適格な参加者を3つの食事群の1つに無作為に割り付けた.調整施設が乱数テーブルを作成し,参加者は 50 ブロックに施設,性別,年齢(70 歳未満と 70 歳以上)を調整して無作為に割り付けられた.我々は年齢と性別のサブグループによる対比番号で予め指定した封書を用いてどの介入群への割当てかを隠した.

 基準の検査は 14 項目のアンケートを含み,以前の検証済みアンケートを拡張したものであり,伝統的な地中海料理への順守の程度を評価するものであった.我々は各項目の値を0か1に割り付けた.詳細は付録の Table 1 を参照のこと.我々はまた 137 項目の検証済みの食物の頻度をアンケートで管理した.それはスペイン版ミネソタ余暇時間の身体活動アンケートであり,47 項目にわたる教育や生活スタイル,既往歴,服薬状況についてのアンケートである.我々は身体測定と血圧測定を行い,空腹時の採血及び随時尿の標本を観察した.

 各施設では同じ栄養士が3群への無作為介入を行った.個別の地中海料理の点数の評価を元に,栄養士は参加者に対して 30 分間の個別の食事指導を行い,特定の食物の望ましい摂取頻度を推奨した.我々は低脂肪食群に割り付けられた参加者にあらゆる油脂類の摂取を控えるように指導し,アメリカ心臓病学会のガイドラインに従って刊行されたリーフレットを渡した.総脂肪摂取量としては2つの地中海料理群参加者に与えられた推奨度は,これらの推奨度は反対であった.というのも彼らは例の 14 項目の地中海料理の点数を増やすように指示されており,植物性脂肪と植物性油脂の消費を増やすことも含まれていたからである.

 低脂肪食群に割り付けられた参加者がそれ以上の介入を受けなかったのに比べ,2群の地中海料理に割り付けられた参加者は2通りの方法で更に強い介入に至った.まず彼らは典型的な地中海料理の脂肪に富む食材(オリーブオイルかナッツ)を無料で提供された.割り付け群に従って,参加者は無料のバージンオリーブオイルか,クルミ・ヘーゼルナッツ・アーモンドの無料の小袋を与えられた.バージンオリーブオイルは3ヶ月間で 15 L (1 L/week), ナッツ類はクルミ 1350 g (15 g/d), ヘーゼルナッツ 675 g (7.5 g/d), アーモンド 675 g (7.5 g/d) であった.地中海料理群に対応する参加者の家庭での需要を考慮して順守度を改善するため,余分にオリーブオイルか 1000 g の追加のナッツ類も提供された.我々は参照実験で標準的な方法で使われたオリーブオイルとナッツ類の栄養組成を分析した.付録の Table 2 を参照のこと.2番目に,1週間の封入後に栄養士が1時間に渡って 20 名までの集団指導を行い,それぞれの地中海料理群に別々の指導を行った.各群の指導は有益な話と先述の物資からなり,具体的には典型的な地中海料理の食材についての詳細な説明,季節の買い物リスト,食事プラン,料理のレシピなどであった.試験全体を通して,全参加者が無料で継続的に施設の栄養士への面会が可能であり,指導と相談を受けることができた.

測定項目

 訓練された職員が構成済み体重計と壁掛式身長計で体重と身長を測定した.また最低肋骨と腸骨稜との中間でウエスト周囲径を身体測定テープで測定した.血圧は校正済み半自動オシロメーター(オムロン HEM-705CP, Hoofddorp, オランダ)で測定した.我々はスペイン食品成分表でエネルギーと栄養組成を計算した.3ヶ月時点での訪問と参加者から相談を受けた時点で栄養士は症状の管理チェックリストを用いて介入の副作用を評価し,回避方法を指導した.そのチェックリストは口腔症状を含み,鼓腸,腹部膨満,消化不良などであり,排便習慣を変更することや他のいかなる食事関連症状も網羅していた.

 血清や EDTA 血漿,尿といった検体はコード化され,中央検査施設に出荷され,分析までの間 – 80 度で保存された.臨床研究者や検査技師はこの試験からは盲検化されていた.必要に応じて全血清または血漿の凍結サンプルの参加者ごとに決められた分析対象成分は以下のとおり.血糖値はグルコースオキシダーゼ法,血清インスリン値はラジオイムノアッセイ法,コレステロールと中性脂肪は酵素処理法,HDL コレステロールはリンタングステン酸と塩化マグネシウムによる沈殿法,アポリポ蛋白 A1 と B は比濁法,ICAM-1, VCAM-1, IL-6 は標準酵素結合免疫吸着アッセイ法,高感度 CRP は粒子強化免疫比濁法.すべての検査項目の測定は二重化した.インスリン,CRP, ICAM-1, VCAM-1, IL-6 のアッセイ内アッセイ間変動係数はそれぞれ 1.8 % – 5.4 %, 0.9 % – 9.9 % の範囲であった.

 糖尿病ではない参加者において,我々は HOMA index を用いてインスリン抵抗性を計算した.

 インスリン抵抗性 = 空腹時インスリン値 (microU/mL) × 空腹時血糖値 (mmol/L) / 22.5

 273 名 (35%) のランダムサンプリングにおいて,我々は尿中チロソールおよび尿中ヒドロキシチロソール値をガスクロマトグラフィー質量分析法で測定し,バージンオリーブオイル摂取の順守のマーカーとした.また同様に血漿αリノレン酸濃度をガスクロマトグラフィー法で測定し,ナッツ(クルミ)摂取の順守の指標とした.

統計解析

 並列デザインとして,統計的検出力の計算は1群ごとに 227 名の参加者が LDL コレステロール値の平均値で 0.13 mmol/L (SD 0.49) (5 mg/L) の差異を検出する必要があることを示唆していた (α = 0.05, power = 0.8).我々は標本サイズを設定するために LDL コレステロールを用いたのだが,同様に予備試験と非確認試験での全 end point での変化に関心があった.我々の解析は治療意思原則に基づいていた.我々は参加者の基本特性の記述統計に平均値と標準偏差を用いた.検査値を解析するのに2つの基本統計量を用いた.つまりベースライン値としての2つの基本統計量と,最終値としての3ヶ月の介入後の2つの基本統計量である.CRP, VCAM-1, ICAM-1 の値を解析するのに自然対数の傾斜分布に変換した.3ヶ月間で臨床,食事,検査値の変化を検査した.それには多変数モデルの層別化因子としての施設も含まれた.交絡の可能性として年齢,性別,基準体重を調整し,これらの変数も多変数モデルに導入した.次の参加者は除外した.つまり先述した食事頻度アンケート調査でも述べたが,カロリー摂取が想定範囲外,つまり1日 500 kcal から 3500 kcal の範囲外にある女性と,1日 800 kcal から 4000 kcal の範囲外の男性.それに加えて CRP 値がいずれかの時点でも 10 mg/L (1 mg/dL) より高い参加者.これは何らかの炎症過程を示唆しており,炎症マーカーの統計解析から除外した.群内および群間の差異は平均値と 95% 信頼区間で示した.すべての統計試験は両側検定であり,有意水準は 0.05 とした.SPSS version 11.0 (SPSS, Chicago, Illinois) を用いて解析を行った.

資金源の役割

 本研究ではスペイン保健省の助成金を受けた (Red G03/140).Fundacion Patrimonio Comunal Olivarero and Hojiblanca SA, California Walnut Commission, Borges SA, そして Morella Nuts SA が寛大にもオリーブオイル,クルミ,アーモンド,ヘーゼルナッツをそれぞれ寄付してくれ,それらを試験に使用した.資金源は研究デザインや収集,解析,データの解釈,刊行における原稿提出決定には関与していない.

結果

 930 名の適格な参加者のうち 158 名を無作為化の前に様々な理由で除外した (Figure 1).Table 1 に本研究に参加した 772 名の参加者の基本特性を示した.参加者のうち 697 名はスペイン系ヨーロッパ人種で 75 名は中南部アメリカからのヒスパニック系移民であった.この試験が継続中にもかかわらず,大規模ブロックサイズの大規模多施設試験なのだが,例の群は出身種族,人口統計学的特性,肥満,危険因子で調整しなおした.3 名が試験完了前に脱落した.その基本特性は群全体のそれとよく似ていた.

副作用

 ナッツの地中海料理群の 34 名 (13 %) の参加者ではホールナッツを噛むのが難しく,歯の間にナッツの破片が挟まったと報告された.この問題はナッツを細かく砕いて低脂肪ヨーグルトに混ぜることで満足に解決した.しかし 1 名の参加者は試験から脱落した.オリーブオイルの地中海料理と低脂肪食に割り付けられた参加者には全く副作用は見られなかった.

食事,エネルギー,栄養の摂取

 次の参加者を除外した.つまり食事,エネルギー,栄養素の計算で非現実的な報告をした参加者である.オリーブオイル群で 21 名,ナッツ群で 19 名,低脂肪食群で 8 名.食事内容の主な変化として,バージンオリーブオイルとナッツの消費量が地中海料理群でそれぞれ提供された食材に対応して大幅に増加した.逆にオリーブオイル群では一般のオリーブオイルの消費が減少した.参加者は一般のオリーブオイルを色々と提供されたバージンオリーブオイルに置き換えたと示唆された.低脂肪食群ではオリーブオイルとナッツの摂取は共に減少したが,統計的有意ではなかった.3群いずれの参加者でも摂取が増加したのは野菜類,豆類,果実類,魚類であり,減少したのは肉類,菓子類,乳製品類であった (Table 2).地中海料理の点数は地中海料理の2群で増加し,低脂肪食群で変化しないままだった.この結果は,エネルギー消費が計算の範囲外の参加者を含めても変化しなかった.

 身体活動による推定エネルギー支出は 3 群内でベースライン値と3ヶ月後で近似していた(データは示さない).オリーブオイルと低脂肪食に割り付けられた群において報告書でのエネルギー摂取の削減が観察された (Table 3).その 3 群では飽和脂肪酸の摂取がベースライン値から減少していた.地中海料理の2群ではコレステロール摂取が減少していた.ナッツ類の地中海料理群では総炭水化物摂取量の減少,食物繊維・総脂質・一価不飽和脂肪酸・多価不飽和脂肪酸の摂取が増加していた.

 本試験での参加者の 273 名の無作為抽出群での血漿及び尿中生化学検査では,地中海料理群での補助食品の順守は良好と判明した.低脂肪食群と比較して,オリーブオイルに割り付けられた群では尿中チロソールおよびヒドロキシチロソールがベースライン値より 19 ng/mL (95% CI, 5 – 35 ng/mL), 84 ng/mL (CI, 34 – 135 ng/mL) それぞれ上昇していた.ナッツ類に割り付けられた群では血漿αリノレン酸値が 0.15 mol% (CI, 0.09 – 0.21 mol%) 上昇していた.

 Table 4 には心血管危険因子を示す.体重と肥満度は 3 群いずれもわずかに減少したが,群間での差異は認められず,統計的有意であったのは低脂肪食群での BMI の変化のみであった.低脂肪食群と比較して地中海料理群での収縮期圧と拡張期圧の低下,血糖値の低下,コレステロール対 HDL コレステロール比の低下,HDL コレステロール値の上昇が認められた.空腹時インスリン値と HOMA index もまた地中海料理2群においてより低値であった.総コレステロール値および中性脂肪値はナッツ群においてのみ減少が認められた.

炎症マーカー

 少なくとも1回以上血漿 CRP 値が 10 mg/L より高かったため,オリーブオイル群から8名,ナッツ群から2名,低脂肪食群から4名の参加者を計算から除外した.Figure 2 に3群での CRP, IL-6, ICAM-1, VCAM-1 のベースライン値からの変化を示す.CRP 値はオリーブオイル群においてのみ減少が認められた.低脂肪食群と比較して,群間調整したオリーブオイル群での CRP 値の変化は – 0.54 mg/L (CI, – 1.04 to – 0.03 mg/L) であり,ナッツ群においては 0.33 mg/L (CI, – 0.19 to 0.84 mg/L) であった.循環血漿中の IL-6, ICAM-1, VCAM-1 濃度は地中海料理2群において共に減少し,低脂肪食群において増加していた.低脂肪食群と比較して.群間での IL-6 値の変化はオリーブオイル群で – 1.6 ng/L (CI, – 2.5 to – 0.6 ng/L), ナッツ群で – 1.3 ng/L (CI, – 2.3 to – 0.4 ng/L) であった.ICAM-1 値の群間変化はそれぞれ – 104 ng/mL (CI, – 135 to – 72 ng/mL), – 97 ng/mL (CI, – 128 to – 65 ng/mL) であった.VCAM-1 値の群間変化はそれぞれ – 178 ng/mL (CI, – 277 to – 79 ng/mL), – 167 ng/mL (- 267 to – 68 ng/mL) であった.CRP 値が 10 mg/L より高い参加者を計算に含めても,食事群の間での CRP 値の差異は拡大したが,統計的有意は変化しなかった.これは他の炎症性分子についても影響しなかった.

サブグループ解析

 本試験のいずれの群のサブグループ(施設,人種,性別,年齢,基準体重,身体活動)においても転帰に差異は全く認められなかった.しかしながら,高血圧を伴う参加者には次の統計的有意差が見られた.つまり,地中海料理の2群において収縮期圧のより大きなベースライン値からの低下である.オリープオイル群,ナッツ群でそれぞれ平均 – 6.2 mmHg (CI, – 8.4 to – 4.0 mmHg), – 7.4 mmHg (CI, – 9.9 mmHg to – 5.0 mmHg).低脂肪食群で高血圧を伴う参加者は平均で 1.2 mmHg (CI, – 1.0 to 3.4 mmHg) であった.正常血圧の参加者の収縮期圧の平均変化は低脂肪食群,オリーブオイル群,ナッツ群でそれぞれ – 1.8 mmHg (CI, – 6.7 to 3.0 mmHg), 0.5 mmHg (CI, – 1.4 to 2.5 mmHg), – 2.2 mmHg (CI, – 4.5 to 0.1 mmHg) であった.データは示さないが,拡張期圧の変化も血圧の変化に伴い同様の傾向を示した.

考察

 もし地中海料理が心血管一次予防に有用なら,個人が食事を遵守することで動脈硬化の危険因子を減らすことに一つの期待が持てるだろう.本試験では高リスクの参加者が栄養指導を受けた後バージンオリーブオイルかナッツ類の提供を受けて基準の地中海料理を改善したところ,低脂肪食群に割り付けられた参加者と比較して血圧の低下,脂質組成の改善,インスリン抵抗性の改善,炎症性分子の減少を示した.

 地中海料理は高脂肪食である.地中海文化では大量の一価不飽和脂肪酸を含有するオリーブオイルを使用するためである.心血管危険因子,肥満,糖尿病に対して,相対的に一価不飽和脂肪酸に富む料理の有効性が科学的に論じられてきた(付録 Table 3 参照のこと).しかしながら,肥満の人に対して栄養指導がなされる時,臨床医はまだ従来の(そしておいしくない)低脂肪食に替わるものとして高脂肪の一価不飽和脂肪酸に富む食事を勧めるのを渋っている.彼らは脂肪が余分のエネルギーを提供し,肥満を助長すると信じている.本試験では多くの参加者が肥満か糖尿病を有していたため,オリーブオイルやナッツなどの大量の一価不飽和脂肪酸を含む食事を自由に摂取した時でも体重増加がなかったという結果は心強いものであった.この結果もまたナッツ類に富む食事は体重を増加させないという根拠に加わるものである (32-34).

 健康食品や生活スタイルは高血圧を予防し治療するにあたって非常に重要である (35).本試験では,既に降圧剤投与を受けている高血圧参加者においても,地中海料理は統計的有意差をもって血圧を低下させた.観察試験 (36, 37) と小規模提供試験 (38, 39) においてオリーブオイルの消費量の増加は血圧を下げるのに役立つことを示唆している (40).最近では Omni Heart study (41) においても色々な食材由来の一価不飽和脂肪酸に富む食事は降圧効果を発揮することが報告されている.小規模試験ではナッツ類に富む食事には全く降圧効果は認められていない (15).しかしながら,クルミには血管作動活性において望ましい効果があるようである (42).更に,大規模横断試験 (43) において,αリノレン酸の摂取は,クルミに豊富に含まれる植物 n-3 脂肪酸なのだが,血圧と反比例していた.ナッツ類の地中海料理の参加者はαリノレン酸摂取が増加しており,平均で 1 g/d であった.故に,クルミの消費も血圧低下に寄与したのであろう.地中海料理の2群において血圧が観察された他の説明として,食物全体のパターンの変化がある.似たパターンとして the Dietary Approaches to Stop Hypertension (DASH) trial (44) があり,これは高用量のオリーブオイルを例外としている.我々の試験では塩分制限はなされていない.地中海料理における血圧低下効果は DASH 料理の塩分非制限群と似ており,DASH 料理の塩分制限群よりも効果は低かった (45).OmniHeart study における効果は偉大だが,炭水化物を部分的に一価不飽和脂肪酸で置換した効果と観察された (41).

 2種類の地中海料理は全参加者において空腹時血糖値と空腹時インスリン値の低下に関連しており,糖尿病ではない参加者においてはインスリン抵抗性に関連している.故にメタボリック症候群患者でインスリン感受性に地中海料理が好ましい効果を観察するのを延長した (12).インスリン抵抗性と糖尿病は余剰エネルギー摂取に関連しており,特に飽和脂肪酸と単糖類の形成に関与し,肥満を増加させる (46).従来,糖尿病患者に対しては低脂肪,高炭水化物の食事を指導されてきた.しかしながら,そのような食事では代謝コントロールや悪影響が悪化する.つまり一価不飽和脂肪酸に富む油脂やナッツ類に基づく高脂肪食では観察されなかったような悪影響がである (31).頻回のナッツの摂取は糖尿病リスクと反比例する (47).それに加えて,肉類と乳製品類の摂取減少と食物繊維の摂取増加は,地中海料理の2群で観察されていたが,生活スタイル介入と組み合わせて,糖尿病の発生率を低下させたことが分かった (48, 49).この結果はインスリン抵抗性における健康的な食事のさらなる有効性を支持するものである.

 炭水化物を食事中の脂肪で置換すると中性脂肪と HDL コレステロールが上昇する.一方飽和脂肪酸を一価不飽和脂肪酸に置換すると LDL コレステロールが低下する (50, 51).基準時と3ヶ月後のいずれも総脂肪摂取量は高かったが,3群いずれにおいてもエネルギーの 1% 程度の飽和脂肪酸摂取量の僅かな減少を観察した.しかし低脂肪食群では脂質組成は変化しなかった一方で地中海料理2群では HDL コレステロール値が上昇した.特にオリーブオイルを提供された時にそうだった.色々なナッツ類に富む食事のコレステロール低下効果が確立している (8, 15, 42) 一方で,なぜオリーブオイルをバージンオリーブオイルに置換すると脂質に有効なのかは分かっていない.バージンオリーブオイルに含まれているオリーブオイルの微量成分がその効果を説明できるかもしれず,さらなる研究に値する.低脂肪食は通常 LDL コレステロールと HDL コレステロールの両者を低下させる (52-54) ため,高リスクの個人にとって脂肪に富む地中海料理はよりよい栄養的選択肢になりうる.

 小規模試験においてナッツの消費は血清中性脂肪の減少に繋がらない (15).地中海料理のナッツ群参加者における中性脂肪減少効果はクルミ由来のαリノレン酸の摂取増加に関係しているのかもしれない.横断研究 (55) においてαリノレン酸の消費は中性脂肪濃度の減少と逆の関係にあるからである.

 動脈硬化は炎症性疾患と広くみなされている.疫学研究,臨床研究,実験研究で地中海料理やその食事パターンの要素の幾つか,つまりオリーブオイル (14, 57) やナッツ類 (34, 42),赤ワイン (57, 58) を頻回に消費することは,低炎症状態に関連しており内皮機能を改善する.他の健康的食事パターンの似たような知見が最近報告された (59).我々の観察では地中海料理の2群に割り付けられた参加者において細胞接着分子濃度の低下が見られ,この食事パターンの抗動脈硬化作用を支持するものである.

 我々の試験にはいくつか限界がある.食事指導を確実に遵守することは提供試験では難しい.しかし推奨された食事パターンを遵守することや提供された食品は,自己申告や客観的検査から判断されたように,良いものであった.一方で我々のデザインは,家庭で用意できる食材や普段の実践など,実際の生活状態を再現する点で強度を持っていた.2番目の限界は低脂肪食についての栄養教育が地中海料理についての教育よりも強くないことである.事実,低脂肪食に割り付けられた群においては脂肪摂取量がわずかに減少しただけであった.これは研究デザインが一部の原因であるが,参加者が地中海文化圏に所属していることも原因である.そこでは人々はオリーブオイルを使用するのを好む.低脂肪食は一般的な食事ではないため,この群の参加者もまた健康的な方法で食生活を変更した.それゆえ,地中海料理群と低脂肪食群との間に観察された転帰の差異は提供された食材に起因するのかもしれない.観察期間がたった3ヶ月しかない点は,危険因子の食事介入効果が長期間を要しないことの主な限界とはみなされず (44, 45, 53),順守期間が続くだけ持続するようである (12, 48, 49).

 結論として,我々の結果は以下の点を支持する.疫学研究を通じて観察された地中海料理の健康への効果はもっともらしい機序を通じて発揮される.脂質組成を改善し,血圧やインスリン抵抗性,全身の炎症正マーカーを低下させる.我々の試験期間は短すぎて臨床転帰を扱うことができなかった.PREDIMED trial 全体の長期観察によって最終的に強固なエビデンスが得られるだろう.その間に,冠動脈疾患の高リスク状態にある個人を管理する有用なツールとしての地中海料理を支持する身体の知識は増して行くだろう.

CSV file of the ‘Standard Tables of Food Composition in Japan 2010’

I had posted the article which contains ‘M_FOODS.txt’, which is derived from the ‘Standard Tables of Food Composition in Japan 2010’, on January 12, 2012. The employee of the Ministry of Education, Culture, Sports, Science & Technology in Japan (MEXT) has asked me to inform on my blog of name and unit of each component of ‘M_FOODS.txt’ file. I have added name and unit to table head of CSV file. Then I post it on my blog.

In original PDF files, comma character is used in component as character rather than as delimiter and space character is used as delimiter. Because I could not use comma character as delimiter, I had to use tab character as delimiter. Although we use double quotes as quote with EXCEL, such other program as relational database management software may use single quotes as quote. Therefore, I didn’t use quote at all. When you open this file, don’t double click to open, please. Please use ‘Text file wizard’. In the last tab of wizard, you would had to select ‘string’ data type of first column. If you would not have followed this warning, you could not open correctly and you would be confused why the length of item number is 4 and the first ‘0’ is missing.

This file has 54 columns and 1,881 rows. The first three lines show data structure, following lines from the fourth line show data itself. Japanese name of components in the first line, English name of components in the second line and unit in the third line. It means ‘g’ as gram, ‘mg’ as milligram and ‘microgram’ as micro-gram.

Please note following:

1. I have replaced the strings ‘(0)’, ‘Tr’, ‘(Tr)’ and ‘-‘ with ‘0’.

2. The text file is derived from ‘Standard Tables of Food Composition in Japan 2010’, published by Report of the Subdivision on Resources The Council for Science and Technology, MEXT, JAPAN. Please contact MEXT to obtain application or notification before duplication or reproduction.

E-mail: kagseis@mext.go.jp

M_FOODS.csv

References:
Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 1
Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 2

日本食品標準成分表2010のcsvファイル

2012年1月12日,日本食品標準成分表2010のテキストデータの記事を投稿しました.その際に’M_FOODS.txt’ファイルに各項目の名称と単位を付記されたいとの依頼があったと追記しました.今回は表頭に各項目名と単位を付記したcsvファイルを作成しましたので公開いたします.

元のPDFファイルでは各要素内にコンマを使用しており,デリミタとしてスペースを使用していました.本ファイルではタブをデリミタとして使用しています.EXCELでは通常ダブルクォーテーションを引用符として用いますが,他のデータベースソフトではシングルクォーテーションを引用符として用いるものもあります.そのため本ファイルでは引用符を使用しておりません.EXCELに取り込む際にはダブルクリックで開かず,必ず’データ’タブの’外部データをインポートする’から’テキストファイル’を選択してください.またテキストファイルウィザードの最後のタブで1列目のデータ型を’文字列’にしてください.以上の注意点を守らない場合,食品番号は通常5桁の数値ですが,先頭の’0’が欠落する場合があります.



本ファイルは54列1881行から成ります.表頭3行はデータ構造を示し,4行目以降が実際のデータです.1行目は日本語の項目名,2行目は英語の項目名,3行目は単位です.gはグラム,mgはミリグラム,microgramはマイクログラムです.

以下の点にご注意ください.

1.「日本食品標準成分表2010」に記載されている,(0),Tr,(Tr),-,について,当データでは「 0 」と表記しています.

2.本表の食品成分値は文部科学省科学技術・学術審議会資源調査分科会報告「日本食品標準成分表2010」によるものです.食品成分値を複製又は転載する場合は事前に文部科学省への許可申請もしくは届け出が必要となる場合があります.

連絡先:文部科学省科学技術・学術政策局政策課資源室 E-mail: kagseis@mext.go.jp

M_FOODS.csv

参照:
日本食品標準成分表2010の食品番号をカテゴリー分類する その1
日本食品標準成分表2010の食品番号をカテゴリー分類する その2

Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 1

I have posted the article Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′ that caused incomplete result. After post it, I have found good article in Japanese. Therefore, I gave it additional value in English.

Standard Tables of Food Composition in Japan 2010

Make a new EXCEL Book. Copy text from the PDF files (‘1299012_1.pdf’ to ‘1299012_18.pdf’) and option paste to EXCEL worksheet ‘Sheet1’ continuously without blank line between the last line of previous text and the first line of next text. With ‘Text File Wizard’, change option data type of the first column to ‘String’. Download Academic name of food materials, select all text and paste to Sheet2. In the first tab of ‘Text File Wizard’, select option ‘The data field separated by delimiters such as comma or tab’. In second tab, remove check mark ‘Consider continuous delimiters as one’. In the last tab, change option data type of the first column to ‘String’. Save as ‘Sample.xlsm’.

Press ‘Alt’ key and ‘F11’ key to launch VBE. Insert module and paste following code. Run ‘Separate_by_Parent’ procedure.

Option Explicit
Function MajorCategoryAr(ByRef Sh As Worksheet) As String()
Dim mySht               As Worksheet
Dim myRng               As Range
Dim tmpAr               As Variant
Dim StartEnd            As Variant
Dim strFoodGroup        As String
Dim strFoodGroupJP      As String
Dim strFoodGroupEN      As String
Dim strSubFoodGroup     As String
Dim strSubFoodGroupJP   As String
Dim strSubFoodGroupEN   As String
Dim strSub_Category     As String
Dim strSub_CategoryJP   As String
Dim strSub_CategoryEN   As String
Dim strMajor_Category   As String
Dim StartNumber()       As String
Dim Exit_Number()       As String
Dim FoodGroupJP()       As String
Dim FoodGroupEN()       As String
Dim Sub_FoodGroup_JP()  As String
Dim Sub_FoodGroup_EN()  As String
Dim Sub_Category_JPN()  As String
Dim Sub_Category_ENG()  As String
Dim Major_CategoryJP()  As String
Dim Major_CategoryEN()  As String
Dim Major_CategoryLT()  As String
Dim myArray()           As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim n As Long
Dim RegExp_3_Digit_Num  As Object
Dim RegExp_Item_Number  As Object
Dim RegExp_SentakuHanni As Object
Dim RegExp_SubCategory1 As Object
Dim RegExp_SubCategory2 As Object
Dim RegExp_MedCategory  As Object
Dim RegExp_Foods_Group  As Object
Dim RegExp_Jpn_Eng_Mix  As Object
Dim RegExp_JapaneseOnly As Object
Dim RegExp_Upper_Lower  As Object
Dim RegExp_Upper_Only   As Object
Dim RegExp_Lower_Only   As Object
Dim RegExp_RoundBracket As Object
Dim RegExp_SquareBracket    As Object
Dim RegExp_AngleBracket As Object
Dim myMatches           As Object
Dim myMatch             As Object
Const Ptn_3_Digit_Num   As String = "[0-9]{3}$"
Const Ptn_Item_Number   As String = "^[0-9]{5}$"
Const Ptn_SentakuHanni  As String = "(,|~)"
Const Ptn_SubCategory1  As String = "^((|\().()|\))$"
Const Ptn_SubCategory2  As String = "^(<|>)$"
Const Ptn_MedCategory   As String = "^\[.\]$"
Const Ptn_FoodGroupNum  As String = "^([0-9]|[0-9]{2})$"
Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
Const Ptn_JapaneseOnly  As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?$"
Const Ptn_Upper_Lower   As String = "[A-Z][a-z]+"
Const Ptn_Upper_Only    As String = "[A-Z]+"
Const Ptn_Lower_Only    As String = "^[a-z]+$"
Const Ptn_RoundStart    As String = "^[\((]"
Const Ptn_Round_Exit    As String = "[\((][^A-Za-z0-9]+[\))]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_Exit   As String = "\[[^A-Za-z0-9]+\]"
Const Ptn_AngleStart    As String = "^[\<<]"
Const Ptn_Angle_Exit    As String = "[\<<][^A-Za-z0-9]+[\>>]"
Set mySht = Sh
Set myRng = mySht.UsedRange
tmpAr = myRng
Set RegExp_3_Digit_Num = CreateObject("VBScript.RegExp")
Set RegExp_Item_Number = CreateObject("VBScript.RegExp")
Set RegExp_SentakuHanni = CreateObject("VBScript.RegExp")
Set RegExp_SubCategory1 = CreateObject("VBScript.RegExp")
Set RegExp_SubCategory2 = CreateObject("VBScript.RegExp")
Set RegExp_MedCategory = CreateObject("VBScript.RegExp")
Set RegExp_Foods_Group = CreateObject("VBScript.RegExp")
Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
Set RegExp_JapaneseOnly = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Lower = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Only = CreateObject("VBScript.RegExp")
Set RegExp_Lower_Only = CreateObject("VBScript.RegExp")
Set RegExp_RoundBracket = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket = CreateObject("VBScript.RegExp")
Set RegExp_AngleBracket = CreateObject("VBScript.RegExp")
With RegExp_3_Digit_Num
    .Pattern = "[0-9]{3}$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Item_Number
    .Pattern = "^[0-9]{5}$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SentakuHanni
    .Pattern = "(,|~)"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SubCategory1
    .Pattern = "^((|\().()|\))$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SubCategory2
    .Pattern = "^(<|>)$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_MedCategory
    .Pattern = "^\[.\]$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Foods_Group
    .Pattern = "^([0-9]|[0-9]{2})$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Jpn_Eng_Mix
    .Pattern = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_JapaneseOnly
    .Pattern = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Upper_Lower
    .Pattern = "[A-Z][a-z]+"
    .IgnoreCase = False
    .Global = True
End With
With RegExp_Upper_Only
    .Pattern = "[A-Z]+"
    .IgnoreCase = False
    .Global = True
End With
With RegExp_Lower_Only
    .Pattern = "^[a-z]+$"
    .IgnoreCase = False
    .Global = True
End With
j = 0
For i = LBound(tmpAr) + 1 To UBound(tmpAr)
    With RegExp_RoundBracket
        .Pattern = Ptn_RoundStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_AngleBracket
        .Pattern = Ptn_AngleStart
        .IgnoreCase = True
        .Global = True
    End With
    strFoodGroup = ""
    strSubFoodGroup = ""
    strSub_Category = ""
    strMajor_Category = ""
    ReDim Preserve StartNumber(j)
    ReDim Preserve Exit_Number(j)
    ReDim Preserve FoodGroupJP(j)
    ReDim Preserve FoodGroupEN(j)
    ReDim Preserve Sub_FoodGroup_JP(j)
    ReDim Preserve Sub_FoodGroup_EN(j)
    ReDim Preserve Sub_Category_JPN(j)
    ReDim Preserve Sub_Category_ENG(j)
    ReDim Preserve Major_CategoryJP(j)
    ReDim Preserve Major_CategoryEN(j)
    ReDim Preserve Major_CategoryLT(j)
    If RegExp_3_Digit_Num.Test(tmpAr(i, 1)) Then
        Select Case True
        Case RegExp_Item_Number.Test(tmpAr(i, 1))
            StartNumber(j) = tmpAr(i, 1)
            Exit_Number(j) = tmpAr(i, 1)
        Case RegExp_SentakuHanni.Test(tmpAr(i, 1))
            StartEnd = StartExit(tmpAr(i, 1))
            StartNumber(j) = StartEnd(0)
            Exit_Number(j) = StartEnd(1)
            Erase StartEnd
        End Select
        FoodGroupJP(j) = strFoodGroupJP
        FoodGroupEN(j) = strFoodGroupEN
        If (i >= 19 And i <= 27) _
        Or (i >= 370 And i <= 596) _
        Or (i >= 599 And i <= 626) _
        Or (i >= 635 And i <= 639) _
        Or (i >= 646 And i <= 668) _
        Then
            Sub_FoodGroup_JP(j) = strSubFoodGroupJP
            Sub_FoodGroup_EN(j) = strSubFoodGroupEN
        End If
        If tmpAr(i, 2) = "" Then
            Sub_Category_JPN(j) = strSub_CategoryJP
            Sub_Category_ENG(j) = strSub_CategoryEN
        End If
        For k = 2 To 8
            strMajor_Category = strMajor_Category & " " & tmpAr(i, k)
        Next k
        strMajor_Category = Trim(strMajor_Category)
        On Error Resume Next
        For k = 1 To 8
            If RegExp_Lower_Only.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_SubCategory1.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_SubCategory2.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_Foods_Group.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_3_Digit_Num.Test(tmpAr(i + 1, 1)) _
            Then
                strMajor_Category = strMajor_Category & " " & tmpAr(i + 1, k)
            End If
        Next k
        On Error GoTo 0
        strMajor_Category = Trim(strMajor_Category)
        If RegExp_Jpn_Eng_Mix.Test(strMajor_Category) Then
            StartEnd = Separate_Jpn_Eng(strMajor_Category)
            Major_CategoryJP(j) = StartEnd(0)
            Erase StartEnd
            Set myMatches = RegExp_Upper_Lower.Execute(strMajor_Category)
            Major_CategoryEN(j) = Mid(strMajor_Category, _
                                    myMatches.Item(0).firstindex + 1, _
                                    myMatches.Item(myMatches.Count - 1).firstindex _
                                  - myMatches.Item(0).firstindex - 1)
            Set myMatch = myMatches.Item(myMatches.Count - 1)
            Major_CategoryLT(j) = Mid(strMajor_Category, myMatch.firstindex + 1)
        Else
        End If
    Else
        Select Case True
        Case RegExp_Foods_Group.Test(tmpAr(i, 1))
            For k = 2 To 8
                strFoodGroup = strFoodGroup & " " & tmpAr(i, k)
            Next k
            strFoodGroup = Trim(strFoodGroup)
            Select Case True
            Case RegExp_Jpn_Eng_Mix.Test(strFoodGroup)
                Set myMatches = RegExp_Jpn_Eng_Mix.Execute(strFoodGroup)
                Set myMatch = myMatches.Item(0)
                strFoodGroupJP = Left(strFoodGroup, myMatches.Item(0).Length - 1)
                strFoodGroupEN = Mid(strFoodGroup, myMatches.Item(0).Length)
            Case RegExp_JapaneseOnly.Test(strFoodGroup)
                Set myMatches = RegExp_JapaneseOnly.Execute(strFoodGroup)
                Set myMatch = myMatches.Item(0)
                strFoodGroupJP = Left(strFoodGroup, myMatches.Item(0).Length - 1)
                strFoodGroupEN = Mid(strFoodGroup, myMatches.Item(0).Length)
            Case Else
            End Select
        Case RegExp_AngleBracket.Test(tmpAr(i, 1))
            For k = 1 To 8
                strSubFoodGroup = strSubFoodGroup & " " & tmpAr(i, k)
            Next k
            strSubFoodGroup = Trim(strSubFoodGroup)
            With RegExp_AngleBracket
                .Pattern = Ptn_Angle_Exit
                .IgnoreCase = True
                .Global = True
            End With
            Set myMatches = RegExp_AngleBracket.Execute(strSubFoodGroup)
            strSubFoodGroupJP = myMatches.Item(0).Value
            strSubFoodGroupEN = Mid(strSubFoodGroup, myMatches.Item(0).Length + 2)
            strSubFoodGroupEN = Replace(strSubFoodGroupEN, "<", "<")
            strSubFoodGroupEN = Replace(strSubFoodGroupEN, ">", ">")
        Case RegExp_RoundBracket.Test(tmpAr(i, 1))
            For k = 1 To 8
                strSub_Category = strSub_Category & " " & tmpAr(i, k)
            Next k
            strSub_Category = Trim(strSub_Category)
            With RegExp_RoundBracket
                .Pattern = Ptn_Round_Exit
                .IgnoreCase = True
                .Global = True
            End With
            Set myMatches = RegExp_RoundBracket.Execute(strSub_Category)
            On Error Resume Next
            strSub_CategoryJP = myMatches.Item(0).Value
            strSub_CategoryJP = Replace(strSub_CategoryJP, "(", "(")
            strSub_CategoryJP = Replace(strSub_CategoryJP, ")", ")")
            strSub_CategoryEN = Mid(strSub_Category, myMatches.Item(0).Length + 2)
            strSub_CategoryEN = Replace(strSub_CategoryEN, "(", "(")
            strSub_CategoryEN = Replace(strSub_CategoryEN, ")", ")")
            On Error GoTo 0
        Case Else
        End Select
        j = j - 1
    End If
    j = j + 1
Next i
ReDim myArray(UBound(StartNumber), 10)
For n = LBound(myArray) To UBound(myArray)
    myArray(n, 0) = StartNumber(n)
    myArray(n, 1) = Exit_Number(n)
    myArray(n, 2) = FoodGroupJP(n)
    myArray(n, 3) = FoodGroupEN(n)
    myArray(n, 4) = Sub_FoodGroup_JP(n)
    myArray(n, 5) = Sub_FoodGroup_EN(n)
    myArray(n, 6) = Sub_Category_JPN(n)
    myArray(n, 7) = Sub_Category_ENG(n)
    myArray(n, 8) = Major_CategoryJP(n)
    myArray(n, 9) = Major_CategoryEN(n)
    myArray(n, 10) = Major_CategoryLT(n)
Next n
MajorCategoryAr = myArray
End Function

Function StartExit(ByVal InputStr As String) As String()
    Dim str     As String
    Dim Ar()    As String
    str = InputStr
    ReDim Ar(1)
    Ar(0) = Left(str, 5)
    Ar(1) = Left(str, 2) & Right(str, 3)
    StartExit = Ar
End Function

Function Separate_Jpn_Eng(ByVal InputStr As String) As String()
    Dim str                 As String
    Dim Ar()                As String
    Dim RegExp_Jpn_Eng_Mix  As Object
    Dim myMatches           As Object
    Dim myMatch             As Object
    Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
    str = InputStr
    ReDim Ar(1)
    Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
    With RegExp_Jpn_Eng_Mix
        .Pattern = Ptn_Jpn_Eng_Mix
        .IgnoreCase = True
        .Global = True
    End With
    Set myMatches = RegExp_Jpn_Eng_Mix.Execute(str)
    For Each myMatch In myMatches
        If myMatches.Count > 0 Then
            Ar(0) = Left(str, myMatches.Item(0).Length - 1)
            Ar(1) = Mid(str, myMatches.Item(0).Length)
        End If
    Next myMatch
    Separate_Jpn_Eng = Ar
End Function

Sub Separate_by_Parent()
Dim mySht1              As Worksheet
Dim mySht2              As Worksheet
Dim mySht3              As Worksheet
Dim myRng               As Range
Dim tmpAr               As Variant
Dim Major_CategoryAr    As Variant
Dim No_Cancel_Ar        As Variant
Dim ItemNamAr()         As String
Dim ItemNumAr()         As String
Dim JapaneseName()      As String
Dim English_Name()      As String
Dim ItemArray()         As String
Dim Residual_JPN()      As String
Dim Residual_ENG()      As String
Dim Residual_Row()      As String
Dim i                   As Long
Dim j                   As Long
Dim k                   As Long
Dim m                   As Long
Dim n                   As Long
Dim p                   As Long
Dim q                   As Long
Dim r                   As Long
Dim s                   As Long
Dim t                   As Long
Dim str_JPN_Analyse     As String
Dim str_ENG_Analyse     As String
Dim strFoodGroup        As String
Dim strFoodGroupJP      As String
Dim strFoodGroupEN      As String
Dim strSubFoodGroup     As String
Dim strSubFoodGroupJP   As String
Dim strSubFoodGroupEN   As String
Dim strSub_Category     As String
Dim strSub_CategoryJP   As String
Dim strSub_CategoryEN   As String
Dim strMajor_Category   As String
Dim strMajor_CategoryJP As String
Dim strMajor_CategoryEN As String
Dim strMediumCategory   As String
Dim strMediumCategoryJP As String
Dim strMediumCategoryEN As String
Dim strMinor_Category   As String
Dim strMinor_CategoryJP As String
Dim strMinor_CategoryEN As String
Dim strDetailCategory   As String
Dim strDetailCategoryJP As String
Dim strDetailCategoryEN As String
Dim FoodGrouNum()       As String
Dim FoodGroupJP()       As String
Dim FoodGroupEN()       As String
Dim Sub_FoodGroup_JP()  As String
Dim Sub_FoodGroup_EN()  As String
Dim Sub_Group_JP_Row()  As String
Dim Sub_Group_EN_Row()  As String
Dim Sub_Category_JPN()  As String
Dim Sub_Category_ENG()  As String
Dim SubCategory_RowJ()  As String
Dim SubCategory_RowE()  As String
Dim Major_CategoryJP()  As String
Dim Major_CategoryEN()  As String
Dim Major_CategoryLT()  As String
Dim Major_JPN_RowNum()  As String
Dim Major_ENG_RowNum()  As String
Dim Major_Temp_Array()  As String
Dim MediumCategoryJP()  As String
Dim MediumCategoryEN()  As String
Dim Med_JP_RowNumber()  As Long
Dim Med_EN_RowNumber()  As Long
Dim Med_Category_JPN()  As String
Dim Med_Category_ENG()  As String
Dim MediumCategoryAr()  As String
Dim Minor_CategoryJP()  As String
Dim Minor_CategoryEN()  As String
Dim Min_JP_RowNumber()  As Long
Dim Min_EN_RowNumber()  As Long
Dim Min_Category_JPN()  As String
Dim Min_Category_ENG()  As String
Dim Minor_CategoryAr()  As String
Dim DetailCategoryJP()  As String
Dim DetailCategoryEN()  As String
Const Ptn_FoodGroupNum  As String = "^([0-9]|[0-9]{2})$"
Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
Const Ptn_JapaneseOnly  As String = "^[^A-Za-z0-9\*]+(\([^A-Za-z0-9]+\))?$"
Const Ptn_Upper_Lower   As String = "[A-Za-z\s:\-,]+" '"[A-Za-z,\s]+"
Const Ptn_Upper_Only    As String = "[A-Z]+"
Const Ptn_Lower_Only    As String = "^[a-z]+$"
Const Ptn_AngleStart    As String = "^[\<<]"
Const Ptn_Angle_JPN     As String = "[<<].+[>>]"
Const Ptn_Angle_ENG     As String = "[<<].+[>>]"
Const Ptn_RoundStart    As String = "^[\((][^0-9]+"
Const Ptn_Round_JPN     As String = "[\((][^A-Za-z0-9]+[\))]"
Const Ptn_Round_ENG     As String = "[\((][A-Za-z\s]+[\))]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_JPN    As String = "\[[^A-Za-z0-9]+\]"
Const Ptn_Square_ENG    As String = "\[[A-Za-z\s:\-,]+(\]|])"
Dim RegExp_MedCategory      As Object
Dim RegExp_Foods_Group      As Object
Dim RegExp_Jpn_Eng_Mix      As Object
Dim RegExp_JapaneseOnly     As Object
Dim RegExp_English_Only     As Object
Dim RegExp_Upper_Lower      As Object
Dim RegExp_Upper_Only       As Object
Dim RegExp_Lower_Only       As Object
Dim RegExp_Angle_Bracket    As Object
Dim RegExp_Angle_Bracket_JP As Object
Dim RegExp_Angle_Bracket_EN As Object
Dim RegExp_Round_Bracket    As Object
Dim RegExp_Round_Bracket_JP As Object
Dim RegExp_Round_Bracket_EN As Object
Dim RegExp_SquareBracket    As Object
Dim RegExp_SquareBracket_JP As Object
Dim RegExp_SquareBracket_EN As Object
Dim RegExp_5_Number     As Object
Dim RegExp_Japanese     As Object
Dim RegExp_Alphabet     As Object
Dim myMatches           As Object
Dim myMatch             As Object
Const Ptn_5_Number      As String = "^[0-9]{5}$"
Const Ptn_Japanese      As String = "[^A-Za-z0-9]{2,}"
Const Ptn_Alphabet      As String = "^[A-Za-z]{2,}"
Dim CEREALS             As Long
Dim POTATOES            As Long
Dim SUGARS              As Long
Dim PULSES              As Long
Dim NUTS                As Long
Dim VEGETABLES          As Long
Dim FRUITS              As Long
Dim MUSHROOMS           As Long
Dim ALGAE               As Long
Dim FISHES              As Long
Dim MEATS               As Long
Dim EGGS                As Long
Dim MILK                As Long
Dim OIL                 As Long
Dim CONFECTIONERIES     As Long
Dim BEVERAGES           As Long
Dim SEASONINGS          As Long
Dim PREPARED            As Long
Dim RegExpJapaneseName  As Object
Const Ptn_JapaneseName  As String = "^([0-9%]{1,3})?[^A-Za-z0-9]+"
Set RegExpJapaneseName = CreateObject("VBScript.RegExp")
With RegExpJapaneseName
    .Pattern = Ptn_JapaneseName
    .IgnoreCase = True
    .Global = True
End With
Dim RegExp_EnglishName  As Object
Dim Ptn_EnglishName   As String
Ptn_EnglishName = "^[A-Za-z0-9%\.,\-'" & ChrW(&HC0) & "-" & ChrW(&HFF) & "]+$"
Set RegExp_EnglishName = CreateObject("VBScript.RegExp")
With RegExp_EnglishName
    .Pattern = Ptn_EnglishName
    .IgnoreCase = True
    .Global = True
End With
Set RegExp_5_Number = CreateObject("VBScript.RegExp")
Set RegExp_MedCategory = CreateObject("VBScript.RegExp")
Set RegExp_Foods_Group = CreateObject("VBScript.RegExp")
Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
Set RegExp_JapaneseOnly = CreateObject("VBScript.RegExp")
Set RegExp_English_Only = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Lower = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Only = CreateObject("VBScript.RegExp")
Set RegExp_Lower_Only = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_Japanese = CreateObject("VBScript.RegExp")
Set RegExp_Alphabet = CreateObject("VBScript.RegExp")
    With RegExp_5_Number
        .Pattern = Ptn_5_Number
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket
        .Pattern = Ptn_AngleStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket_JP
        .Pattern = Ptn_Angle_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket_EN
        .Pattern = Ptn_Angle_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket
        .Pattern = Ptn_RoundStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket_JP
        .Pattern = Ptn_Round_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket_EN
        .Pattern = Ptn_Round_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket_JP
        .Pattern = Ptn_Square_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket_EN
        .Pattern = Ptn_Square_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Japanese
        .Pattern = Ptn_Japanese
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Alphabet
        .Pattern = Ptn_Alphabet
        .IgnoreCase = False
        .Global = True
    End With
    With RegExp_JapaneseOnly
        .Pattern = Ptn_JapaneseOnly
        .IgnoreCase = True
        .Global = True
    End With
Set mySht1 = Worksheets("Sheet1")
Set mySht2 = Worksheets("Sheet2")
Set myRng = mySht1.UsedRange
tmpAr = myRng
Major_CategoryAr = MajorCategoryAr(mySht2)
ReDim Preserve Major_CategoryAr(UBound(Major_CategoryAr), UBound(Major_CategoryAr, 2) + 2)
m = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If Major_CategoryAr(n, 0) = tmpAr(i, 1) Then
            Major_CategoryAr(n, 11) = i
        End If
        If Major_CategoryAr(n, 1) = tmpAr(i, 1) Then
            Major_CategoryAr(n, 12) = i
        End If
    Next n
Next i
m = 0
n = 0
p = 0
q = 0
No_Cancel_Ar = NoCancelArray(mySht1)
For r = LBound(No_Cancel_Ar) To UBound(No_Cancel_Ar)
For i = No_Cancel_Ar(r, 0) To No_Cancel_Ar(r, 1)
        str_JPN_Analyse = ""
        str_ENG_Analyse = ""
        On Error Resume Next
        For k = 1 To 5
            str_JPN_Analyse = str_JPN_Analyse & tmpAr(i, k)
            str_ENG_Analyse = str_ENG_Analyse & " " & tmpAr(i + 1, k)
            str_ENG_Analyse = Replace(str_ENG_Analyse, "  ", " ")
        Next k
        For k = 1 To 3
            str_ENG_Analyse = str_ENG_Analyse & " " & tmpAr(i + 2, k)
            str_ENG_Analyse = Replace(str_ENG_Analyse, "  ", " ")
        Next k
        On Error GoTo 0
        str_ENG_Analyse = Trim(str_ENG_Analyse)
        Select Case True
        Case RegExp_Angle_Bracket.Test(str_JPN_Analyse) And _
             RegExp_Angle_Bracket.Test(str_ENG_Analyse)
            ReDim Preserve Sub_FoodGroup_JP(p)
            ReDim Preserve Sub_FoodGroup_EN(p)
            ReDim Preserve Sub_Group_JP_Row(p)
            ReDim Preserve Sub_Group_EN_Row(p)
            Set myMatches = RegExp_Angle_Bracket_JP.Execute(str_JPN_Analyse)
            Sub_FoodGroup_JP(p) = myMatches.Item(0).Value
            Sub_Group_JP_Row(p) = i
            Set myMatches = RegExp_Angle_Bracket_EN.Execute(str_ENG_Analyse)
            Sub_FoodGroup_EN(p) = myMatches.Item(0).Value
            Sub_FoodGroup_EN(p) = Replace(Sub_FoodGroup_EN(p), "<", "<")
            Sub_FoodGroup_EN(p) = Replace(Sub_FoodGroup_EN(p), ">", ">")
            Sub_Group_EN_Row(p) = i + 1
            p = p + 1
        Case RegExp_Round_Bracket_JP.Test(str_JPN_Analyse) And _
             RegExp_Round_Bracket_EN.Test(str_ENG_Analyse)
            ReDim Preserve Sub_Category_JPN(n)
            ReDim Preserve Sub_Category_ENG(n)
            ReDim Preserve SubCategory_RowJ(n)
            ReDim Preserve SubCategory_RowE(n)
            Set myMatches = RegExp_Round_Bracket_JP.Execute(str_JPN_Analyse)
            Sub_Category_JPN(n) = myMatches.Item(0).Value
            Sub_Category_JPN(n) = Replace(Sub_Category_JPN(n), "(", "(")
            Sub_Category_JPN(n) = Replace(Sub_Category_JPN(n), ")", ")")
            SubCategory_RowJ(n) = i
            Set myMatches = RegExp_Round_Bracket_EN.Execute(str_ENG_Analyse)
            Sub_Category_ENG(n) = myMatches.Item(0).Value
            Sub_Category_ENG(n) = Replace(Sub_Category_ENG(n), "(", "(")
            Sub_Category_ENG(n) = Replace(Sub_Category_ENG(n), ")", ")")
            SubCategory_RowE(n) = i + 1
            n = n + 1
        Case RegExp_SquareBracket_JP.Test(str_JPN_Analyse) And _
             RegExp_SquareBracket_EN.Test(str_ENG_Analyse)
            ReDim Preserve MediumCategoryJP(m)
            ReDim Preserve Med_JP_RowNumber(m)
            ReDim Preserve MediumCategoryEN(m)
            ReDim Preserve Med_EN_RowNumber(m)
            Set myMatches = RegExp_SquareBracket_JP.Execute(str_JPN_Analyse)
            MediumCategoryJP(m) = myMatches.Item(0).Value
            Med_JP_RowNumber(m) = i
            Set myMatches = RegExp_SquareBracket_EN.Execute(str_ENG_Analyse)
            MediumCategoryEN(m) = myMatches.Item(0).Value
            Med_EN_RowNumber(m) = i + 1
            m = m + 1
        Case RegExp_Japanese.Test(str_JPN_Analyse) And _
             RegExp_Alphabet.Test(str_ENG_Analyse)
            ReDim Preserve Major_CategoryJP(q)
            ReDim Preserve Major_CategoryEN(q)
            ReDim Preserve Major_JPN_RowNum(q)
            ReDim Preserve Major_ENG_RowNum(q)
            Set myMatches = RegExp_Japanese.Execute(str_JPN_Analyse)
            Major_CategoryJP(q) = myMatches.Item(0).Value
            Major_JPN_RowNum(q) = i
            Set myMatches = RegExp_Alphabet.Execute(str_ENG_Analyse)
            Major_CategoryEN(q) = myMatches.Item(0).Value
            Major_ENG_RowNum(q) = i + 1
            q = q + 1
        Case Else
        End Select
Next i
Next r
ReDim Major_Temp_Array(UBound(Major_CategoryJP), 5)
For q = LBound(Major_Temp_Array) To UBound(Major_Temp_Array) - 1
    Major_Temp_Array(q, 0) = Major_CategoryJP(q)
    Major_Temp_Array(q, 1) = Major_JPN_RowNum(q)
    Major_Temp_Array(q, 2) = Major_JPN_RowNum(q + 1)
    Major_Temp_Array(q, 3) = Major_CategoryEN(q)
    Major_Temp_Array(q, 4) = Major_ENG_RowNum(q)
    Major_Temp_Array(q, 5) = Major_ENG_RowNum(q + 1)
Next q
    Major_Temp_Array(q, 0) = Major_CategoryJP(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 1) = Major_JPN_RowNum(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 2) = 32757
    Major_Temp_Array(q, 3) = Major_CategoryEN(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 4) = Major_ENG_RowNum(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 5) = 32757
ReDim MediumCategoryAr(UBound(MediumCategoryJP), 5)
For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr) - 1
    MediumCategoryAr(m, 0) = MediumCategoryJP(m)
    MediumCategoryAr(m, 1) = Med_JP_RowNumber(m)
    MediumCategoryAr(m, 2) = Med_JP_RowNumber(m + 1)
    MediumCategoryAr(m, 3) = MediumCategoryEN(m)
    MediumCategoryAr(m, 4) = Med_EN_RowNumber(m)
    MediumCategoryAr(m, 5) = Med_EN_RowNumber(m + 1)
Next m
    MediumCategoryAr(m, 0) = MediumCategoryJP(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 1) = Med_JP_RowNumber(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 2) = 26271
    MediumCategoryAr(m, 3) = MediumCategoryEN(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 4) = Med_EN_RowNumber(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 5) = 26271
For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr)
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If CLng(MediumCategoryAr(m, 1)) > CLng(Major_CategoryAr(n, 11)) And _
           CLng(MediumCategoryAr(m, 1)) < CLng(Major_CategoryAr(n, 12)) And _
           CLng(Major_CategoryAr(n, 12)) < CLng(MediumCategoryAr(m, 2)) Then
            MediumCategoryAr(m, 2) = Major_CategoryAr(n, 12)
        End If
        If CLng(MediumCategoryAr(m, 4)) > CLng(Major_CategoryAr(n, 11)) And _
           CLng(MediumCategoryAr(m, 4)) < CLng(Major_CategoryAr(n, 12)) And _
           CLng(Major_CategoryAr(n, 12)) < CLng(MediumCategoryAr(m, 5)) Then
            MediumCategoryAr(m, 5) = Major_CategoryAr(n, 12)
            Exit For
        End If
    Next n
Next m
p = 0
For i = LBound(tmpAr) To UBound(tmpAr) - 1
    strMinor_CategoryJP = ""
    strMinor_CategoryEN = ""
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If RegExp_JapaneseOnly.Test(tmpAr(i, 1)) And _
       Not RegExp_5_Number.Test(tmpAr(i, 1)) And _
       Not RegExp_Round_Bracket.Test(tmpAr(i, 1)) And _
       Not RegExp_SquareBracket.Test(tmpAr(i, 1)) And _
       Not RegExp_Angle_Bracket.Test(tmpAr(i, 1)) And _
           InStr(tmpAr(i, 1), Major_CategoryAr(n, 8)) <> 0 And _
           InStr(tmpAr(i + 1, 1), Major_CategoryAr(n, 9)) <> 0 And _
           i >= Major_CategoryAr(n, 11) And _
           i <= Major_CategoryAr(n, 12) Then
            ReDim Preserve Minor_CategoryJP(p)
            ReDim Preserve Minor_CategoryEN(p)
            ReDim Preserve Min_JP_RowNumber(p)
            ReDim Preserve Min_EN_RowNumber(p)
            For k = 1 To 2
                strMinor_CategoryJP = strMinor_CategoryJP & tmpAr(i, k)
                strMinor_CategoryEN = strMinor_CategoryEN & " " & tmpAr(i + 1, k)
                strMinor_CategoryEN = Trim(strMinor_CategoryEN)
            Next k
            Set myMatches = RegExp_JapaneseOnly.Execute(strMinor_CategoryJP)
            Minor_CategoryJP(p) = strMinor_CategoryJP
            Min_JP_RowNumber(p) = i
            Set myMatches = RegExp_Upper_Lower.Execute(strMinor_CategoryEN)
            Minor_CategoryEN(p) = strMinor_CategoryEN
            Min_EN_RowNumber(p) = i + 1
            p = p + 1
        Else
        End If
    Next n
Next i
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    strFoodGroup = ""
    strSubFoodGroup = ""
    strSub_Category = ""
    strMajor_Category = ""
    strMinor_Category = ""
    strDetailCategory = ""
    If RegExp_5_Number.Test(tmpAr(i, 1)) And tmpAr(i, 2) <> "(欠番)" Then
        ReDim Preserve ItemNamAr(j)
        ReDim Preserve ItemNumAr(j)
        ReDim Preserve FoodGrouNum(j)
        ReDim Preserve FoodGroupJP(j)
        ReDim Preserve FoodGroupEN(j)
        ReDim Preserve Sub_FoodGroup_JP(j)
        ReDim Preserve Sub_FoodGroup_EN(j)
        ReDim Preserve Sub_Category_JPN(j)
        ReDim Preserve Sub_Category_ENG(j)
        ReDim Preserve Major_CategoryJP(j)
        ReDim Preserve Major_CategoryEN(j)
        ReDim Preserve Major_CategoryLT(j)
        ReDim Preserve Med_Category_JPN(j)
        ReDim Preserve Med_Category_ENG(j)
        ReDim Preserve Minor_CategoryJP(j)
        ReDim Preserve Minor_CategoryEN(j)
        ReDim Preserve DetailCategoryJP(j)
        ReDim Preserve DetailCategoryEN(j)
        ReDim Preserve JapaneseName(j)
        ReDim Preserve English_Name(j)
        ItemNamAr(j) = tmpAr(i, 1)
        ItemNumAr(j) = i
        Select Case True
            Case Left(tmpAr(i, 1), 2) = "01"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "穀類"
                FoodGroupEN(j) = "CEREALS"
                CEREALS = CEREALS + 1
            Case Left(tmpAr(i, 1), 2) = "02"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "いも及びでん粉類"
                FoodGroupEN(j) = "POTATOES AND STARCHES"
                POTATOES = POTATOES + 1
            Case Left(tmpAr(i, 1), 2) = "03"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "砂糖及び甘味類"
                FoodGroupEN(j) = "SUGARS"
                SUGARS = SUGARS + 1
            Case Left(tmpAr(i, 1), 2) = "04"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "豆類"
                FoodGroupEN(j) = "PULSES"
                PULSES = PULSES + 1
            Case Left(tmpAr(i, 1), 2) = "05"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "種実類"
                FoodGroupEN(j) = "NUTS AND SEEDS"
                NUTS = NUTS + 1
            Case Left(tmpAr(i, 1), 2) = "06"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "野菜類"
                FoodGroupEN(j) = "VEGETABLES"
                VEGETABLES = VEGETABLES + 1
            Case Left(tmpAr(i, 1), 2) = "07"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "果実類"
                FoodGroupEN(j) = "FRUITS"
                FRUITS = FRUITS + 1
            Case Left(tmpAr(i, 1), 2) = "08"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "きのこ類"
                FoodGroupEN(j) = "MUSHROOMS"
                MUSHROOMS = MUSHROOMS + 1
            Case Left(tmpAr(i, 1), 2) = "09"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "藻類"
                FoodGroupEN(j) = "ALGAE"
                ALGAE = ALGAE + 1
            Case Left(tmpAr(i, 1), 2) = "10"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "魚介類"
                FoodGroupEN(j) = "FISHES AND SHELLFISHES"
                FISHES = FISHES + 1
            Case Left(tmpAr(i, 1), 2) = "11"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "肉類"
                FoodGroupEN(j) = "MEATS"
                MEATS = MEATS + 1
            Case Left(tmpAr(i, 1), 2) = "12"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "卵類"
                FoodGroupEN(j) = "EGGS"
                EGGS = EGGS + 1
            Case Left(tmpAr(i, 1), 2) = "13"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "乳類"
                FoodGroupEN(j) = "MILKS"
                MILK = MILK + 1
            Case Left(tmpAr(i, 1), 2) = "14"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "油脂類"
                FoodGroupEN(j) = "FATS AND OILS"
                OIL = OIL + 1
            Case Left(tmpAr(i, 1), 2) = "15"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "菓子類"
                FoodGroupEN(j) = "CONFECTIONERIES"
                CONFECTIONERIES = CONFECTIONERIES + 1
            Case Left(tmpAr(i, 1), 2) = "16"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "し好飲料類"
                FoodGroupEN(j) = "BEVERAGES"
                BEVERAGES = BEVERAGES + 1
            Case Left(tmpAr(i, 1), 2) = "17"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "調味料及び香辛料類"
                FoodGroupEN(j) = "SEASONINGS AND SPICES"
                SEASONINGS = SEASONINGS + 1
            Case Left(tmpAr(i, 1), 2) = "18"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "調理加工食品類"
                FoodGroupEN(j) = "PREPARED FOODS"
                PREPARED = PREPARED + 1
            Case Else
        End Select
        If RegExpJapaneseName.Test(tmpAr(i, 2)) Then
            Set myMatches = RegExpJapaneseName.Execute(tmpAr(i, 2))
            JapaneseName(j) = myMatches.Item(0).Value
        End If
        For t = 1 To 6
            If RegExp_EnglishName.Test(tmpAr(i + 1, t)) Then
                English_Name(j) = English_Name(j) & " " & tmpAr(i + 1, t)
                English_Name(j) = Trim(English_Name(j))
            Else
                Exit For
            End If
        Next t
        For k = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
            If CLng(tmpAr(i, 1)) >= CLng(Major_CategoryAr(k, 0)) _
           And CLng(tmpAr(i, 1)) <= CLng(Major_CategoryAr(k, 1)) Then
                Sub_FoodGroup_JP(j) = Major_CategoryAr(k, 4)
                Sub_FoodGroup_EN(j) = Major_CategoryAr(k, 5)
                Sub_Category_JPN(j) = Major_CategoryAr(k, 6)
                Sub_Category_ENG(j) = Major_CategoryAr(k, 7)
                Major_CategoryJP(j) = Major_CategoryAr(k, 8)
                Major_CategoryEN(j) = Major_CategoryAr(k, 9)
                Major_CategoryLT(j) = Major_CategoryAr(k, 10)
                For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr)
                    If i >= CLng(MediumCategoryAr(m, 1)) And _
                       i <= CLng(MediumCategoryAr(m, 2)) Then
                        Med_Category_JPN(j) = MediumCategoryAr(m, 0)
                    End If
                    If i >= CLng(MediumCategoryAr(m, 4)) And _
                       i <= CLng(MediumCategoryAr(m, 5)) Then
                        Med_Category_ENG(j) = MediumCategoryAr(m, 3)
                    End If
                Next m
            Else
            End If
        Next k
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim ItemArray(UBound(ItemNamAr), 14)
For i = LBound(ItemArray) To UBound(ItemArray)
    ItemArray(i, 0) = ItemNamAr(i)
    ItemArray(i, 1) = FoodGrouNum(i)
    ItemArray(i, 2) = FoodGroupJP(i)
    ItemArray(i, 3) = FoodGroupEN(i)
    ItemArray(i, 4) = Sub_FoodGroup_JP(i)
    ItemArray(i, 5) = Sub_FoodGroup_EN(i)
    ItemArray(i, 6) = Sub_Category_JPN(i)
    ItemArray(i, 7) = Sub_Category_ENG(i)
    ItemArray(i, 8) = Major_CategoryJP(i)
    ItemArray(i, 9) = Major_CategoryEN(i)
    ItemArray(i, 10) = Major_CategoryLT(i)
    ItemArray(i, 11) = Med_Category_JPN(i)
    ItemArray(i, 12) = Med_Category_ENG(i)
    ItemArray(i, 13) = JapaneseName(i)
    ItemArray(i, 14) = English_Name(i)
Next i
Set mySht3 = Worksheets.Add
With mySht3
    .Name = "Result"
    .Range("A1").Value = "ItemNumber"
    .Range("B1").Value = "食品群番号"
    .Range("C1").Value = "食品群"
    .Range("D1").Value = "FoodGroup"
    .Range("E1").Value = "副分類"
    .Range("F1").Value = "SubFoodGroup"
    .Range("G1").Value = "区分"
    .Range("H1").Value = "SubCategory"
    .Range("I1").Value = "大分類"
    .Range("J1").Value = "MajorCategory"
    .Range("K1").Value = "AcademicName"
    .Range("L1").Value = "中分類"
    .Range("M1").Value = "MediumCategory"
    .Range("N1").Value = "小分類・細分"
    .Range("O1").Value = "MinorCategory_Details"
    .Range("A2:O1879").Value = ItemArray
End With
End Sub

Function NoCancelArray(ByRef Sh As Worksheet) As Variant
Dim mySht           As Worksheet
Dim myRng           As Range
Dim tmpAr           As Variant
Dim i               As Long
Dim j               As Long
Dim RegExpCancel    As Object
Dim RegExp_Exit     As Object
Const StrCancel     As String = "^(1\)|residues)$"
Dim CancelItem()    As String
Dim CancelRow1()    As String
Dim CancelRow2()    As String
Dim myCancelAr()    As String
Dim Cancel_Array()  As String
Set RegExpCancel = CreateObject("VBScript.RegExp")
With RegExpCancel
    .Pattern = StrCancel
    .IgnoreCase = True
    .Global = True
End With
Set mySht = Sh
Set myRng = mySht.UsedRange
tmpAr = myRng
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If RegExpCancel.Test(tmpAr(i, 1)) Then
        ReDim Preserve CancelItem(j)
        ReDim Preserve CancelRow1(i)
        CancelItem(j) = tmpAr(i, 1)
        CancelRow1(j) = i
        j = j + 1
    End If
Next i
ReDim myCancelAr(UBound(CancelItem), 1)
For j = LBound(myCancelAr) To UBound(myCancelAr)
    myCancelAr(j, 0) = CancelItem(j)
    myCancelAr(j, 1) = CancelRow1(j)
Next j
ReDim Preserve myCancelAr(UBound(myCancelAr), 2)
j = 0
For i = LBound(myCancelAr) To UBound(myCancelAr) - 1
    If myCancelAr(i, 0) = "1)" Then
        If myCancelAr(i + 2, 0) = "residues" Then
            myCancelAr(i, 2) = myCancelAr(i + 2, 1)
        Else
            myCancelAr(i, 2) = myCancelAr(i + 1, 1)
        End If
        j = j + 1
    End If
Next i
Erase CancelRow1
j = 0
ReDim CancelRow1(j)
ReDim CancelRow2(j)
CancelRow1(j) = myCancelAr(j, 1)
CancelRow2(j) = myCancelAr(j, 2)
For i = LBound(myCancelAr) + 1 To UBound(myCancelAr)
    If myCancelAr(i, 0) = "1)" And _
       myCancelAr(i - 1, 0) <> "1)" Then
        j = j + 1
        ReDim Preserve CancelRow1(j)
        ReDim Preserve CancelRow2(j)
        CancelRow1(j) = myCancelAr(i, 1)
        CancelRow2(j) = myCancelAr(i, 2)
    End If
Next i
ReDim Cancel_Array(UBound(CancelRow1), 1)
j = 0
For j = LBound(Cancel_Array) To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow1(j)
    Cancel_Array(j, 1) = CancelRow2(j)
Next j
j = 0
Cancel_Array(j, 0) = 1
Cancel_Array(j, 1) = CancelRow1(j)
For j = LBound(Cancel_Array) + 1 To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow2(j - 1)
    Cancel_Array(j, 1) = CancelRow1(j)
Next j
NoCancelArray = Cancel_Array
End Function

References:
CSV file of the ‘Standard Tables of Food Composition in Japan 2010′
Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010′, Part 2

日本食品標準成分表2010の食品番号をカテゴリー分類する その1

日本食品標準成分表2010の食品番号を分類するの記事で食品番号を分類する記事を掲載しましたが,不十分な分類しか出来ておりませんでした.今回は既に日本語の完成した分類を見つけましたので,それを元に英語もつけて分類しました.参考にしたのは以下のファイルです.

資源調査分科会報告「日本食品標準成分表2010」について

新しいブックを用意します.”1299012_1.pdf”から”1299012_18.pdf”までのPDFの全テキストをSheet1にオプションでペーストします.その際,下の行方向に行の間隔を空けずに貼り付けます.テキストファイルウィザードで最初のカラムのデータ形式を『文字列』に変更します.原材料的食品のもととなる生物の学名でダウンロードしたPDFの全テキストを選択し,Sheet2にオプションでペーストします.テキストファイルウィザードが開くので,1/3では元のデータ形式で『カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ』を選択します.テキストファイルウィザード2/3では『連続した区切り文字は1文字とみなす』のチェックを外して次に進みます.テキストファイルウィザード3/3では最初の列のデータ形式を『文字列』に変更して完了をクリックします.このEXCELブックに”Sample.xlsm”と名前を付けて保存します.

“Sample.xlsm”ブックを開き,Alt+F11キーを押下してVBEを起動します.挿入メニューから標準モジュールを選択し,下記のコードを貼り付けます.Separate_by_Parentプロシージャを実行すると”Result”という名前のシートが出来ます.

Option Explicit
Function MajorCategoryAr(ByRef Sh As Worksheet) As String()
Dim mySht               As Worksheet
Dim myRng               As Range
Dim tmpAr               As Variant
Dim StartEnd            As Variant
Dim strFoodGroup        As String
Dim strFoodGroupJP      As String
Dim strFoodGroupEN      As String
Dim strSubFoodGroup     As String
Dim strSubFoodGroupJP   As String
Dim strSubFoodGroupEN   As String
Dim strSub_Category     As String
Dim strSub_CategoryJP   As String
Dim strSub_CategoryEN   As String
Dim strMajor_Category   As String
Dim StartNumber()       As String
Dim Exit_Number()       As String
Dim FoodGroupJP()       As String
Dim FoodGroupEN()       As String
Dim Sub_FoodGroup_JP()  As String
Dim Sub_FoodGroup_EN()  As String
Dim Sub_Category_JPN()  As String
Dim Sub_Category_ENG()  As String
Dim Major_CategoryJP()  As String
Dim Major_CategoryEN()  As String
Dim Major_CategoryLT()  As String
Dim myArray()           As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim n As Long
Dim RegExp_3_Digit_Num  As Object
Dim RegExp_Item_Number  As Object
Dim RegExp_SentakuHanni As Object
Dim RegExp_SubCategory1 As Object
Dim RegExp_SubCategory2 As Object
Dim RegExp_MedCategory  As Object
Dim RegExp_Foods_Group  As Object
Dim RegExp_Jpn_Eng_Mix  As Object
Dim RegExp_JapaneseOnly As Object
Dim RegExp_Upper_Lower  As Object
Dim RegExp_Upper_Only   As Object
Dim RegExp_Lower_Only   As Object
Dim RegExp_RoundBracket As Object
Dim RegExp_SquareBracket    As Object
Dim RegExp_AngleBracket As Object
Dim myMatches           As Object
Dim myMatch             As Object
Const Ptn_3_Digit_Num   As String = "[0-9]{3}$"
Const Ptn_Item_Number   As String = "^[0-9]{5}$"
Const Ptn_SentakuHanni  As String = "(,|~)"
Const Ptn_SubCategory1  As String = "^((|\().()|\))$"
Const Ptn_SubCategory2  As String = "^(<|>)$"
Const Ptn_MedCategory   As String = "^\[.\]$"
Const Ptn_FoodGroupNum  As String = "^([0-9]|[0-9]{2})$"
Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
Const Ptn_JapaneseOnly  As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?$"
Const Ptn_Upper_Lower   As String = "[A-Z][a-z]+"
Const Ptn_Upper_Only    As String = "[A-Z]+"
Const Ptn_Lower_Only    As String = "^[a-z]+$"
Const Ptn_RoundStart    As String = "^[\((]"
Const Ptn_Round_Exit    As String = "[\((][^A-Za-z0-9]+[\))]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_Exit   As String = "\[[^A-Za-z0-9]+\]"
Const Ptn_AngleStart    As String = "^[\<<]"
Const Ptn_Angle_Exit    As String = "[\<<][^A-Za-z0-9]+[\>>]"
Set mySht = Sh
Set myRng = mySht.UsedRange
tmpAr = myRng
Set RegExp_3_Digit_Num = CreateObject("VBScript.RegExp")
Set RegExp_Item_Number = CreateObject("VBScript.RegExp")
Set RegExp_SentakuHanni = CreateObject("VBScript.RegExp")
Set RegExp_SubCategory1 = CreateObject("VBScript.RegExp")
Set RegExp_SubCategory2 = CreateObject("VBScript.RegExp")
Set RegExp_MedCategory = CreateObject("VBScript.RegExp")
Set RegExp_Foods_Group = CreateObject("VBScript.RegExp")
Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
Set RegExp_JapaneseOnly = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Lower = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Only = CreateObject("VBScript.RegExp")
Set RegExp_Lower_Only = CreateObject("VBScript.RegExp")
Set RegExp_RoundBracket = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket = CreateObject("VBScript.RegExp")
Set RegExp_AngleBracket = CreateObject("VBScript.RegExp")
With RegExp_3_Digit_Num
    .Pattern = "[0-9]{3}$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Item_Number
    .Pattern = "^[0-9]{5}$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SentakuHanni
    .Pattern = "(,|~)"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SubCategory1
    .Pattern = "^((|\().()|\))$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_SubCategory2
    .Pattern = "^(<|>)$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_MedCategory
    .Pattern = "^\[.\]$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Foods_Group
    .Pattern = "^([0-9]|[0-9]{2})$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Jpn_Eng_Mix
    .Pattern = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_JapaneseOnly
    .Pattern = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?$"
    .IgnoreCase = True
    .Global = True
End With
With RegExp_Upper_Lower
    .Pattern = "[A-Z][a-z]+"
    .IgnoreCase = False
    .Global = True
End With
With RegExp_Upper_Only
    .Pattern = "[A-Z]+"
    .IgnoreCase = False
    .Global = True
End With
With RegExp_Lower_Only
    .Pattern = "^[a-z]+$"
    .IgnoreCase = False
    .Global = True
End With
j = 0
For i = LBound(tmpAr) + 1 To UBound(tmpAr)
    With RegExp_RoundBracket
        .Pattern = Ptn_RoundStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_AngleBracket
        .Pattern = Ptn_AngleStart
        .IgnoreCase = True
        .Global = True
    End With
    strFoodGroup = ""
    strSubFoodGroup = ""
    strSub_Category = ""
    strMajor_Category = ""
    ReDim Preserve StartNumber(j)
    ReDim Preserve Exit_Number(j)
    ReDim Preserve FoodGroupJP(j)
    ReDim Preserve FoodGroupEN(j)
    ReDim Preserve Sub_FoodGroup_JP(j)
    ReDim Preserve Sub_FoodGroup_EN(j)
    ReDim Preserve Sub_Category_JPN(j)
    ReDim Preserve Sub_Category_ENG(j)
    ReDim Preserve Major_CategoryJP(j)
    ReDim Preserve Major_CategoryEN(j)
    ReDim Preserve Major_CategoryLT(j)
    If RegExp_3_Digit_Num.Test(tmpAr(i, 1)) Then
        Select Case True
        Case RegExp_Item_Number.Test(tmpAr(i, 1))
            StartNumber(j) = tmpAr(i, 1)
            Exit_Number(j) = tmpAr(i, 1)
        Case RegExp_SentakuHanni.Test(tmpAr(i, 1))
            StartEnd = StartExit(tmpAr(i, 1))
            StartNumber(j) = StartEnd(0)
            Exit_Number(j) = StartEnd(1)
            Erase StartEnd
        End Select
        FoodGroupJP(j) = strFoodGroupJP
        FoodGroupEN(j) = strFoodGroupEN
        If (i >= 19 And i <= 27) _
        Or (i >= 370 And i <= 596) _
        Or (i >= 599 And i <= 626) _
        Or (i >= 635 And i <= 639) _
        Or (i >= 646 And i <= 668) _
        Then
            Sub_FoodGroup_JP(j) = strSubFoodGroupJP
            Sub_FoodGroup_EN(j) = strSubFoodGroupEN
        End If
        If tmpAr(i, 2) = "" Then
            Sub_Category_JPN(j) = strSub_CategoryJP
            Sub_Category_ENG(j) = strSub_CategoryEN
        End If
        For k = 2 To 8
            strMajor_Category = strMajor_Category & " " & tmpAr(i, k)
        Next k
        strMajor_Category = Trim(strMajor_Category)
        On Error Resume Next
        For k = 1 To 8
            If RegExp_Lower_Only.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_SubCategory1.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_SubCategory2.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_Foods_Group.Test(tmpAr(i + 1, 1)) _
            And Not RegExp_3_Digit_Num.Test(tmpAr(i + 1, 1)) _
            Then
                strMajor_Category = strMajor_Category & " " & tmpAr(i + 1, k)
            End If
        Next k
        On Error GoTo 0
        strMajor_Category = Trim(strMajor_Category)
        If RegExp_Jpn_Eng_Mix.Test(strMajor_Category) Then
            StartEnd = Separate_Jpn_Eng(strMajor_Category)
            Major_CategoryJP(j) = StartEnd(0)
            Erase StartEnd
            Set myMatches = RegExp_Upper_Lower.Execute(strMajor_Category)
            Major_CategoryEN(j) = Mid(strMajor_Category, _
                                    myMatches.Item(0).firstindex + 1, _
                                    myMatches.Item(myMatches.Count - 1).firstindex _
                                  - myMatches.Item(0).firstindex - 1)
            Set myMatch = myMatches.Item(myMatches.Count - 1)
            Major_CategoryLT(j) = Mid(strMajor_Category, myMatch.firstindex + 1)
        Else
        End If
    Else
        Select Case True
        Case RegExp_Foods_Group.Test(tmpAr(i, 1))
            For k = 2 To 8
                strFoodGroup = strFoodGroup & " " & tmpAr(i, k)
            Next k
            strFoodGroup = Trim(strFoodGroup)
            Select Case True
            Case RegExp_Jpn_Eng_Mix.Test(strFoodGroup)
                Set myMatches = RegExp_Jpn_Eng_Mix.Execute(strFoodGroup)
                Set myMatch = myMatches.Item(0)
                strFoodGroupJP = Left(strFoodGroup, myMatches.Item(0).Length - 1)
                strFoodGroupEN = Mid(strFoodGroup, myMatches.Item(0).Length)
            Case RegExp_JapaneseOnly.Test(strFoodGroup)
                Set myMatches = RegExp_JapaneseOnly.Execute(strFoodGroup)
                Set myMatch = myMatches.Item(0)
                strFoodGroupJP = Left(strFoodGroup, myMatches.Item(0).Length - 1)
                strFoodGroupEN = Mid(strFoodGroup, myMatches.Item(0).Length)
            Case Else
            End Select
        Case RegExp_AngleBracket.Test(tmpAr(i, 1))
            For k = 1 To 8
                strSubFoodGroup = strSubFoodGroup & " " & tmpAr(i, k)
            Next k
            strSubFoodGroup = Trim(strSubFoodGroup)
            With RegExp_AngleBracket
                .Pattern = Ptn_Angle_Exit
                .IgnoreCase = True
                .Global = True
            End With
            Set myMatches = RegExp_AngleBracket.Execute(strSubFoodGroup)
            strSubFoodGroupJP = myMatches.Item(0).Value
            strSubFoodGroupEN = Mid(strSubFoodGroup, myMatches.Item(0).Length + 2)
            strSubFoodGroupEN = Replace(strSubFoodGroupEN, "<", "<")
            strSubFoodGroupEN = Replace(strSubFoodGroupEN, ">", ">")
        Case RegExp_RoundBracket.Test(tmpAr(i, 1))
            For k = 1 To 8
                strSub_Category = strSub_Category & " " & tmpAr(i, k)
            Next k
            strSub_Category = Trim(strSub_Category)
            With RegExp_RoundBracket
                .Pattern = Ptn_Round_Exit
                .IgnoreCase = True
                .Global = True
            End With
            Set myMatches = RegExp_RoundBracket.Execute(strSub_Category)
            On Error Resume Next
            strSub_CategoryJP = myMatches.Item(0).Value
            strSub_CategoryJP = Replace(strSub_CategoryJP, "(", "(")
            strSub_CategoryJP = Replace(strSub_CategoryJP, ")", ")")
            strSub_CategoryEN = Mid(strSub_Category, myMatches.Item(0).Length + 2)
            strSub_CategoryEN = Replace(strSub_CategoryEN, "(", "(")
            strSub_CategoryEN = Replace(strSub_CategoryEN, ")", ")")
            On Error GoTo 0
        Case Else
        End Select
        j = j - 1
    End If
    j = j + 1
Next i
ReDim myArray(UBound(StartNumber), 10)
For n = LBound(myArray) To UBound(myArray)
    myArray(n, 0) = StartNumber(n)
    myArray(n, 1) = Exit_Number(n)
    myArray(n, 2) = FoodGroupJP(n)
    myArray(n, 3) = FoodGroupEN(n)
    myArray(n, 4) = Sub_FoodGroup_JP(n)
    myArray(n, 5) = Sub_FoodGroup_EN(n)
    myArray(n, 6) = Sub_Category_JPN(n)
    myArray(n, 7) = Sub_Category_ENG(n)
    myArray(n, 8) = Major_CategoryJP(n)
    myArray(n, 9) = Major_CategoryEN(n)
    myArray(n, 10) = Major_CategoryLT(n)
Next n
MajorCategoryAr = myArray
End Function

Function StartExit(ByVal InputStr As String) As String()
    Dim str     As String
    Dim Ar()    As String
    str = InputStr
    ReDim Ar(1)
    Ar(0) = Left(str, 5)
    Ar(1) = Left(str, 2) & Right(str, 3)
    StartExit = Ar
End Function

Function Separate_Jpn_Eng(ByVal InputStr As String) As String()
    Dim str                 As String
    Dim Ar()                As String
    Dim RegExp_Jpn_Eng_Mix  As Object
    Dim myMatches           As Object
    Dim myMatch             As Object
    Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
    str = InputStr
    ReDim Ar(1)
    Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
    With RegExp_Jpn_Eng_Mix
        .Pattern = Ptn_Jpn_Eng_Mix
        .IgnoreCase = True
        .Global = True
    End With
    Set myMatches = RegExp_Jpn_Eng_Mix.Execute(str)
    For Each myMatch In myMatches
        If myMatches.Count > 0 Then
            Ar(0) = Left(str, myMatches.Item(0).Length - 1)
            Ar(1) = Mid(str, myMatches.Item(0).Length)
        End If
    Next myMatch
    Separate_Jpn_Eng = Ar
End Function

Sub Separate_by_Parent()
Dim mySht1              As Worksheet
Dim mySht2              As Worksheet
Dim mySht3              As Worksheet
Dim myRng               As Range
Dim tmpAr               As Variant
Dim Major_CategoryAr    As Variant
Dim No_Cancel_Ar        As Variant
Dim ItemNamAr()         As String
Dim ItemNumAr()         As String
Dim JapaneseName()      As String
Dim English_Name()      As String
Dim ItemArray()         As String
Dim Residual_JPN()      As String
Dim Residual_ENG()      As String
Dim Residual_Row()      As String
Dim i                   As Long
Dim j                   As Long
Dim k                   As Long
Dim m                   As Long
Dim n                   As Long
Dim p                   As Long
Dim q                   As Long
Dim r                   As Long
Dim s                   As Long
Dim t                   As Long
Dim str_JPN_Analyse     As String
Dim str_ENG_Analyse     As String
Dim strFoodGroup        As String
Dim strFoodGroupJP      As String
Dim strFoodGroupEN      As String
Dim strSubFoodGroup     As String
Dim strSubFoodGroupJP   As String
Dim strSubFoodGroupEN   As String
Dim strSub_Category     As String
Dim strSub_CategoryJP   As String
Dim strSub_CategoryEN   As String
Dim strMajor_Category   As String
Dim strMajor_CategoryJP As String
Dim strMajor_CategoryEN As String
Dim strMediumCategory   As String
Dim strMediumCategoryJP As String
Dim strMediumCategoryEN As String
Dim strMinor_Category   As String
Dim strMinor_CategoryJP As String
Dim strMinor_CategoryEN As String
Dim strDetailCategory   As String
Dim strDetailCategoryJP As String
Dim strDetailCategoryEN As String
Dim FoodGrouNum()       As String
Dim FoodGroupJP()       As String
Dim FoodGroupEN()       As String
Dim Sub_FoodGroup_JP()  As String
Dim Sub_FoodGroup_EN()  As String
Dim Sub_Group_JP_Row()  As String
Dim Sub_Group_EN_Row()  As String
Dim Sub_Category_JPN()  As String
Dim Sub_Category_ENG()  As String
Dim SubCategory_RowJ()  As String
Dim SubCategory_RowE()  As String
Dim Major_CategoryJP()  As String
Dim Major_CategoryEN()  As String
Dim Major_CategoryLT()  As String
Dim Major_JPN_RowNum()  As String
Dim Major_ENG_RowNum()  As String
Dim Major_Temp_Array()  As String
Dim MediumCategoryJP()  As String
Dim MediumCategoryEN()  As String
Dim Med_JP_RowNumber()  As Long
Dim Med_EN_RowNumber()  As Long
Dim Med_Category_JPN()  As String
Dim Med_Category_ENG()  As String
Dim MediumCategoryAr()  As String
Dim Minor_CategoryJP()  As String
Dim Minor_CategoryEN()  As String
Dim Min_JP_RowNumber()  As Long
Dim Min_EN_RowNumber()  As Long
Dim Min_Category_JPN()  As String
Dim Min_Category_ENG()  As String
Dim Minor_CategoryAr()  As String
Dim DetailCategoryJP()  As String
Dim DetailCategoryEN()  As String
Const Ptn_FoodGroupNum  As String = "^([0-9]|[0-9]{2})$"
Const Ptn_Jpn_Eng_Mix   As String = "^[^A-Za-z0-9]+(\([^A-Za-z0-9]+\))?([A-Za-z])"
Const Ptn_JapaneseOnly  As String = "^[^A-Za-z0-9\*]+(\([^A-Za-z0-9]+\))?$"
Const Ptn_Upper_Lower   As String = "[A-Za-z\s:\-,]+" '"[A-Za-z,\s]+"
Const Ptn_Upper_Only    As String = "[A-Z]+"
Const Ptn_Lower_Only    As String = "^[a-z]+$"
Const Ptn_AngleStart    As String = "^[\<<]"
Const Ptn_Angle_JPN     As String = "[<<].+[>>]"
Const Ptn_Angle_ENG     As String = "[<<].+[>>]"
Const Ptn_RoundStart    As String = "^[\((][^0-9]+"
Const Ptn_Round_JPN     As String = "[\((][^A-Za-z0-9]+[\))]"
Const Ptn_Round_ENG     As String = "[\((][A-Za-z\s]+[\))]"
Const Ptn_SquareStart   As String = "^\["
Const Ptn_Square_JPN    As String = "\[[^A-Za-z0-9]+\]"
Const Ptn_Square_ENG    As String = "\[[A-Za-z\s:\-,]+(\]|])"
Dim RegExp_MedCategory      As Object
Dim RegExp_Foods_Group      As Object
Dim RegExp_Jpn_Eng_Mix      As Object
Dim RegExp_JapaneseOnly     As Object
Dim RegExp_English_Only     As Object
Dim RegExp_Upper_Lower      As Object
Dim RegExp_Upper_Only       As Object
Dim RegExp_Lower_Only       As Object
Dim RegExp_Angle_Bracket    As Object
Dim RegExp_Angle_Bracket_JP As Object
Dim RegExp_Angle_Bracket_EN As Object
Dim RegExp_Round_Bracket    As Object
Dim RegExp_Round_Bracket_JP As Object
Dim RegExp_Round_Bracket_EN As Object
Dim RegExp_SquareBracket    As Object
Dim RegExp_SquareBracket_JP As Object
Dim RegExp_SquareBracket_EN As Object
Dim RegExp_5_Number     As Object
Dim RegExp_Japanese     As Object
Dim RegExp_Alphabet     As Object
Dim myMatches           As Object
Dim myMatch             As Object
Const Ptn_5_Number      As String = "^[0-9]{5}$"
Const Ptn_Japanese      As String = "[^A-Za-z0-9]{2,}"
Const Ptn_Alphabet      As String = "^[A-Za-z]{2,}"
Dim CEREALS             As Long
Dim POTATOES            As Long
Dim SUGARS              As Long
Dim PULSES              As Long
Dim NUTS                As Long
Dim VEGETABLES          As Long
Dim FRUITS              As Long
Dim MUSHROOMS           As Long
Dim ALGAE               As Long
Dim FISHES              As Long
Dim MEATS               As Long
Dim EGGS                As Long
Dim MILK                As Long
Dim OIL                 As Long
Dim CONFECTIONERIES     As Long
Dim BEVERAGES           As Long
Dim SEASONINGS          As Long
Dim PREPARED            As Long
Dim RegExpJapaneseName  As Object
Const Ptn_JapaneseName  As String = "^([0-9%]{1,3})?[^A-Za-z0-9]+"
Set RegExpJapaneseName = CreateObject("VBScript.RegExp")
With RegExpJapaneseName
    .Pattern = Ptn_JapaneseName
    .IgnoreCase = True
    .Global = True
End With
Dim RegExp_EnglishName  As Object
Dim Ptn_EnglishName   As String
Ptn_EnglishName = "^[A-Za-z0-9%\.,\-'" & ChrW(&HC0) & "-" & ChrW(&HFF) & "]+$"
Set RegExp_EnglishName = CreateObject("VBScript.RegExp")
With RegExp_EnglishName
    .Pattern = Ptn_EnglishName
    .IgnoreCase = True
    .Global = True
End With
Set RegExp_5_Number = CreateObject("VBScript.RegExp")
Set RegExp_MedCategory = CreateObject("VBScript.RegExp")
Set RegExp_Foods_Group = CreateObject("VBScript.RegExp")
Set RegExp_Jpn_Eng_Mix = CreateObject("VBScript.RegExp")
Set RegExp_JapaneseOnly = CreateObject("VBScript.RegExp")
Set RegExp_English_Only = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Lower = CreateObject("VBScript.RegExp")
Set RegExp_Upper_Only = CreateObject("VBScript.RegExp")
Set RegExp_Lower_Only = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_Angle_Bracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_Round_Bracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket_JP = CreateObject("VBScript.RegExp")
Set RegExp_SquareBracket_EN = CreateObject("VBScript.RegExp")
Set RegExp_Japanese = CreateObject("VBScript.RegExp")
Set RegExp_Alphabet = CreateObject("VBScript.RegExp")
    With RegExp_5_Number
        .Pattern = Ptn_5_Number
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket
        .Pattern = Ptn_AngleStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket_JP
        .Pattern = Ptn_Angle_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Angle_Bracket_EN
        .Pattern = Ptn_Angle_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket
        .Pattern = Ptn_RoundStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket_JP
        .Pattern = Ptn_Round_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Round_Bracket_EN
        .Pattern = Ptn_Round_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket
        .Pattern = Ptn_SquareStart
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket_JP
        .Pattern = Ptn_Square_JPN
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_SquareBracket_EN
        .Pattern = Ptn_Square_ENG
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Japanese
        .Pattern = Ptn_Japanese
        .IgnoreCase = True
        .Global = True
    End With
    With RegExp_Alphabet
        .Pattern = Ptn_Alphabet
        .IgnoreCase = False
        .Global = True
    End With
    With RegExp_JapaneseOnly
        .Pattern = Ptn_JapaneseOnly
        .IgnoreCase = True
        .Global = True
    End With
Set mySht1 = Worksheets("Sheet1")
Set mySht2 = Worksheets("Sheet2")
Set myRng = mySht1.UsedRange
tmpAr = myRng
Major_CategoryAr = MajorCategoryAr(mySht2)
ReDim Preserve Major_CategoryAr(UBound(Major_CategoryAr), UBound(Major_CategoryAr, 2) + 2)
m = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If Major_CategoryAr(n, 0) = tmpAr(i, 1) Then
            Major_CategoryAr(n, 11) = i
        End If
        If Major_CategoryAr(n, 1) = tmpAr(i, 1) Then
            Major_CategoryAr(n, 12) = i
        End If
    Next n
Next i
m = 0
n = 0
p = 0
q = 0
No_Cancel_Ar = NoCancelArray(mySht1)
For r = LBound(No_Cancel_Ar) To UBound(No_Cancel_Ar)
For i = No_Cancel_Ar(r, 0) To No_Cancel_Ar(r, 1)
        str_JPN_Analyse = ""
        str_ENG_Analyse = ""
        On Error Resume Next
        For k = 1 To 5
            str_JPN_Analyse = str_JPN_Analyse & tmpAr(i, k)
            str_ENG_Analyse = str_ENG_Analyse & " " & tmpAr(i + 1, k)
            str_ENG_Analyse = Replace(str_ENG_Analyse, "  ", " ")
        Next k
        For k = 1 To 3
            str_ENG_Analyse = str_ENG_Analyse & " " & tmpAr(i + 2, k)
            str_ENG_Analyse = Replace(str_ENG_Analyse, "  ", " ")
        Next k
        On Error GoTo 0
        str_ENG_Analyse = Trim(str_ENG_Analyse)
        Select Case True
        Case RegExp_Angle_Bracket.Test(str_JPN_Analyse) And _
             RegExp_Angle_Bracket.Test(str_ENG_Analyse)
            ReDim Preserve Sub_FoodGroup_JP(p)
            ReDim Preserve Sub_FoodGroup_EN(p)
            ReDim Preserve Sub_Group_JP_Row(p)
            ReDim Preserve Sub_Group_EN_Row(p)
            Set myMatches = RegExp_Angle_Bracket_JP.Execute(str_JPN_Analyse)
            Sub_FoodGroup_JP(p) = myMatches.Item(0).Value
            Sub_Group_JP_Row(p) = i
            Set myMatches = RegExp_Angle_Bracket_EN.Execute(str_ENG_Analyse)
            Sub_FoodGroup_EN(p) = myMatches.Item(0).Value
            Sub_FoodGroup_EN(p) = Replace(Sub_FoodGroup_EN(p), "<", "<")
            Sub_FoodGroup_EN(p) = Replace(Sub_FoodGroup_EN(p), ">", ">")
            Sub_Group_EN_Row(p) = i + 1
            p = p + 1
        Case RegExp_Round_Bracket_JP.Test(str_JPN_Analyse) And _
             RegExp_Round_Bracket_EN.Test(str_ENG_Analyse)
            ReDim Preserve Sub_Category_JPN(n)
            ReDim Preserve Sub_Category_ENG(n)
            ReDim Preserve SubCategory_RowJ(n)
            ReDim Preserve SubCategory_RowE(n)
            Set myMatches = RegExp_Round_Bracket_JP.Execute(str_JPN_Analyse)
            Sub_Category_JPN(n) = myMatches.Item(0).Value
            Sub_Category_JPN(n) = Replace(Sub_Category_JPN(n), "(", "(")
            Sub_Category_JPN(n) = Replace(Sub_Category_JPN(n), ")", ")")
            SubCategory_RowJ(n) = i
            Set myMatches = RegExp_Round_Bracket_EN.Execute(str_ENG_Analyse)
            Sub_Category_ENG(n) = myMatches.Item(0).Value
            Sub_Category_ENG(n) = Replace(Sub_Category_ENG(n), "(", "(")
            Sub_Category_ENG(n) = Replace(Sub_Category_ENG(n), ")", ")")
            SubCategory_RowE(n) = i + 1
            n = n + 1
        Case RegExp_SquareBracket_JP.Test(str_JPN_Analyse) And _
             RegExp_SquareBracket_EN.Test(str_ENG_Analyse)
            ReDim Preserve MediumCategoryJP(m)
            ReDim Preserve Med_JP_RowNumber(m)
            ReDim Preserve MediumCategoryEN(m)
            ReDim Preserve Med_EN_RowNumber(m)
            Set myMatches = RegExp_SquareBracket_JP.Execute(str_JPN_Analyse)
            MediumCategoryJP(m) = myMatches.Item(0).Value
            Med_JP_RowNumber(m) = i
            Set myMatches = RegExp_SquareBracket_EN.Execute(str_ENG_Analyse)
            MediumCategoryEN(m) = myMatches.Item(0).Value
            Med_EN_RowNumber(m) = i + 1
            m = m + 1
        Case RegExp_Japanese.Test(str_JPN_Analyse) And _
             RegExp_Alphabet.Test(str_ENG_Analyse)
            ReDim Preserve Major_CategoryJP(q)
            ReDim Preserve Major_CategoryEN(q)
            ReDim Preserve Major_JPN_RowNum(q)
            ReDim Preserve Major_ENG_RowNum(q)
            Set myMatches = RegExp_Japanese.Execute(str_JPN_Analyse)
            Major_CategoryJP(q) = myMatches.Item(0).Value
            Major_JPN_RowNum(q) = i
            Set myMatches = RegExp_Alphabet.Execute(str_ENG_Analyse)
            Major_CategoryEN(q) = myMatches.Item(0).Value
            Major_ENG_RowNum(q) = i + 1
            q = q + 1
        Case Else
        End Select
Next i
Next r
ReDim Major_Temp_Array(UBound(Major_CategoryJP), 5)
For q = LBound(Major_Temp_Array) To UBound(Major_Temp_Array) - 1
    Major_Temp_Array(q, 0) = Major_CategoryJP(q)
    Major_Temp_Array(q, 1) = Major_JPN_RowNum(q)
    Major_Temp_Array(q, 2) = Major_JPN_RowNum(q + 1)
    Major_Temp_Array(q, 3) = Major_CategoryEN(q)
    Major_Temp_Array(q, 4) = Major_ENG_RowNum(q)
    Major_Temp_Array(q, 5) = Major_ENG_RowNum(q + 1)
Next q
    Major_Temp_Array(q, 0) = Major_CategoryJP(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 1) = Major_JPN_RowNum(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 2) = 32757
    Major_Temp_Array(q, 3) = Major_CategoryEN(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 4) = Major_ENG_RowNum(UBound(Major_Temp_Array))
    Major_Temp_Array(q, 5) = 32757
ReDim MediumCategoryAr(UBound(MediumCategoryJP), 5)
For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr) - 1
    MediumCategoryAr(m, 0) = MediumCategoryJP(m)
    MediumCategoryAr(m, 1) = Med_JP_RowNumber(m)
    MediumCategoryAr(m, 2) = Med_JP_RowNumber(m + 1)
    MediumCategoryAr(m, 3) = MediumCategoryEN(m)
    MediumCategoryAr(m, 4) = Med_EN_RowNumber(m)
    MediumCategoryAr(m, 5) = Med_EN_RowNumber(m + 1)
Next m
    MediumCategoryAr(m, 0) = MediumCategoryJP(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 1) = Med_JP_RowNumber(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 2) = 26271
    MediumCategoryAr(m, 3) = MediumCategoryEN(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 4) = Med_EN_RowNumber(UBound(MediumCategoryAr))
    MediumCategoryAr(m, 5) = 26271
For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr)
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If CLng(MediumCategoryAr(m, 1)) > CLng(Major_CategoryAr(n, 11)) And _
           CLng(MediumCategoryAr(m, 1)) < CLng(Major_CategoryAr(n, 12)) And _
           CLng(Major_CategoryAr(n, 12)) < CLng(MediumCategoryAr(m, 2)) Then
            MediumCategoryAr(m, 2) = Major_CategoryAr(n, 12)
        End If
        If CLng(MediumCategoryAr(m, 4)) > CLng(Major_CategoryAr(n, 11)) And _
           CLng(MediumCategoryAr(m, 4)) < CLng(Major_CategoryAr(n, 12)) And _
           CLng(Major_CategoryAr(n, 12)) < CLng(MediumCategoryAr(m, 5)) Then
            MediumCategoryAr(m, 5) = Major_CategoryAr(n, 12)
            Exit For
        End If
    Next n
Next m
p = 0
For i = LBound(tmpAr) To UBound(tmpAr) - 1
    strMinor_CategoryJP = ""
    strMinor_CategoryEN = ""
    For n = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
        If RegExp_JapaneseOnly.Test(tmpAr(i, 1)) And _
       Not RegExp_5_Number.Test(tmpAr(i, 1)) And _
       Not RegExp_Round_Bracket.Test(tmpAr(i, 1)) And _
       Not RegExp_SquareBracket.Test(tmpAr(i, 1)) And _
       Not RegExp_Angle_Bracket.Test(tmpAr(i, 1)) And _
           InStr(tmpAr(i, 1), Major_CategoryAr(n, 8)) <> 0 And _
           InStr(tmpAr(i + 1, 1), Major_CategoryAr(n, 9)) <> 0 And _
           i >= Major_CategoryAr(n, 11) And _
           i <= Major_CategoryAr(n, 12) Then
            ReDim Preserve Minor_CategoryJP(p)
            ReDim Preserve Minor_CategoryEN(p)
            ReDim Preserve Min_JP_RowNumber(p)
            ReDim Preserve Min_EN_RowNumber(p)
            For k = 1 To 2
                strMinor_CategoryJP = strMinor_CategoryJP & tmpAr(i, k)
                strMinor_CategoryEN = strMinor_CategoryEN & " " & tmpAr(i + 1, k)
                strMinor_CategoryEN = Trim(strMinor_CategoryEN)
            Next k
            Set myMatches = RegExp_JapaneseOnly.Execute(strMinor_CategoryJP)
            Minor_CategoryJP(p) = strMinor_CategoryJP
            Min_JP_RowNumber(p) = i
            Set myMatches = RegExp_Upper_Lower.Execute(strMinor_CategoryEN)
            Minor_CategoryEN(p) = strMinor_CategoryEN
            Min_EN_RowNumber(p) = i + 1
            p = p + 1
        Else
        End If
    Next n
Next i
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    strFoodGroup = ""
    strSubFoodGroup = ""
    strSub_Category = ""
    strMajor_Category = ""
    strMinor_Category = ""
    strDetailCategory = ""
    If RegExp_5_Number.Test(tmpAr(i, 1)) And tmpAr(i, 2) <> "(欠番)" Then
        ReDim Preserve ItemNamAr(j)
        ReDim Preserve ItemNumAr(j)
        ReDim Preserve FoodGrouNum(j)
        ReDim Preserve FoodGroupJP(j)
        ReDim Preserve FoodGroupEN(j)
        ReDim Preserve Sub_FoodGroup_JP(j)
        ReDim Preserve Sub_FoodGroup_EN(j)
        ReDim Preserve Sub_Category_JPN(j)
        ReDim Preserve Sub_Category_ENG(j)
        ReDim Preserve Major_CategoryJP(j)
        ReDim Preserve Major_CategoryEN(j)
        ReDim Preserve Major_CategoryLT(j)
        ReDim Preserve Med_Category_JPN(j)
        ReDim Preserve Med_Category_ENG(j)
        ReDim Preserve Minor_CategoryJP(j)
        ReDim Preserve Minor_CategoryEN(j)
        ReDim Preserve DetailCategoryJP(j)
        ReDim Preserve DetailCategoryEN(j)
        ReDim Preserve JapaneseName(j)
        ReDim Preserve English_Name(j)
        ItemNamAr(j) = tmpAr(i, 1)
        ItemNumAr(j) = i
        Select Case True
            Case Left(tmpAr(i, 1), 2) = "01"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "穀類"
                FoodGroupEN(j) = "CEREALS"
                CEREALS = CEREALS + 1
            Case Left(tmpAr(i, 1), 2) = "02"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "いも及びでん粉類"
                FoodGroupEN(j) = "POTATOES AND STARCHES"
                POTATOES = POTATOES + 1
            Case Left(tmpAr(i, 1), 2) = "03"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "砂糖及び甘味類"
                FoodGroupEN(j) = "SUGARS"
                SUGARS = SUGARS + 1
            Case Left(tmpAr(i, 1), 2) = "04"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "豆類"
                FoodGroupEN(j) = "PULSES"
                PULSES = PULSES + 1
            Case Left(tmpAr(i, 1), 2) = "05"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "種実類"
                FoodGroupEN(j) = "NUTS AND SEEDS"
                NUTS = NUTS + 1
            Case Left(tmpAr(i, 1), 2) = "06"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "野菜類"
                FoodGroupEN(j) = "VEGETABLES"
                VEGETABLES = VEGETABLES + 1
            Case Left(tmpAr(i, 1), 2) = "07"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "果実類"
                FoodGroupEN(j) = "FRUITS"
                FRUITS = FRUITS + 1
            Case Left(tmpAr(i, 1), 2) = "08"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "きのこ類"
                FoodGroupEN(j) = "MUSHROOMS"
                MUSHROOMS = MUSHROOMS + 1
            Case Left(tmpAr(i, 1), 2) = "09"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "藻類"
                FoodGroupEN(j) = "ALGAE"
                ALGAE = ALGAE + 1
            Case Left(tmpAr(i, 1), 2) = "10"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "魚介類"
                FoodGroupEN(j) = "FISHES AND SHELLFISHES"
                FISHES = FISHES + 1
            Case Left(tmpAr(i, 1), 2) = "11"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "肉類"
                FoodGroupEN(j) = "MEATS"
                MEATS = MEATS + 1
            Case Left(tmpAr(i, 1), 2) = "12"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "卵類"
                FoodGroupEN(j) = "EGGS"
                EGGS = EGGS + 1
            Case Left(tmpAr(i, 1), 2) = "13"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "乳類"
                FoodGroupEN(j) = "MILKS"
                MILK = MILK + 1
            Case Left(tmpAr(i, 1), 2) = "14"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "油脂類"
                FoodGroupEN(j) = "FATS AND OILS"
                OIL = OIL + 1
            Case Left(tmpAr(i, 1), 2) = "15"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "菓子類"
                FoodGroupEN(j) = "CONFECTIONERIES"
                CONFECTIONERIES = CONFECTIONERIES + 1
            Case Left(tmpAr(i, 1), 2) = "16"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "し好飲料類"
                FoodGroupEN(j) = "BEVERAGES"
                BEVERAGES = BEVERAGES + 1
            Case Left(tmpAr(i, 1), 2) = "17"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "調味料及び香辛料類"
                FoodGroupEN(j) = "SEASONINGS AND SPICES"
                SEASONINGS = SEASONINGS + 1
            Case Left(tmpAr(i, 1), 2) = "18"
                FoodGrouNum(j) = Left(tmpAr(i, 1), 2)
                FoodGroupJP(j) = "調理加工食品類"
                FoodGroupEN(j) = "PREPARED FOODS"
                PREPARED = PREPARED + 1
            Case Else
        End Select
        If RegExpJapaneseName.Test(tmpAr(i, 2)) Then
            Set myMatches = RegExpJapaneseName.Execute(tmpAr(i, 2))
            JapaneseName(j) = myMatches.Item(0).Value
        End If
        For t = 1 To 6
            If RegExp_EnglishName.Test(tmpAr(i + 1, t)) Then
                English_Name(j) = English_Name(j) & " " & tmpAr(i + 1, t)
                English_Name(j) = Trim(English_Name(j))
            Else
                Exit For
            End If
        Next t
        For k = LBound(Major_CategoryAr) To UBound(Major_CategoryAr)
            If CLng(tmpAr(i, 1)) >= CLng(Major_CategoryAr(k, 0)) _
           And CLng(tmpAr(i, 1)) <= CLng(Major_CategoryAr(k, 1)) Then
                Sub_FoodGroup_JP(j) = Major_CategoryAr(k, 4)
                Sub_FoodGroup_EN(j) = Major_CategoryAr(k, 5)
                Sub_Category_JPN(j) = Major_CategoryAr(k, 6)
                Sub_Category_ENG(j) = Major_CategoryAr(k, 7)
                Major_CategoryJP(j) = Major_CategoryAr(k, 8)
                Major_CategoryEN(j) = Major_CategoryAr(k, 9)
                Major_CategoryLT(j) = Major_CategoryAr(k, 10)
                For m = LBound(MediumCategoryAr) To UBound(MediumCategoryAr)
                    If i >= CLng(MediumCategoryAr(m, 1)) And _
                       i <= CLng(MediumCategoryAr(m, 2)) Then
                        Med_Category_JPN(j) = MediumCategoryAr(m, 0)
                    End If
                    If i >= CLng(MediumCategoryAr(m, 4)) And _
                       i <= CLng(MediumCategoryAr(m, 5)) Then
                        Med_Category_ENG(j) = MediumCategoryAr(m, 3)
                    End If
                Next m
            Else
            End If
        Next k
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim ItemArray(UBound(ItemNamAr), 14)
For i = LBound(ItemArray) To UBound(ItemArray)
    ItemArray(i, 0) = ItemNamAr(i)
    ItemArray(i, 1) = FoodGrouNum(i)
    ItemArray(i, 2) = FoodGroupJP(i)
    ItemArray(i, 3) = FoodGroupEN(i)
    ItemArray(i, 4) = Sub_FoodGroup_JP(i)
    ItemArray(i, 5) = Sub_FoodGroup_EN(i)
    ItemArray(i, 6) = Sub_Category_JPN(i)
    ItemArray(i, 7) = Sub_Category_ENG(i)
    ItemArray(i, 8) = Major_CategoryJP(i)
    ItemArray(i, 9) = Major_CategoryEN(i)
    ItemArray(i, 10) = Major_CategoryLT(i)
    ItemArray(i, 11) = Med_Category_JPN(i)
    ItemArray(i, 12) = Med_Category_ENG(i)
    ItemArray(i, 13) = JapaneseName(i)
    ItemArray(i, 14) = English_Name(i)
Next i
Set mySht3 = Worksheets.Add
With mySht3
    .Name = "Result"
    .Range("A1").Value = "ItemNumber"
    .Range("B1").Value = "食品群番号"
    .Range("C1").Value = "食品群"
    .Range("D1").Value = "FoodGroup"
    .Range("E1").Value = "副分類"
    .Range("F1").Value = "SubFoodGroup"
    .Range("G1").Value = "区分"
    .Range("H1").Value = "SubCategory"
    .Range("I1").Value = "大分類"
    .Range("J1").Value = "MajorCategory"
    .Range("K1").Value = "AcademicName"
    .Range("L1").Value = "中分類"
    .Range("M1").Value = "MediumCategory"
    .Range("N1").Value = "小分類・細分"
    .Range("O1").Value = "MinorCategory_Details"
    .Range("A2:O1879").Value = ItemArray
End With
End Sub

Function NoCancelArray(ByRef Sh As Worksheet) As Variant
Dim mySht           As Worksheet
Dim myRng           As Range
Dim tmpAr           As Variant
Dim i               As Long
Dim j               As Long
Dim RegExpCancel    As Object
Dim RegExp_Exit     As Object
Const StrCancel     As String = "^(1\)|residues)$"
Dim CancelItem()    As String
Dim CancelRow1()    As String
Dim CancelRow2()    As String
Dim myCancelAr()    As String
Dim Cancel_Array()  As String
Set RegExpCancel = CreateObject("VBScript.RegExp")
With RegExpCancel
    .Pattern = StrCancel
    .IgnoreCase = True
    .Global = True
End With
Set mySht = Sh
Set myRng = mySht.UsedRange
tmpAr = myRng
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If RegExpCancel.Test(tmpAr(i, 1)) Then
        ReDim Preserve CancelItem(j)
        ReDim Preserve CancelRow1(i)
        CancelItem(j) = tmpAr(i, 1)
        CancelRow1(j) = i
        j = j + 1
    End If
Next i
ReDim myCancelAr(UBound(CancelItem), 1)
For j = LBound(myCancelAr) To UBound(myCancelAr)
    myCancelAr(j, 0) = CancelItem(j)
    myCancelAr(j, 1) = CancelRow1(j)
Next j
ReDim Preserve myCancelAr(UBound(myCancelAr), 2)
j = 0
For i = LBound(myCancelAr) To UBound(myCancelAr) - 1
    If myCancelAr(i, 0) = "1)" Then
        If myCancelAr(i + 2, 0) = "residues" Then
            myCancelAr(i, 2) = myCancelAr(i + 2, 1)
        Else
            myCancelAr(i, 2) = myCancelAr(i + 1, 1)
        End If
        j = j + 1
    End If
Next i
Erase CancelRow1
j = 0
ReDim CancelRow1(j)
ReDim CancelRow2(j)
CancelRow1(j) = myCancelAr(j, 1)
CancelRow2(j) = myCancelAr(j, 2)
For i = LBound(myCancelAr) + 1 To UBound(myCancelAr)
    If myCancelAr(i, 0) = "1)" And _
       myCancelAr(i - 1, 0) <> "1)" Then
        j = j + 1
        ReDim Preserve CancelRow1(j)
        ReDim Preserve CancelRow2(j)
        CancelRow1(j) = myCancelAr(i, 1)
        CancelRow2(j) = myCancelAr(i, 2)
    End If
Next i
ReDim Cancel_Array(UBound(CancelRow1), 1)
j = 0
For j = LBound(Cancel_Array) To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow1(j)
    Cancel_Array(j, 1) = CancelRow2(j)
Next j
j = 0
Cancel_Array(j, 0) = 1
Cancel_Array(j, 1) = CancelRow1(j)
For j = LBound(Cancel_Array) + 1 To UBound(Cancel_Array)
    Cancel_Array(j, 0) = CancelRow2(j - 1)
    Cancel_Array(j, 1) = CancelRow1(j)
Next j
NoCancelArray = Cancel_Array
End Function

参照:
日本食品標準成分表2010のcsvファイル
日本食品標準成分表2010の食品番号をカテゴリー分類する その2

A Malnutrition-Inflammation Score Is Correlated With Morbidity and Mortality in Maintenance Hemodialysis Patients

I read the paper below, which is referenced from the paper I have read previously. This article describes that Malnutrition-Inflammation Score (MIS) is a predictor of dialysis outcome and an indicator of malnutrition inflammation complex syndrome (MICS). MIS was developed from Dialysis Malnutrition Score (DMS), which was developed from Subjective Global Assessment (SGA).

A Malnutrition-Inflammation Score is correlated with morbidity and mortality in maintenance hemodialysis patients

Kamyar Kalantar-Zadeh, MD, Joel D. Kopple, MD, Gladys Block, PhD, Michael H. Humphreys, MD

Abstract

Malnutrition inflammation complex syndrome (MICS) occurs commonly in maintenance hemodialysis (MHD) patients and may correlate with increased morbidity and mortality. An optimal, comprehensive, quantitative system that assesses MICS could be a useful measure of clinical status and may be a predictor of outcome in MHD patients. We therefore attempted to develop and validate such an instrument, comparing it with conventional measures of nutrition and inflammation, as well as prospective hospitalization and mortality. Using components of the conventional Subjective Global Assessment (SGA), a semiquantitative scale with three severity levels, the Dialysis Malnutrition Score (DMS), a fully quantitative scoring system consisting of 7 SGA components, with total score ranging between 7 (normal) and 35 (severely malnourished), was recently developed. To improve the DMS, we added three new elements to the 7 DMS components: body mass index, serum albumin level, and total iron-binding capacity to represent serum transferrin level. This new comprehensive Malnutrition-Inflammation Score (MIS) has 10 components, each with four levels of severity, from 0 (normal) to 3 (very severe). The sum of all 10 MIS components ranges from 0 to 30, denoting increasing degree of severity. These scores were compared with anthropometric measurements, near-infrared-measured body fat percentage, laboratory measures that included serum C-reactive protein (CRP), and 12-month prospective hospitalization and mortality rates. Eighty-three outpatients (44 men, 39 women; age, 59 ± 15 years) on MHD therapy for at least 3 months (43 ± 33 months) were evaluated at the beginning of this study and followed up for 1 year. The SGA, DMS, and MIS were assessed simultaneously on all patients by a trained physician. Case-mix-adjusted correlation coefficients for the MIS were significant for hospitalization days (r = 0.45; P < 0.001) and frequency of hospitalization (r = 0.46; P < 0.001). Compared with the SGA and DMS, most pertinent correlation coefficients were stronger with the MIS. The MIS, but not the SGA or DMS, correlated significantly with creatinine level, hematocrit, and CRP level. During the 12-month follow-up, 9 patients died and 6 patients left the cohort. The Cox proportional hazard-calculated relative risk for death for each 10-unit increase in the MIS was 10.43 (95% confidence interval, 2.28 to 47.64; P = 0.002). The MIS was superior to its components or different subversions for predicting mortality. The MIS appears to be a comprehensive scoring system with significant associations with prospective hospitalization and mortality, as well as measures of nutrition, inflammation, and anemia in MHD patients. The MIS may be superior to the conventional SGA and the DMS, as well as to individual laboratory values, as a predictor of dialysis outcome and an indicator of MICS.

低栄養炎症スコアは維持透析患者の罹患率と死亡率とに相関する

2012年1月12日に維持透析患者のための簡易栄養スクリーニングツールを掲載しましたが,その参照文献の一つを読んだので訳してみました.MISという栄養評価法はSGAから発展したDMSをさらに発展させたもので,入院頻度,在院日数,入院までの期間及び死亡率と有意に相関するというのが論旨です.日本語訳の瑕疵の責任は私にあります.

低栄養炎症スコアは維持透析患者の罹患率と死亡率とに相関する

Kamyar Kalantar-Zadeh, MD, Joel D. Kopple, MD, Gladys Block, PhD, and Michael H. Humphreys, MD

American Journal of Kidney Diseases, Vol 38, No 6 (December), 2001: pp 1251-1263

Malnutrition inflammation complex syndrome (MICS) は維持透析患者において一般的に起こる合併症であり,罹患率と死亡率の増加に相関すると思われる.最適で総合的で定量的なシステム,MICS を評価するシステムは臨床状態の有用な指標となりうるし,維持透析患者の予後を予見しうるかもしれない.それ故,将来の入院や死亡率などと同様に,従来の栄養と炎症の指標を比較して我々はそのような装置を開発し検証しようとした.従来の Subjective Global Assessment (SGA) の要素を用いて,3段階の半定量的な点数,Dialysis Malnutrition Score (DMS), SGA 要素の7つを含み,総点数が7点(正常)から35点(重症低栄養)の範囲になる完全に定量的な採点システムは最近開発されたものである.DMS を改善するため,我々は3つの新しい要素を7つの DMS の要素に追加した.Body mass index と血清アルブミンと血清トランスフェリンレベルを示す TIBC である.この新しく総合的な Malnutrition-inflammation score (MIS) は10の要素を持ち,それぞれが0(正常)から3(非常に重度)までの4段階の重症度を持つ.MIS の10個の要素の合計点素は0点から30点の範囲であり,点数の増加は重症度の増加を示している.これらの点数を身体測定,近赤外線で測定した体脂肪率,血清CRPを含む採血検査,12ヶ月間の前向き入院及び死亡率と比較した.少なくとも3ヶ月経過した83名の維持透析外来患者(男性44名,女性39名,年齢は59±15歳)が研究の最初に検証され,1年間フォローした.熟練した医師がすべての患者に同時に SGA, DMS, MIS を評価した.症例を混合して調整した相関係数は在院日数と有意 (r = 0.45; P < 0.001) であり,入院頻度とも有意 (r = 0.46, P < 0.001) であった.SGA や DMS と比較して,MIS では最も適切な相関係数はより強かった.MIS では,SGA や DMS ではなく,クレアチニン,ヘマトクリット,CRPレベルと相関した.12ヶ月間の観察期間中,9名の患者が死亡し6名が研究から離脱した.コックス比例ハザードモデルで計算した相対死亡危険度は MIS が10点増加するごとに10.43上昇した(95%信頼区間2.28から47.64; P= 0.002).MIS はその要素や予測死亡率の異なるサブバージョンに優れていた.MIS は透析患者の栄養や炎症や貧血等と同様,将来の入院や死亡率と強く相関する総合的な採点システムだと分かった.MIS は個々の検査値同様,透析の予後予測因子として,また MICS の指標として従来の SGA や DMS よりも優れている可能性がある.

2001 by the National Kidney Foundation, Inc.

INDEX WORDS: Dialysis; malnutrition; inflammation; nutritional assessment; hospitalization; mortality; near infrared; albumin; transferrin; C-reactive protein (CRP).

維持透析を受けている末期腎不全患者には蛋白質エネルギー低栄養と炎症の両者を合併する率が高い.これらの観察は異なる研究班によって繰り返しなされてきているが,低栄養炎症混合症候群 (MICS) なる造語を作り出すに至った.蛋白質エネルギー低栄養をもたらす因子と炎症性サイトカインは,それ自身が食欲不振や筋萎縮,低アルブミン血症,不応性貧血,また恐らく動脈硬化の原因にもなっており,明らかに MICS の原因である.MICS の幾つかの機能は単独でも複数でも,これらの患者においては罹患率や死亡率同様,疾患の程度の強い予測因子である.

多くの低栄養や炎症の検査が臨床的予後と相関するにもかかわらず,これらの値は一般には個々の患者の組み合わせ方法のために臨床状態や予後を検証しない.ごく少数の低栄養や炎症の計測がこれらの臨床状態の全体的な評価を与えるにすぎない.面倒な方法や高度な計算が不要で,実用的で簡単なツールであれば,仮に最適な管理のために定量的方法で末期腎不全患者をリスク層別化できるなら,総合的採点システムがこの目的に有用である可能性がある.  それゆえ我々は,総合的で半定量的だが使いやすい,末期腎不全患者の評価のための採点システムを開発しようとした.この報告はこのようなシステムについて述べ,従来の栄養状態,炎症,入院リスクや死亡率と比較することで維持透析患者におけるシステムの検証について述べる.

方法

患者

サンフランシスコ総合病院での外来慢性透析プログラムは研究期間中に91名の維持透析患者を治療した.選択基準は最低3ヶ月以上維持透析を経過した18才以上の患者だった.3名の患者は基準に合致しなかった.88名の登録患者のうち2名の患者が研究期間中に他の施設に入院し,3名の患者が参加に同意しなかった.それゆえ83名の患者(男性44名女性39名)がこの研究に参加することに同意した.本研究は治験審査委員会で承認され,全ての患者から書面で同意を得た.

従来の主観的包括的評価

栄養状態の主観的包括的評価 (SGA) は腎臓病においても一般的に用いられている通り,病歴と身体所見に基づく半定量的な採点システムである.病歴には5つの要素が含まれる.過去6ヶ月間の体重減少,消化器症状,経口摂取量,運動耐容能,合併症である.それぞれの機能は別々に A, B, C と点数化されており,良好な栄養状態から重度の低栄養のカテゴリまで対応する.身体所見には2つの要素が含まれる.皮下脂肪減少と筋委縮である.浮腫や腹水の出現はSGA原法の身体所見の3番目の要素であるが,透析患者には普通用いない.これら2つの要素は0点から3点に分類され,正常から極めて異常であることを示す.データは主観的に点数化され,患者は3つのSGA点数に分類される.Aは栄養状態良好,Bは軽度か中等度の低栄養,Cは重度の低栄養.透析患者におけるSGA評価方法の詳細は以前刊行された文献の巻末として利用でき,またAmerican Journal of Kidney Disease のウェブサイト上で利用可能である. //www.ajkd.org

Dialysis Malnutrition Score

従来の SGA の要素を用いて最近著者の一人が定量的採点システムである Dialysis Malnutrition Score (DMS) を開発した.それは SGA の7つの要素を含んでいる.体重変化,食事摂取量,消化器症状,運動耐容能,合併症,皮下脂肪,筋萎縮徴候である.腹水と浮腫は除外し,透析治療を何年間受けているか(透析歴)を合併症の要素に追加した.各々の要素は1点(正常)から5点(重度の異常)まで点数化した.そのため7つの要素の合計点素は7点(正常)から35点(重度の低栄養)までとなり,DMS が高いほどより重度の蛋白質エネルギー低栄養であることを示す.異なる患者集団を用いた横断研究によると,DMS は身体測定値と透析患者の栄養状態の検査データとに有意に相関するとの予備報告がある.

Malnutrition Inflammation Score

さらに包括的で定量的な採点システムを作るために7つの DMS の評価基準を改訂し,3つの要素を追加した.Body mass index (BMI) と血清アルブミンと総鉄結合能 (TIBC) である.さらに各要素の重症度を5段階から4段階に減らした.以前の研究で DMS の5段階評価はもはや使われていないことを我々は記述しているからである.そのため,Malnutrition inflammation score (MIS) は10の要素を持ち,それぞれが0(正常)から3(重度の異常)までの4段階の重症度を持つ.10の MIS の要素の合計点数は0(正常)から30(重度の低栄養)までであり,点数が高いほど低栄養と炎症の重症度が高いことを反映している.

Figure 1 に我々の採点用紙を掲載した.栄養歴,身体所見,BMI,検査結果の4つのセクションと10の要素からなる.病歴セクションは5つの要素が SGA 原法から採用された.体重変化は過去6ヶ月間浮腫のない透析後体重の変化と定義した.低い点 (0) は0.5 kg 未満の体重減少または体重増加の際に与えられる.1点は 0.5 kg 以上 1.0 kg 未満の体重減少に与えられる.2点は 1.0 kg 以上かつ体重の 5 % 未満の体重減少を示す.3点は5 % 以上の体重減少を示す.

経口摂取量について.通常固形物(形のあるもの)を食べ,最近摂食量の減少がない場合に経口摂取は0点と採点する.柔らかい固形物を食べている場合は1点と採点し,流動食のみの場合や摂食量が中等度減少している場合は2点と採点し,一日の摂取量が生命維持に不十分な状態が慢性的に続いている場合に3点と採点する.

消化器症状について.患者に食欲があり全く消化器症状がない場合は0点と採点する.軽度の食欲低下や軽度の嘔気がある場合は1点,時に嘔吐したり他の中等度の消化器症状がある場合(腹痛など)は2点,下痢や頻回の嘔吐,重度の食欲不振がある場合は3点と採点する.

運動耐容能について.正常な運動耐容能であるか,以前の耐用能低下から改善している場合は0点と採点する.平地歩行が軽度か時々困難である場合,頻回に疲労感を感じている場合は1点と採点する.自力活動が困難である場合は2点,軽労作が制限されるか寝たきりないし坐位のままの場合は3点である.

SGA 変法 (DMS) にあるように,合併症には透析歴(透析治療年数)が含まれている.時間的要素は低栄養と炎症の程度に影響するからである.そのため合併症は他の医学的疾病がなく患者が透析導入1年未満の場合は0点と採点する.主要な合併症 (MCCs) を除外した軽度の合併症の場合,または透析導入後1年以上4年以下の場合に1点と採点する.MCCs とは III 度や IV 度のうっ血性心不全,重度の冠動脈疾患,臨床的に明らかな後天性免疫不全症候群,中等度から重症の慢性閉塞性肺疾患,転移性悪性腫瘍のことである.MCCs のうち1つを含んでもよいが中等度の合併症か,透析期間が4年を超える場合は2点と採点する.MCCs のうち2つ以上を有する場合は3点と採点する.糖尿病については,以前合併症について言及されていない場合は合併症として数えなかった.その代わり糖尿病患者の予後が不良となりうる合併症については個別に検査した.

身体所見のセクションは2つの要素からなる.身体の4つの部位での皮下脂肪沈着により体脂肪蓄積は評価される.つまり眼下,上腕三頭筋,上腕二頭筋,胸部である.筋萎縮徴候は7つの部位により簡潔に得られる.つまり側頭部,鎖骨,肩甲骨,肋骨(肋間筋),大腿四頭,膝,骨間の筋である.これら2つの要素をそれぞれ0点から3点まで採点し,正常から重度まで表現し,他の項に該当する基準に基づく従来のSGA ガイドラインに応じて割り当てられる.

透析患者の死亡率の予測値であるため,我々は身長で調整した体重の機能を追加した.BMI は透析後体重 (kg) を身長の二乗(m^{2})で除した比で身長で補正した体重を選択した.BMI は0点から3点までの4段階で採点し,それぞれ20以上,18以上19.99以下,16以上17.99以下,16未満に対応する.

MIS の4番目のセクションは2つの検査値からなる.血清アルブミン値はしばしば末期腎不全患者における死亡率の強い予測因子となり,低アルブミン血症は蛋白摂取減少と同様,炎症(急性期反応)を反映している.総鉄結合能は血清トランスフェリン濃度を反映し,炎症や鉄の貯蔵変動で変化はするが,透析患者の栄養状態と有意に相関する.それゆえこれら2つの検査値は MIS の総得点の20%を占める(詳細は Fig 1 を参照のこと).

本研究では熟練した医師が身体測定前にそれぞれの患者を5分から15分で採点した.再現性を検証するために同じ医師に1週間後に1回目の MIS 評価を参照せずに15名の患者を選んで MIS 評価を実施させた.両者の間の相関係数 (r) は 0.91 であり,再現精度は良好と考えた.

身体計測

体重評価と身体計測は透析治療後5分から20分後に迅速に施行した.上腕二頭筋皮下脂肪厚と上腕三頭筋皮下脂肪厚 (TSF) は従来の皮下脂肪キャリパーで測定した.これについては別途説明する.上腕中央周囲径 (MAC) はプラスチックテープで測定した.すべての身体計測は1名の医師が連続して3回迅速に計測し,3回計測した値の平均値を最終結果とした.上腕中央筋周囲径 (MAMC) は以下の式で計算した.

\displaystyle MAMC = MAC-(3.1415 \times TSF)

身長は患者カルテから得た.

近赤外分光方式

体脂肪率と除脂肪体重を評価するのに身体計測と同時に近赤外分光方式 (NIR) を実施した.商品化された NIR センサー (portable Futrex 5000) を用いた.近赤外分光値は Futrex センサーを各患者の非シャント上腕に置いて必要なデータ(性別,体重,身長,体格)を入力後数秒間で測定した.すべての患者の身体活動レベルは同程度と規定している.NIR で測定した体脂肪は維持透析患者において SGA や他の栄養評価と有意に相関することが報告されている.

入院

83名の全透析患者で12ヶ月間のこれらの測定が完了した後,在院日数データが得られた.在院日数とは一泊以上の病院への入院日数と定義した.入院当日は丸一日としたが,退院日は在院日数には数えなかった.それゆえ,在院日数の最小値は1日となった.除外基準は設けなかった.そして様々な疾病による在院日数を数えた.しかし,透析シャント関連の大部分の入院は一泊入院を要しないため,シャント関連の入院は他の合併症,例えば感染症や心血管合併症などを有することになった.研究を開始した時点で数名の患者が入院していたが最初の6ヶ月間は在院日数には数えなかった.1年間のコホート期間の最後にまだ入院していた患者については直前の入院の全期間を数えた.前向き12ヶ月間の追跡調査で9名の患者が死亡し,6名の患者がコホートから離脱し,生存期間の入院指数は12/生存期間(月数)で補正した.

12ヶ月間の前向き在院日数を臨床的予後として評価するため,3つの方法を使用した.年間入院頻度 (H1) は12ヶ月間の前向きコホート期間中の入院回数とし,先に定義したように個々の在院日数の長さは考慮しない.年間在院日数 (H2) は同じ期間中の全在院日数の合計とした.各個人ごとに1年間で,研究開始日からリスクが発生して初回入院に至るまでの日数を評価して生存モデルとした (H3) .併せて個人ごとのリスク期間を研究開始時点から最初の入院日か,打ち切りイベントか,研究開始1周年後の日までの日数と定義した.リスク期間は移植の3日前から切り捨てられた.移植治療のための入院を観察するのを回避するためである.

検査値

尿素除去比を計算するのに用いる透析後の血清尿素窒素を除いて,透析前の検査値は迅速に測定した.その際最後の鉄剤静注から最低でも16日空けた.血清CRPは炎症状態の指標として測定し,免疫比濁法によって測定した (Hitachi 747).CRP の最低感度は 6.9 ng/mL であった.CRP 値が 6.9 ng/mL 以下と報告された患者では,統計解析のため任意の平均値として 3.4 ng/mL を用いた.検査値は自動測定装置で測定した.すべての検査値は Spectra laboratories によって検査した.

透析と疫学手法

最初に83名の患者で横断研究を行い,その後12ヶ月間にわたって前向きコホート研究を行い,予後の連続変数としての入院データおよび二分化転帰としての死亡率を検証した.我々は Pearson の相関係数 r を連続変数間の選択分析として使用した.男性と女性の間の群間比較に Student-t 検定(両側)を使用した.Pearsonの相関係数 r は関連の有意性と強度を定義するのに用いた.Spearman の順位相関もまた SGA や人種,基礎疾患などのノンパラメトリック機能のような変数に用いた.そしてその結果は Pearson の r と比較した.多変量解析を行い,性別や年令,人種,腎疾患などで一部調整した相関係数を得た.

前向きコホート研究における最初の入院と死亡の相対危険度を計算するため,前述したように人口統計学的変数をコントロールとした Cox 比例ハザードモデルを用いてハザード比と95%信頼区間を得た.1.00 を含まない95%信頼区間は統計学的有意と考えられる.Cox 比例ハザードで計算した R2 は(pseudo-R2 としても知られるが)他の多変量相関係数と比較するのに用いられる.Y軸を生存率の対数の負とし,X軸に生存期間の対数をプロットした両対数グラフを描き,線形性の仮定が妥当であることを確立した.各々の多変量モデルは1つの予後変数(従属変数)と5つの予測変数(独立変数),年齢,性別,人種,基礎腎疾患,およびその特定のモデルごとの変数を含んでいる.それゆえ,一般的な Cox 回帰のための多変量モデルは以下の式となる.

\displaystyle\lambda(t)=\lambda_{0}(t)[exp(b_{1}age+b_{2}sex+b_{3}race+b_{4}disease+b_{5}X)]

\lambdaは推定危険度であり,t はイベントか検閲までの時間であり,b1 から b5 まではモデルの項の係数である.X は前述した変数であり,MIS の結果やその要素,他の変数(SGA, DMS, BMI, NIR で測定した体脂肪,Kt/V や患者の検査値)を含む.それゆえ各々の予測変数と転帰(最初の入院や死亡)との間の関連は独立した多変量モデルを用いて研究した.ただし各々のモデルに均一なケースミックス調整を用いて.

統計ソフトウェアの Stata 5.0 を用いて記述統計と多変量統計を施行し,結果は全て2番目の統計ソフト Statistica for Windows 5.1 で検証した.限界基準は平均値±標準偏差で得られた.P 値が 0.05 未満は統計的有意とし,P 値が 0.05 と0.10 の間はわずかに有意とし,P 値が 0.10 より大きい場合は有意でないとした.

結果

Table 1 に臨床データ及び検査値を列挙した.年齢は22才から87才まで(55.8歳±15.3歳),透析歴(慢性透析治療期間)は4ヶ月から12年まで(43ヶ月間±33ヶ月間)だった.理想体重(69.1kg±19.6kg)は透析直後の浮腫のない体重の平均値である.透析間の体重増加は 1.74 kg ± 0.56 kg であった.4名の患者はエリスロポエチンが不要であった.残りの患者はエリスロポエチンの静注投与を受けており,週に3000単位から36000単位まで(7928単位±7730単位)であった.78名の患者が鉄剤 (200mg/月) の投与を持続的に受けており,他の患者は鉄剤を経口的に内服処方されていた.女性は男性より平均で11歳年齢が上であった.皮下脂肪測定,体脂肪率,Kt/V は女性のほうが高く,MAMC,除脂肪体重,血清クレアチニン値は男性のほうが高かった.3つの採点システム (SGA, DMS, MIS) では男女間の差異は有意ではなかった.

Table 2 に3つの栄養採点システムの相関係数および関連する変数を示す.3つの栄養採点システムの中では MIS が入院を予測するのに最も強力であった(調整相関係数は在院日数で 0.45, 入院頻度で 0.46).SGA は皮下脂肪厚,MAC,体脂肪率により強く相関する傾向があった.皮下脂肪計測と体脂肪では DMS と MIS のどちらも近い相関があったが,上腕計測や除脂肪体重,BMI では MIS がより強い相関を示した.ほとんどすべての検査値では MIS が SGA や DMS と比較してより強い相関を示した.血清クレアチニン値とヘマトクリット値は SGA と DMS では有意な相関はなかったが,MIS では有意に相関していた.このことは低栄養の維持透析患者は MIS 値が高いほど血清クレアチニン値が低く重度の貧血であることを示唆している.しかしながら,MIS には既に2つの検査値を内包していることを改めて表明しておく必要がある.それゆえ,MIS とそれらの検査値との相関は少なくとも一部は数学的共役(多重共線性?)であることが予想される.血清 CRP 値は DMS とは相関せず,SGA に弱い相関が見られたのみであった.しかし CRP 値は MIS とは強い相関 (r = 0.41; P < 0.01) が見られた.このことは MIS が重症度だけでなく炎症の程度をも反映していることを示唆している.3つの栄養採点システムは全て年齢と正の相関を示した.これは高齢の患者ほどより重症の蛋白質エネルギー低栄養と炎症を有する傾向があることを示している.アルブミン,BMI,そして恐らくトランスフェリンも透析予後を規定すると報告されているため,我々はこれらの値を MIS と比較することを選出した.我々は相関方法は少なくとも数学的共役の一部であることを認めていたのだが.

Table 3 に多様な様々な対策の相関係数と入院頻度を示した.この表にそれらの値のみ記載した,どの入院頻度とも有意に相関する係数を少なくとも1つ示している値を.血清アルブミン値は MIS のそれよりわずかに大きな相関係数を持つ唯一の値だった.血清 CRP,コレステロール,フェリチン,クレアチニン値もまた入院頻度に対して統計的有意であった.MIS に対するアルブミンほど強くはなかったが.

12ヶ月間の観察期間中に9名の患者が死亡した(平均死亡経過月数は 6.9 ± 2.7 ヶ月).6名の患者がコホートから離脱した,3名の患者は腎移植を受け,2名の患者は透析方法を腹膜透析に変更し,1名の患者は他の場所へ引越していった.46名の患者がこの期間中に少なくとも一回は入院した.

Table 4 に前向きコホート研究の開始時の初期値と最初の入院までの時間 (H3) に基づく Cox 比例ハザードモデルによる最初の入院のハザード比と95%信頼区間を示す.そのモデルは年令,性別,人種,基礎腎疾患を調整して相対危険度を推定した.Table 4 には統計的に有意な (P < 0.05) 相対死亡危険度のみ示した.3つの採点システムの中では MIS が H3 と最も強く相関していた.最初の入院の相対危険度は MIS が 3.83 上昇すると10単位増加した(95%信頼区間は 1.85 から 7.94; P < 0.001).DMS は弱い相関しかなかった.他の変数では血清アルブミン値が H3 の強い予測因子となった(ハザード比 4.48; 95%信頼区間 2.16-9.28; P = 0.001).血清 CRP もまた H3 と統計的に有意な関連を示した.血清クレアチニンは僅かな関連のみだった.Cox 比例ハザードモデルでは,他のすべての臨床変数・検査値変数・図示した変数は H3 とは統計的有意な関連は示さなかった.

Table 5 には H3 について先述したのと同様 Cox 比例ハザードモデルを用いて死亡のハザード比と95%信頼区間を示した.統計的有意な相対死亡危険度の値のみ Table 4 に示した.ただしここで述べておくが,他の採点システムと比較してDMS は除外してある(P = 0.06).3つの採点システムの中では MIS が最も強く前向き死亡率と関連していた.MIS が 10.43 増加すると相対死亡危険度は10単位増加した(95%信頼区間 2.28 から 47.64; P = 0.002).SGA には弱い関係しかなく,DMS には統計的に有意なハザード比はなかった.他の変数では,血清アルブミン値もまた死亡の強い予測因子となった(ハザード比 7.21; 95%信頼区間 2.47 から 11.74; P = 0.001).血清 CRP,コレステロール,クレアチニンもまた年間死亡率と統計的に有意な関連を示した.他のすべての臨床データ,検査値,図示した変数は Cox 比例ハザードモデルによる死亡率とは統計的有意な関連を示さなかった.

Table 6 にはMIS の10の要素と MIS 値とに対する最初の入院と死亡のケースミックス調整したハザード比を示した.MIS の各要素を前述したように0から3まで増加する変数として Cox モデルに入力した.6つの MIS の要素は最初の入院 (H3) のハザード比に対して統計的有意を示し,5つの MIS 要素は死亡に対して統計的に有意なハザード比を示した.皮下脂肪と筋委縮に対する主観的点数が H3 に対して最も強い関連を示し,皮下脂肪と運動耐容能は死亡に対して最も強い関連を示した.しかし MIS 値は H3 と死亡率に対しては10個のどの要素よりももっと強力であることが分かった (Table 6).

Table 7 には DMS のオリジナルの7つの要素に対して付加的な3つの要素であるアルブミン,TIBC,BMIに基づく MIS モデルの逐次展開を示した.最初の列は(多変量解析して)ケースミックス調整した死亡のハザード比の相関係数 R2 を示す(Cox 比例ハザードモデルでは pseudo-R2 として知られる).その後の列には入院指数 (H1 から H3 まで) の多変量 R2 ,血清 CRP 値,ヘモグロビン値,MAMC,MIR 体脂肪率が多変量線形回帰モデルに基づいて示してあるが,最初の入院 H3 は除外してある.Cox モデルに基づく死亡ハザード比に近接しているためである.最初の7つの行は,最初の7つの要素 (DMS*) に対して以前言及した要素(アルブミン,TIBC,BMI)のうち一つかそれ以上の付加要素に基づく採点システムのモデルの様々な組み合わせを示している.8番目の行は MIS のフルバージョンであり,(*で示した)DMS と3つの付加要素である.9行目はアルブミンを CRP で置き換えた採点モデルを示す.MIS では H3 と死亡のハザード比が最強である.3つの新しい要素を追加することで死亡率のベストの指標を作ることが正当化される.TIBC を欠いたモデルが入院頻度 (H1 と H2) と体脂肪率に僅かな相関しかないとしても,MIS は H3 と死亡率のハザード比においてだけでなく,CRP 値,ヘモグロビン値,MAMC との強い相関を考慮しても,まだ上回る.MIS は近赤外分光方式で測定した体脂肪率とは最も強く相関してはいなかったが,MAMC との相関を考慮すると最も良い予測モデルであった.

Table 7 において9番目のモデルはアルブミンを CRP で置き換えたもので,MAMC,MIR 体脂肪,そしてもちろん CRP とより強い相関を示した.しかし死亡ハザード比,全ての3つの入院指標,ヘモグロビン値はそれほど強くなかった.それゆえ CRP ではなくアルブミンを用いたオリジナルの MIS がより有用と判明した.他のモデルも作成して検証してみたが,例えば CRP 値を10個の要素に追加して11個の要素にするなど,大部分の相関係数が改善すると期待されたにも関わらず増加はごくわずかであった(データは示さない).さらに CRP は多くの医療機関においてはいつも測定する検査項目ではない.それゆえ,一般には MIS が炎症指標や身体測定値,貧血同様に全体的な予後とよく相関する最良のモデルであると分かった.

考察

従来の SGA の要素に BMI と2つの検査値を結合して我々は定量的で包括的な MIS を開発した.それは簡易で実用的,再現性があり,もっと客観的に低栄養と炎症を評価する方法である.MIS は包括的な採点方法であり,前向きの入院指数,死亡率,栄養や炎症・貧血の代理と有意な強い相関を持つ.維持透析患者の栄養と炎症を評価することと個人ごとの重度の罹患率や致死的イベントの高いリスクを同定することの評価が信頼できると分かった.

低栄養と炎症は維持透析患者には一般的に起こることであり,不良な臨床状態やこの患者群における更に悪い予後と MICS が関係しているとはまだ十分に定義されていない.それにもかかわらず,透析患者の栄養と炎症の統一した評価方法がない.よく知られた身体測定から精巧な技術を用いたものまで,いくつかの低栄養の指数が利用できる.例えば二重エネルギーX線吸収法など.しかし,蛋白質エネルギー低栄養を検出するその方法の信頼性と実用性に説得力はない.さらに,透析患者の中で炎症状態を測定する方法はよく研究されておらず,種々のサイトカインをより精巧に測定する方法は高価で,まだ議論のあるところであり,利用するにも研究施設により制約される.

SGA は簡便で信頼できるツールであり,栄養状態を検出し疾病の程度を予測することが検証されたにも関わらず,それはたった3つの栄養状態を含んだ半定量的採点法である.この半定量的機能は SGA の信頼性と精度を制約する.さらに SGA の殆どの要素は明確な定義を持たないために強固なガイドラインは存在し得ない.それゆえ SGA の基準の各々の最終的評価はもっぱら評価者の主観に頼らざるをえない.

SGA の最初の定量的バージョンは DMS であるが,SGA に固有の問題を回避しようとした正当なものである.DMS は TIBC や血清アルブミン値同様,身体指数と BMI に良好な相関を示した.予備データは DMS が SGA よりよい精度を提供することを支持していたが,我々はツールを改善する努力を続けた.目的は,栄養士や熟練した看護師,または医師が数分以内でもっと簡単に実施できる実用的で簡便な採点方法である.しかしそれは包括的である必要があり,歴史の境界を超える必要があり,SGA や DMS をより簡便化した診察方法である必要があり,また内的な炎症を反映し,死亡率や入院など臨床に関連する転帰を予測可能である必要があった.

MIS は SGA に基づいてはいるが SGA にはない3つの要素,つまり BMI,血清アルブミン,TIBC を持っており,加点方式(0点から3点までの増加する整数)で採点する.そしてその点数は他の既に存在する SGA や DMS の7つの要素と互換性がある.MIS と血清アルブミン (- 0.51) およびトランスフェリン (- 0.42) に対する交差相関は DMS に対するもの(それぞれ – 0.27, – 0.23)より強かった.これら2つの検査値が MIS の要素だからでもある.我々は BMI を身長で補正した体重の簡便な代表値として用いたが,透析患者の死亡率を予測することが分かった.血清アルブミン値は透析患者の死亡率のより強い予測因子であるが,低アルブミン血症は低栄養同様,炎症を反映している可能性がある.血清トランスフェリンは TIBC により代表され,米国の透析施設では毎月から四半期ごとに採血するもので,透析患者の栄養指標として信頼できると報告されている. BMI,アルブミン値,トランスフェリンの3つの付加要素は MIS の総得点の一部を構成していることで数学的共役の懸念はあるが,その利点は相当なものであり,数学的共役を超えている.

前向き入院と有意に相関する MIS は,維持透析患者の死亡の予測因子でもあることが分かった.疑いもないことだが,MIS と罹患率および死亡率の相関は改善した.少なくとも血清アルブミン値や BMI などのよく知られたマーカーを包含するという理由で.それが MIS に含まれる理由なのだが.

MIS と CRP の相関が強い(r = 0.41) のは,血清アルブミンが MIS の要素であり,アルブミンが CRP と強く相関することが知られているためだろう.DMS は本質的に SGA の定量的バージョンであるにもかかわらず,CRP とは統計的に有意な相関を示さなかった (r = 0.19).また SGA と CRP の間の相関は弱かった (r = 0.24).それゆえ,MIS が低栄養同様炎症のマーカーであり,MICS の重症度の指標であることが分かった.

SGA や DMS と異なり,MIS は不応性貧血のマーカーであることも分かった.MIS とヘマトクリットの間に優位な相関が見られ,恐らく炎症と維持透析患者のエリスロポエチン抵抗性との間に関連があるためだろう.Gunnell らはエリスロポエチン抵抗性は高フェリチン血症と低トランスフェリン血症の文脈で起こり,急性反応期にあると考えられ,鉄欠乏状態ではないと報告している.さらに低 TIBC 血症と高フェリチン血症は透析患者の罹患率・死亡率を高める危険因子である.これらの所見は,我々が MIS に血清 TIBC(トランスフェリン)を含んだことをさらに支持する.

本研究では,期待したとおり,血清アルブミンもまた前向き入院指数と死亡率に強い相関があることが分かった.しかし MIS は予後に近く相関するだけでなく身体所見や貧血・炎症・栄養指標などの検査値にもより強い相関を示していた.他の多くの検査値と臨床状態を特徴付けるのに使われる臨床測定で,異なる測定が所与の疾病の異なる面を記述するかもしれないし,互いによく相関しないかもしれない.それゆえ,血清アルブミン値と身体測定値との間の強い相関がないのは珍しいことではない.血清アルブミン値が MIS の要素であることは強調されるべきかもしれない.それゆえ,数学的共役がアルブミンと MIS の間の相関に貢献しているはずである.にも関わらず MIS の 90 % が他のアルブミンには関係のない変数である.MIS とすべての関連する臨床指標の平均的な相関はアルブミンや CRP,他のいかなる変数のそれを超えている.それゆえ,MIS は透析患者の栄養と炎症のすべての面を反映するより包括的なマーカーであり,同時に維持透析患者の罹患率と死亡率の強い予後規定因子であることが分かった.

予備調査の結果は標本数と観察期間が小さすぎることで修飾されているはずである.さらに,重病のため本研究に参加しなかった2名の患者が研究開始直後に死亡した.MIS 値が非常に高かったため,もしその患者が参加していれば入院率と死亡率についてはより強い結果が得られた可能性がある.さらに透析歴の効果は我々が使用する MIS の単純な増分の効果よりもっと複雑かもしれない.また,BMI の加点方式(20超は正常)は厳しすぎて歪んでいる可能性がある.というのも BMI の平均値は 24.7 ± 6.4 kg/m2 だからだ.それゆえ, 60 % 以上の患者が正常と採点された.にも関わらずこれら全ての点数はヌルに対する偏りを示し,これらの基準を改善することで更に良い相関を期待できることを暗示している.

本研究で検証した採点方法では殆どの相関は特に堅牢でもなかったことを強調しておく必要がある.疑いもないことだが,例えば低栄養炎症複合状態などの複雑な生理的状態にあるものを測定する基準を作成してスケールの方法を開発するのは,技術的に洗練され過ぎており,非定型的アプローチを保証するとは最初は思えなかった.しかしながら,本研究の目的は新しい採点方式を創造することではなく,SGA のような既に存在するものを洗練して検証することである,ということは改めて強調しなければならない.臨床に関連した低栄養スケールを開発することは努力を必要とし,SGA は良いスタート地点であった.SGA は予測と内容の有効性を有しており,栄養リスクのベンチマーク測定としてますます受け入れられている.そして MIS は本質的に SGA ベースでその要素を 70 % 有しており,30 % は3つの付加要素(アルブミン値,トランスフェリン値,BMI)からなる.それらはしばしば検証され,透析患者における栄養状態のマーカーとして一般的に受け入れられている.

透析患者の予後不良の2つの主要な指標である栄養と炎症を評価する目的は,合併症と予後不良のリスクのある患者を同定することである.そのようなリスク層別化戦略は伝統的に二桁の採点方式に基づいているが,追加の栄養カウンセリングや栄養サプリメント,心理社会的介入などの予防介入の実施を可能にする.この開発された MIS には SGA と DMS の利点,つまり広く用いられている信頼性,精度,3つの要素を追加するだけの強度などが組み込まれており,それらは全て透析の予後に軸受している.取り組む時間とスタッフの訓練は増えない.

Dialysis Outcome Quality Initiative ガイドラインでは,すべての患者に統一した栄養評価を定期的に行うことを推奨している.栄養と炎症状態の全体的測定に対する注意を増すことは患者の予後を改善するようである.この仮説は透析患者の観察コホートやランダム化コントロール試験によって検証されるべきである.そのような介入が為される前に標準化した統一した一般的に受け入れられた栄養と炎症の評価方法を採用すべきである.あまねく使われて十分実用的で,しかも予後の強い予測因子として十分に包括的なツールを.MIS はその目的達成のための手段かもしれない.現在の研究は MIS が従来の SGA や DMS よりも優れている可能性があることを示唆している.とはいえ,MICS の存在と重大性を検出する採点方式と,透析患者の罹患率と死亡率の予測値との信頼性を評価するにはさらに包括的な縦断研究が必要である.

Classify the Item_Number of the ‘Standard Tables of Food Composition in Japan 2010’

I have released ‘Standard Tables of Food Composition in Japan 2010′ on Jan. 18, 2012. However, I did not classify which Item_Number is categorized into food groups or derived from any organism.

In this contents, I have described incomplete way how to classify them.

Example 1 shows that the code exports Item_Number, major category, medium category, minor category and details. Please note that the tree structures is not complete.

Example 2 shows complete tree structures. However, I could not write the complete code with recursion.

Example 1. Incomplete data
Item Number Major Category Medium Category Minor Category Major Category Medium Category Minor Category
01012 こむぎ [玄穀] 国産 Wheat [Whole grain] Domestic
01013

輸入

Imported
01014

輸入

Imported
01015
[小麦粉] 薄力粉
[Wheat  flour] Soft flour
01016 
[小麦粉] 薄力粉
[Wheat flour] Soft flour
01018

中力粉

Medium flour
01019  
中力粉

Medium flour
01020

強力粉

Hard flour
01021

強力粉

Hard flour
01023 

強力粉

Hard flour
01024

プレミックス粉

Premixed flour
01025

プレミックス粉

Premixed flour
Example 2. Complete data
Item Number Major Category Medium Category Minor Category Major Category MediumCategory MinorCategory
01012 こむぎ [玄穀] 国産 Wheat [Whole grain] Domestic
01013 こむぎ [玄穀] 輸入 Wheat [Whole grain] Imported
01014 こむぎ [玄穀] 輸入 Wheat [Whole grain] Imported
01015 こむぎ [小麦粉] 薄力粉 Wheat [Wheat  flour] Soft flour
01016  こむぎ [小麦粉] 薄力粉 Wheat [Wheat flour] Soft flour
01018 こむぎ [小麦粉] 中力粉 Wheat [Wheat flour] Medium flour
01019  こむぎ [小麦粉] 中力粉 Wheat [Wheat flour] Medium flour
01020 こむぎ [小麦粉] 強力粉 Wheat [Whole flour] Hard flour
01021 こむぎ [小麦粉] 強力粉 Wheat [Wheat flour] Hard flour
01023 こむぎ [小麦粉] 強力粉 Wheat [Wheat flour] Hard flour
01024 こむぎ [小麦粉] プレミックス粉 Wheat [Wheat flour] Premixed flour
01025 こむぎ [小麦粉] プレミックス粉 Wheat [Wheat flour] Premixed flour

Please copy text from the PDF files and paste to EXCEL worksheet by such procedure as described in this content. Press ‘Alt’ key and ‘F11’ key to load VBE. Run the following code:

Option Explicit
Sub ItemNum()
Dim mySht           As Worksheet
Dim myRng           As Range
Dim i               As Long
Dim j               As Long
Dim k               As Long
Dim tmpAr           As Variant
Dim myItem()        As String
Dim myNum1()        As String
Dim myNum2()        As String
Dim ItemNumAr()     As String
Dim myCancel()      As String
Dim Cancel_Ar()     As String
Dim myAr()          As String
Dim myAr2()         As String
Dim myGroupNamJP()  As String
Dim myGroupNumJP()  As String
Dim myGroupNamEN()  As String
Dim myGroupNumEN()  As String
Dim GroupAr()       As String
Dim myRegExp1       As Object
Dim myRegExp2       As Object
Dim myStrPtn        As String
Dim myStrPtn2       As String
Const startStrPtn   As String = "^(1\\)|residues)$"
Dim tmpStrJ         As String
Dim tmpStrE         As String
Const endStrPtn     As String = "[0-9]\\)$"
Const JapStrPtn     As String = "([ぁ-ヶ]|[亜-黑])+$"
Dim myStr           As String
Set mySht = ActiveSheet
Set myRng = Application.Intersect(mySht.Range("A:F"), _
                                    mySht.UsedRange)
tmpAr = myRng
Set myRegExp1 = CreateObject("VBScript.RegExp")
myStrPtn = "^[0-9]{5}$"
With myRegExp1
    .Pattern = myStrPtn
    .IgnoreCase = True
    .Global = True
End With
Set myRegExp2 = CreateObject("VBScript.RegExp")
With myRegExp2
    .Pattern = startStrPtn
    .IgnoreCase = True
    .Global = True
End With
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If myRegExp1.Test(tmpAr(i, 1)) And _
       tmpAr(i, 2) <> "(欠番)" Then
        ReDim Preserve myItem(j)
        ReDim Preserve myNum1(j)
        myItem(j) = tmpAr(i, 1)
        myNum1(j) = i
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim ItemNumAr(j - 1, 2)
    ItemNumAr(LBound(ItemNumAr), 0) = myItem(LBound(ItemNumAr))
    ItemNumAr(LBound(ItemNumAr), 1) = 7
    ItemNumAr(LBound(ItemNumAr), 2) = myNum1(LBound(ItemNumAr))
For k = LBound(ItemNumAr) + 1 To UBound(ItemNumAr)
    ItemNumAr(k, 0) = myItem(k)
    ItemNumAr(k, 1) = myNum1(k - 1) + 1
    ItemNumAr(k, 2) = myNum1(k)
Next k
Erase myItem
Erase myNum1
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If myRegExp2.Test(tmpAr(i, 1)) _
    Then
        ReDim Preserve myItem(j)
        ReDim Preserve myNum1(i)
        myItem(j) = tmpAr(i, 1)
        myNum1(j) = i
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim myCancel(UBound(myItem), 1)
For k = LBound(myCancel) To UBound(myCancel)
    myCancel(k, 0) = myItem(k)
    myCancel(k, 1) = myNum1(k)
Next k
Erase myItem
Erase myNum1
ReDim Preserve myCancel(UBound(myCancel), 2)
j = 0
For i = LBound(myCancel) To UBound(myCancel) - 1
    If myCancel(i, 0) = "1)" Then
        If myCancel(i + 2, 0) = "residues" Then
            myCancel(i, 2) = myCancel(i + 2, 1)
        Else
            myCancel(i, 2) = myCancel(i + 1, 1)
        End If
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim Cancel_Ar(j - 1, 2)
j = 0
For i = LBound(myCancel) To UBound(myCancel) - 1
    If myCancel(i, 0) = "1)" Then
        Cancel_Ar(j, 0) = myCancel(i, 0)
        Cancel_Ar(j, 1) = myCancel(i, 1)
        Cancel_Ar(j, 2) = myCancel(i, 2)
    Else
        j = j - 1
    End If
    j = j + 1
Next i
k = 0
ReDim myItem(k)
ReDim myNum1(k)
ReDim myNum2(k)
For i = LBound(ItemNumAr) To UBound(ItemNumAr)
    ReDim Preserve myItem(k)
    ReDim Preserve myNum1(k)
    ReDim Preserve myNum2(k)
    For j = LBound(Cancel_Ar) To UBound(Cancel_Ar)
        If CLng(ItemNumAr(i, 1)) < CLng(Cancel_Ar(j, 1)) And _
                                   CLng(Cancel_Ar(j, 1)) < CLng(ItemNumAr(i, 2)) And _
           CLng(ItemNumAr(i, 1)) < CLng(Cancel_Ar(j, 2)) And _
                                   CLng(Cancel_Ar(j, 2)) < CLng(ItemNumAr(i, 2)) _
        Then
            If Cancel_Ar(j, 1) - ItemNumAr(i, 1) < 3 Then
                myItem(k) = ItemNumAr(i, 0)
                myNum1(k) = Cancel_Ar(j, 2)
                myNum2(k) = ItemNumAr(i, 2)
            Else
                myNum2(k) = Cancel_Ar(j, 1)
                k = k + 1
                ReDim Preserve myItem(k)
                ReDim Preserve myNum1(k)
                ReDim Preserve myNum2(k)
                myItem(k) = ItemNumAr(i, 0)
                myNum1(k) = Cancel_Ar(j, 2)
                myNum2(k) = ItemNumAr(i, 2)
            End If
        Else
            myItem(k) = ItemNumAr(i, 0)
            myNum1(k) = ItemNumAr(i, 1)
            myNum2(k) = ItemNumAr(i, 2)
        End If
    Next j
    k = k + 1
Next i
ReDim myAr(UBound(myItem), 2)
For i = LBound(myAr) To UBound(myAr)
    myAr(i, 0) = myItem(i)
    myAr(i, 1) = myNum1(i)
    myAr(i, 2) = myNum2(i)
Next i
Erase myItem
Erase myNum1
Erase myNum2
myStrPtn2 = "^(\\[|\\()?[a-zA-Z]+"
With myRegExp1
    .Pattern = myStrPtn2
    .IgnoreCase = True
    .Global = True
End With
k = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    For j = LBound(myAr) To UBound(myAr)
        If CLng(myAr(j, 1)) < i And _
           CLng(myAr(j, 2)) > i And _
           myRegExp1.Test(tmpAr(i, 1)) _
        Then
            ReDim Preserve myGroupNamJP(k)
            ReDim Preserve myGroupNumJP(k)
            ReDim Preserve myGroupNamEN(k)
            ReDim Preserve myGroupNumEN(k)
            myGroupNamJP(k) = tmpAr(i - 1, 1) & _
                           tmpAr(i - 1, 2) & _
                           tmpAr(i - 1, 3) & _
                           tmpAr(i - 1, 4) & _
                           tmpAr(i - 1, 5) & _
                           tmpAr(i - 1, 6)
            myGroupNumJP(k) = i - 1
            myGroupNamEN(k) = RTrim(tmpAr(i, 1) & " " & _
                         Replace(tmpAr(i, 2), "*", "") & " " & _
                         Replace(tmpAr(i, 3), "*", "") & " " & _
                         Replace(tmpAr(i, 4), "*", "") & " " & _
                         Replace(tmpAr(i, 5), "*", "") & " " & _
                         Replace(tmpAr(i, 6), "*", ""))
            myGroupNumEN(k) = i
        Else
            k = k - 1
        End If
        k = k + 1
    Next j
Next i
ReDim GroupAr(UBound(myGroupNamJP), 3)
For i = LBound(GroupAr) To UBound(GroupAr)
    GroupAr(i, 0) = myGroupNamJP(i)
    GroupAr(i, 1) = myGroupNumJP(i)
    GroupAr(i, 2) = myGroupNamEN(i)
    GroupAr(i, 3) = myGroupNumEN(i)
Next i
Erase myGroupNamJP
Erase myGroupNumJP
Erase myGroupNamEN
Erase myGroupNumEN
k = 0
For i = LBound(GroupAr) To UBound(GroupAr)
    ReDim Preserve myGroupNamJP(k)
    ReDim Preserve myGroupNumJP(k)
    ReDim Preserve myGroupNamEN(k)
    ReDim Preserve myGroupNumEN(k)
    myGroupNamJP(k) = GroupAr(i, 0)
    myGroupNumJP(k) = GroupAr(i, 1)
    myGroupNamEN(k) = GroupAr(i, 2)
    myGroupNumEN(k) = GroupAr(i, 3)
    k = k + 1
    For j = LBound(Cancel_Ar) To UBound(Cancel_Ar)
        If CLng(Cancel_Ar(j, 1)) < CLng(GroupAr(i, 1)) And _
           CLng(GroupAr(i, 1)) < CLng(Cancel_Ar(j, 2)) _
        Then
            k = k - 1
        End If
    Next j
Next i
ReDim GroupAr(UBound(myGroupNamJP), 3)
With myRegExp1
    .Pattern = endStrPtn
    .IgnoreCase = True
    .Global = True
End With
With myRegExp2
    .Pattern = JapStrPtn
    .IgnoreCase = True
    .Global = True
End With
For i = LBound(GroupAr) To UBound(GroupAr)
    myGroupNamJP(i) = myRegExp1.Replace(myGroupNamJP(i), "")
    myGroupNamEN(i) = myRegExp1.Replace(myGroupNamEN(i), "")
    myGroupNamEN(i) = RTrim(myRegExp2.Replace(myGroupNamEN(i), ""))
    GroupAr(i, 0) = myGroupNamJP(i)
    GroupAr(i, 1) = myGroupNumJP(i)
    GroupAr(i, 2) = myGroupNamEN(i)
    GroupAr(i, 3) = myGroupNumEN(i)
Next i
ReDim Preserve myAr(UBound(myAr), 5)
ReDim myAr2(UBound(myAr), 3)
For i = LBound(myAr) To UBound(myAr)
    tmpStrJ = ""
    tmpStrE = ""
    myAr2(i, 0) = myAr(i, 0)
    For j = LBound(GroupAr) To UBound(GroupAr)
        If CLng(myAr(i, 1)) < CLng(GroupAr(j, 1)) And _
                              CLng(GroupAr(j, 3)) < CLng(myAr(i, 2)) Then
            tmpStrJ = tmpStrJ & GroupAr(j, 0)
            tmpStrE = RTrim(tmpStrE & " " & GroupAr(j, 2))
            myAr(i, 4) = GroupAr(j, 1)
        End If
    Next j
    If tmpStrJ = "" Then
        myAr(i, 3) = myAr(i - 1, 3)
        myAr(i, 4) = myAr(i - 1, 4)
        myAr(i, 5) = myAr(i - 1, 5)
        myAr2(i, 1) = myAr(i - 1, 3)
        myAr2(i, 2) = myAr(i - 1, 5)
    Else
        myAr(i, 3) = tmpStrJ
        myAr(i, 5) = tmpStrE
        myAr2(i, 1) = tmpStrJ
        myAr2(i, 2) = tmpStrE
    End If
Next i
Set mySht = Worksheets.Add
With mySht
    .Range("A1").Value = "Item_Number"
    .Range("B1").Value = "上位食品名(日)"
    .Range("C1").Value = "上位食品名(英)"
    .Range("A2:C450") = myAr2
End With
Erase ItemNumAr
Erase Cancel_Ar
Erase GroupAr
Erase myAr
Erase myAr2
Set mySht = Nothing
Set myRng = Nothing
Set myRegExp1 = Nothing
Set myRegExp2 = Nothing
End Sub

日本食品標準成分表2010の食品番号を分類する

日本食品標準成分表2010のテキストデータで日本食品標準成分表2010のテキストデータを公開しましたが,食品番号がどの食品群に属するか,どの生物由来かなどの分類ができていませんでした.今回は不十分ではありますが,食品番号を分類する方法を述べます.

注意点として例1に挙げたように,大分類・中分類・小分類・細目のツリー構造が完全ではありません.本来は例2のようであるべきですが,ツリー構造を解析するには再帰呼び出しによる構成展開が必要で,私の今のスキルでは無理でした.ご了承下さい.

例1.コードを実行して得られるデータ
Item Number Major Category Medium Category Minor Category Major Category Medium Category Minor Category
01012 こむぎ [玄穀] 国産 Wheat [Whole grain] Domestic
01013

輸入

Imported
01014

輸入

Imported
01015
[小麦粉] 薄力粉
[Wheat  flour] Soft flour
01016 
[小麦粉] 薄力粉
[Wheat flour] Soft flour
01018

中力粉

Medium flour
01019  
中力粉

Medium flour
01020

強力粉

Hard flour
01021

強力粉

Hard flour
01023 

強力粉

Hard flour
01024

プレミックス粉

Premixed flour
01025

プレミックス粉

Premixed flour
例2.必要なデータ
Item_Number Major Category Medium Category Minor Category Major Category MediumCategory MinorCategory
01012 こむぎ [玄穀] 国産 Wheat [Whole grain] Domestic
01013 こむぎ [玄穀] 輸入 Wheat [Whole grain] Imported
01014 こむぎ [玄穀] 輸入 Wheat [Whole grain] Imported
01015 こむぎ [小麦粉] 薄力粉 Wheat [Wheat  flour] Soft flour
01016  こむぎ [小麦粉] 薄力粉 Wheat [Wheat flour] Soft flour
01018 こむぎ [小麦粉] 中力粉 Wheat [Wheat flour] Medium flour
01019  こむぎ [小麦粉] 中力粉 Wheat [Wheat flour] Medium flour
01020 こむぎ [小麦粉] 強力粉 Wheat [Whole flour] Hard flour
01021 こむぎ [小麦粉] 強力粉 Wheat [Wheat flour] Hard flour
01023 こむぎ [小麦粉] 強力粉 Wheat [Wheat flour] Hard flour
01024 こむぎ [小麦粉] プレミックス粉 Wheat [Wheat flour] Premixed flour
01025 こむぎ [小麦粉] プレミックス粉 Wheat [Wheat flour] Premixed flour

PDFからテキスト情報を貼り付けるのはこのコンテンツに記載したのと同じ手順です.AltキーとF11キーを押下してVBEを起動し,標準モジュールに以下のコードを貼り付けて実行して下さい.

Option Explicit
Sub ItemNum()
Dim mySht           As Worksheet
Dim myRng           As Range
Dim i               As Long
Dim j               As Long
Dim k               As Long
Dim tmpAr           As Variant
Dim myItem()        As String
Dim myNum1()        As String
Dim myNum2()        As String
Dim ItemNumAr()     As String
Dim myCancel()      As String
Dim Cancel_Ar()     As String
Dim myAr()          As String
Dim myAr2()         As String
Dim myGroupNamJP()  As String
Dim myGroupNumJP()  As String
Dim myGroupNamEN()  As String
Dim myGroupNumEN()  As String
Dim GroupAr()       As String
Dim myRegExp1       As Object
Dim myRegExp2       As Object
Dim myStrPtn        As String
Dim myStrPtn2       As String
Const startStrPtn   As String = "^(1\\)|residues)$"
Dim tmpStrJ         As String
Dim tmpStrE         As String
Const endStrPtn     As String = "[0-9]\\)$"
Const JapStrPtn     As String = "([ぁ-ヶ]|[亜-黑])+$"
Dim myStr           As String
Set mySht = ActiveSheet
Set myRng = Application.Intersect(mySht.Range("A:F"), _
                                    mySht.UsedRange)
tmpAr = myRng
Set myRegExp1 = CreateObject("VBScript.RegExp")
myStrPtn = "^[0-9]{5}$"
With myRegExp1
    .Pattern = myStrPtn
    .IgnoreCase = True
    .Global = True
End With
Set myRegExp2 = CreateObject("VBScript.RegExp")
With myRegExp2
    .Pattern = startStrPtn
    .IgnoreCase = True
    .Global = True
End With
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If myRegExp1.Test(tmpAr(i, 1)) And _
       tmpAr(i, 2) <> "(欠番)" Then
        ReDim Preserve myItem(j)
        ReDim Preserve myNum1(j)
        myItem(j) = tmpAr(i, 1)
        myNum1(j) = i
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim ItemNumAr(j - 1, 2)
    ItemNumAr(LBound(ItemNumAr), 0) = myItem(LBound(ItemNumAr))
    ItemNumAr(LBound(ItemNumAr), 1) = 7
    ItemNumAr(LBound(ItemNumAr), 2) = myNum1(LBound(ItemNumAr))
For k = LBound(ItemNumAr) + 1 To UBound(ItemNumAr)
    ItemNumAr(k, 0) = myItem(k)
    ItemNumAr(k, 1) = myNum1(k - 1) + 1
    ItemNumAr(k, 2) = myNum1(k)
Next k
Erase myItem
Erase myNum1
j = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    If myRegExp2.Test(tmpAr(i, 1)) _
    Then
        ReDim Preserve myItem(j)
        ReDim Preserve myNum1(i)
        myItem(j) = tmpAr(i, 1)
        myNum1(j) = i
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim myCancel(UBound(myItem), 1)
For k = LBound(myCancel) To UBound(myCancel)
    myCancel(k, 0) = myItem(k)
    myCancel(k, 1) = myNum1(k)
Next k
Erase myItem
Erase myNum1
ReDim Preserve myCancel(UBound(myCancel), 2)
j = 0
For i = LBound(myCancel) To UBound(myCancel) - 1
    If myCancel(i, 0) = "1)" Then
        If myCancel(i + 2, 0) = "residues" Then
            myCancel(i, 2) = myCancel(i + 2, 1)
        Else
            myCancel(i, 2) = myCancel(i + 1, 1)
        End If
    Else
        j = j - 1
    End If
    j = j + 1
Next i
ReDim Cancel_Ar(j - 1, 2)
j = 0
For i = LBound(myCancel) To UBound(myCancel) - 1
    If myCancel(i, 0) = "1)" Then
        Cancel_Ar(j, 0) = myCancel(i, 0)
        Cancel_Ar(j, 1) = myCancel(i, 1)
        Cancel_Ar(j, 2) = myCancel(i, 2)
    Else
        j = j - 1
    End If
    j = j + 1
Next i
k = 0
ReDim myItem(k)
ReDim myNum1(k)
ReDim myNum2(k)
For i = LBound(ItemNumAr) To UBound(ItemNumAr)
    ReDim Preserve myItem(k)
    ReDim Preserve myNum1(k)
    ReDim Preserve myNum2(k)
    For j = LBound(Cancel_Ar) To UBound(Cancel_Ar)
        If CLng(ItemNumAr(i, 1)) < CLng(Cancel_Ar(j, 1)) And _
                                   CLng(Cancel_Ar(j, 1)) < CLng(ItemNumAr(i, 2)) And _
           CLng(ItemNumAr(i, 1)) < CLng(Cancel_Ar(j, 2)) And _
                                   CLng(Cancel_Ar(j, 2)) < CLng(ItemNumAr(i, 2)) _
        Then
            If Cancel_Ar(j, 1) - ItemNumAr(i, 1) < 3 Then
                myItem(k) = ItemNumAr(i, 0)
                myNum1(k) = Cancel_Ar(j, 2)
                myNum2(k) = ItemNumAr(i, 2)
            Else
                myNum2(k) = Cancel_Ar(j, 1)
                k = k + 1
                ReDim Preserve myItem(k)
                ReDim Preserve myNum1(k)
                ReDim Preserve myNum2(k)
                myItem(k) = ItemNumAr(i, 0)
                myNum1(k) = Cancel_Ar(j, 2)
                myNum2(k) = ItemNumAr(i, 2)
            End If
        Else
            myItem(k) = ItemNumAr(i, 0)
            myNum1(k) = ItemNumAr(i, 1)
            myNum2(k) = ItemNumAr(i, 2)
        End If
    Next j
    k = k + 1
Next i
ReDim myAr(UBound(myItem), 2)
For i = LBound(myAr) To UBound(myAr)
    myAr(i, 0) = myItem(i)
    myAr(i, 1) = myNum1(i)
    myAr(i, 2) = myNum2(i)
Next i
Erase myItem
Erase myNum1
Erase myNum2
myStrPtn2 = "^(\\[|\\()?[a-zA-Z]+"
With myRegExp1
    .Pattern = myStrPtn2
    .IgnoreCase = True
    .Global = True
End With
k = 0
For i = LBound(tmpAr) To UBound(tmpAr)
    For j = LBound(myAr) To UBound(myAr)
        If CLng(myAr(j, 1)) < i And _
           CLng(myAr(j, 2)) > i And _
           myRegExp1.Test(tmpAr(i, 1)) _
        Then
            ReDim Preserve myGroupNamJP(k)
            ReDim Preserve myGroupNumJP(k)
            ReDim Preserve myGroupNamEN(k)
            ReDim Preserve myGroupNumEN(k)
            myGroupNamJP(k) = tmpAr(i - 1, 1) & _
                           tmpAr(i - 1, 2) & _
                           tmpAr(i - 1, 3) & _
                           tmpAr(i - 1, 4) & _
                           tmpAr(i - 1, 5) & _
                           tmpAr(i - 1, 6)
            myGroupNumJP(k) = i - 1
            myGroupNamEN(k) = RTrim(tmpAr(i, 1) & " " & _
                         Replace(tmpAr(i, 2), "*", "") & " " & _
                         Replace(tmpAr(i, 3), "*", "") & " " & _
                         Replace(tmpAr(i, 4), "*", "") & " " & _
                         Replace(tmpAr(i, 5), "*", "") & " " & _
                         Replace(tmpAr(i, 6), "*", ""))
            myGroupNumEN(k) = i
        Else
            k = k - 1
        End If
        k = k + 1
    Next j
Next i
ReDim GroupAr(UBound(myGroupNamJP), 3)
For i = LBound(GroupAr) To UBound(GroupAr)
    GroupAr(i, 0) = myGroupNamJP(i)
    GroupAr(i, 1) = myGroupNumJP(i)
    GroupAr(i, 2) = myGroupNamEN(i)
    GroupAr(i, 3) = myGroupNumEN(i)
Next i
Erase myGroupNamJP
Erase myGroupNumJP
Erase myGroupNamEN
Erase myGroupNumEN
k = 0
For i = LBound(GroupAr) To UBound(GroupAr)
    ReDim Preserve myGroupNamJP(k)
    ReDim Preserve myGroupNumJP(k)
    ReDim Preserve myGroupNamEN(k)
    ReDim Preserve myGroupNumEN(k)
    myGroupNamJP(k) = GroupAr(i, 0)
    myGroupNumJP(k) = GroupAr(i, 1)
    myGroupNamEN(k) = GroupAr(i, 2)
    myGroupNumEN(k) = GroupAr(i, 3)
    k = k + 1
    For j = LBound(Cancel_Ar) To UBound(Cancel_Ar)
        If CLng(Cancel_Ar(j, 1)) < CLng(GroupAr(i, 1)) And _
           CLng(GroupAr(i, 1)) < CLng(Cancel_Ar(j, 2)) _
        Then
            k = k - 1
        End If
    Next j
Next i
ReDim GroupAr(UBound(myGroupNamJP), 3)
With myRegExp1
    .Pattern = endStrPtn
    .IgnoreCase = True
    .Global = True
End With
With myRegExp2
    .Pattern = JapStrPtn
    .IgnoreCase = True
    .Global = True
End With
For i = LBound(GroupAr) To UBound(GroupAr)
    myGroupNamJP(i) = myRegExp1.Replace(myGroupNamJP(i), "")
    myGroupNamEN(i) = myRegExp1.Replace(myGroupNamEN(i), "")
    myGroupNamEN(i) = RTrim(myRegExp2.Replace(myGroupNamEN(i), ""))
    GroupAr(i, 0) = myGroupNamJP(i)
    GroupAr(i, 1) = myGroupNumJP(i)
    GroupAr(i, 2) = myGroupNamEN(i)
    GroupAr(i, 3) = myGroupNumEN(i)
Next i
ReDim Preserve myAr(UBound(myAr), 5)
ReDim myAr2(UBound(myAr), 3)
For i = LBound(myAr) To UBound(myAr)
    tmpStrJ = ""
    tmpStrE = ""
    myAr2(i, 0) = myAr(i, 0)
    For j = LBound(GroupAr) To UBound(GroupAr)
        If CLng(myAr(i, 1)) < CLng(GroupAr(j, 1)) And _
                              CLng(GroupAr(j, 3)) < CLng(myAr(i, 2)) Then
            tmpStrJ = tmpStrJ & GroupAr(j, 0)
            tmpStrE = RTrim(tmpStrE & " " & GroupAr(j, 2))
            myAr(i, 4) = GroupAr(j, 1)
        End If
    Next j
    If tmpStrJ = "" Then
        myAr(i, 3) = myAr(i - 1, 3)
        myAr(i, 4) = myAr(i - 1, 4)
        myAr(i, 5) = myAr(i - 1, 5)
        myAr2(i, 1) = myAr(i - 1, 3)
        myAr2(i, 2) = myAr(i - 1, 5)
    Else
        myAr(i, 3) = tmpStrJ
        myAr(i, 5) = tmpStrE
        myAr2(i, 1) = tmpStrJ
        myAr2(i, 2) = tmpStrE
    End If
Next i
Set mySht = Worksheets.Add
With mySht
    .Range("A1").Value = "Item_Number"
    .Range("B1").Value = "上位食品名(日)"
    .Range("C1").Value = "上位食品名(英)"
    .Range("A2:C450") = myAr2
End With
Erase ItemNumAr
Erase Cancel_Ar
Erase GroupAr
Erase myAr
Erase myAr2
Set mySht = Nothing
Set myRng = Nothing
Set myRegExp1 = Nothing
Set myRegExp2 = Nothing
End Sub

The text file, ‘Standard Tables of Food Composition in Japan 2010’

I requested Office for Resources Policy Division Science and Technology Policy
Bureau, Ministry of Education, Culture, Sports, Science and Technology (MEXT) to approve that I publish the text file, ‘Standard Tables of Food Composition in Japan 2010’ at the end of 2011. On January 13, 2012, I have received the e-mail from staff that the settlement has been completed. Therefore, I have published the text file, ‘Standard Tables of Food Composition in Japan 2010’. Please note the following:

1. I have replaced the strings ‘(0)’, ‘Tr’, ‘(Tr)’ and ‘-‘ with ‘0’.

2. The text file is derived from ‘Standard Tables of Food Composition in Japan 2010’, published by Report of the Subdivision on Resources The Council for Science and Technology, MEXT, JAPAN. Please contact MEXT to obtain application or notification before duplication or reproduction.

E-mail: kagseis@mext.go.jp

M_FOODS

Reference:
CSV file of the ‘Standard Tables of Food Composition in Japan 2010′

日本食品標準成分表2010のテキストデータ

文部科学省科学技術・学術政策局政策課資源室に表題のファイルの公開を申請しておりましたが,1月13日決裁が終了したとの連絡がありましたので,公開いたします.なお,公開したファイルを利用するにあたっては下記の2点についてご注意下さい.

1.「日本食品標準成分表2010」に記載されている,(0),Tr,(Tr),-,について,当データでは「 0 」と表記しています.

2.本表の食品成分値は文部科学省科学技術・学術審議会資源調査分科会報告「日本食品標準成分表2010」によるものです.食品成分値を複製又は転載する場合は事前に文部科学省への許可申請もしくは届け出が必要となる場合があります.

連絡先:文部科学省科学技術・学術政策局政策課資源室 E-mail: kagseis@mext.go.jp

M_FOODS.csv

決裁にあたり,各項目の名称と単位とを付記されたいとの依頼が電話でありました.後日修正してアップロードします.

参照:
日本食品標準成分表2010のcsvファイル

Simplified nutritional screening tools for patients on maintenance hemodialysis

I read the paper below, which describes that MIS is best criteria for assessment of nutrition status of hemodialysis patients. But the method is time-consuming and needs skill. The GNRI is most simple method using only serum albumin, height and body weight for assessment them.

Simplified nutritional screening tools for patients on maintenance hemodialysis

Kohsuke Yamada, Ryuichi Furuya, Takako Takita, Yukitaka Maruyama, Yuri Yamaguchi, Sakae Ohkawa and Hiromichi Kumagai

1 From the Department of Clinical Nutrition, School of Food and Nutritional Sciences and the COE Program in the 21st Century, University of Shizuoka, Shizuoka, Japan (KY, YY, SO, and HK); the Renal Division, Department of Internal Medicine, Iwata City Hospital, Iwata, Shizuoka, Japan (RF); and the Maruyama Hospital, Hamamatsu, Japan (TT and YM)

Background:

Malnutrition is a prevalent complication in patients on maintenance hemodialysis. Nutritional screening tools may be useful to identify those patients at nutritional risk from among hundreds of hemodialysis patients in a large facility.

Objective:

We tested several simplified nutritional screening tools on hemodialysis patients to validate the potential application of the tools.

Design:

The simplified nutritional screening tools were chosen from references published between 1985 and 2005. Nutritional assessments, including history taking, and anthropometric and biochemical measurements were performed on 422 hemodialysis patients. These results were applied to obtain the score of each nutritional screening tool and the malnutrition-inflammation score (MIS), a comprehensive nutritional assessment tool, as the reference standard. The usefulness of each nutritional screening tool for identifying nutritional risk was assessed by comparison with the MIS value and various individual nutritional measures.

Results:

Five reliable nutritional screening tools were found by the literature search. Among them, the geriatric nutritional risk index (GNRI) was considered to be the most accurate in identifying hemodialysis patients at nutritional risk, because the area under the receiver operating characteristic curve generated with the MIS value was the largest. The GNRI showed a significantly negative correlation with the MIS (r = –0.67, P < 0.0001), and the most accurate GNRI cutoff to identify a malnourished patient according to the MIS was <91.2. The GNRI's sensitivity, specificity, and accuracy of <91.2 in predicting malnutrition according to the MIS were 0.730, 0.819, and 0.787, respectively.

Conclusion:

The GNRI was the simplest and most accurate risk index for identifying hemodialysis patients at nutritional risk according to the MIS.

Key Words:

Geriatric nutritional risk index • hemodialysis • nutritional assessment • nutritional screening • malnutrition-inflammation score • nutritional risk

維持透析患者のための簡易栄養スクリーニングツール

 最近読んだ論文の内容が良かったので,リンク先と全文の日本語訳を掲載します.MIS という栄養評価のためのゴールデンスタンダードのツールがあるんですが,手間暇かかるのでもっと簡単なツールを幾つか比べてみたら,結局アルブミンと身長と体重だけから計算した GNRI というツールが一番良かった,というのが荒筋です.なお,日本語訳は不完全な箇所があるかもしれませんが,その責任は私にあります.Simplified nutritional screening tools for patients on maintenance hemodialysis



以下和訳です.

維持透析患者のための簡易栄養スクリーニングツール

Kohsuke Yamada, Ryuichi Furuya, Takako Takita, Yukitaka Maruyama, Yuri Yamaguchi, Sakae Ohkawa and Hiromichi Kumagai
1 From the Department of Clinical Nutrition, School of Food and Nutritional Sciences and the COE Program in the 21st Century, University of Shizuoka, Shizuoka, Japan (KY, YY, SO, and HK); the Renal Division, Department of Internal Medicine, Iwata City Hospital, Iwata, Shizuoka, Japan (RF); and the Maruyama Hospital, Hamamatsu, Japan (TT and YM)

要約

背景

 低栄養は維持透析患者においては一般的な合併症である.多くの施設において膨大な数の透析患者から栄養リスクのある患者を同定するために栄養スクリーニングツールは有用と思われる.

対象

 我々は透析患者に対する幾つかの簡易栄養ツールを実行し,ツールの潜在的有用性を検証した.

デザイン

 簡易栄養スクリーニングツールは1985年から2005年に刊行された参考文献から選択した.病歴を含めた栄養評価と身体所見,生化学検査を422名の透析患者に施行した.これらの結果は各栄養評価ツール及びmalnutrition-inflammation score (MIS) の点数化に用いた.MISは標準として参照される総合的栄養評価ツールである.栄養リスクを同定する各種栄養スクリーニングツールの有用性はMIS値および様々な個々の栄養指標と比較して評価した.

結果

 5つの信頼性の高い栄養スクリーニングツールが文献検索により判明した.そのうちgeriatric nutritional screening index (GNRI高齢者栄養指標) が最も正確に透析患者の栄養リスクを同定できると考えられた.MIS値により生成したAUCが最大だったからである.GNRIはMIS値と著明な負の相関 (r = – 0.67, P < 0.0001) を認め,MIS値で低栄養を識別する最も正確なGNRIのカットオフ値は91.2未満であった.MISにより低栄養を識別した患者のうち,GNRIが91.2未満の感度,特異度,精度はそれぞれ0.730, 0.819, 0.787であった.

結論

 GNRIはMISによる透析患者の低栄養リスクを同定する最も簡素で最も正確なリスク指標である.

Am J Clin Nutr 2008;87:106-113

KEY WORDS

Geriatric nutritional risk index, hemodialysis, nutritional assessment, nutritional screening, malnutrition-inflammation score, nutritional risk

導入

 蛋白エネルギー低栄養は透析を受けている患者では一般的に見られる合併症である.蛋白エネルギー低栄養は予後不良と相関し,栄養管理は維持透析患者において重要な治療アプローチと考えられているからである.栄養管理において栄養評価は必須かつ初歩の臨床的処置であり,Dialysis Outcome Quality Initiative (DOQI) ガイドラインでは全ての透析患者に対する定期的な栄養評価を推奨している.信頼性の高い栄養状態の評価には学術的な手順,身体測定,生化学検査,運動耐容能,栄養評価,主観的評価が必要である.しかしそれらの手順のほとんどは熟練した栄養士が施行する時でさえ時間がかかり,手間がかかるものである.

 栄養スクリーニングは低栄養リスクのある患者を同定する実用的な代替手段である.一般的な目的と高齢者や小児,入院患者や地域の患者,老人ホームの高齢者,癌患者やHIV感染者,嚥下困難の患者など特定の患者のために,多くの栄養スクリーニングツールが発達してきた.それらのうち,subjective global assessment (SGA) は栄養リスクをスクリーニングするために検証されてきた臨床的なツールである.このツールは病歴と臨床所見に基づいており,今や多くの施設で用いられている.SGAは慢性腎不全患者においても他の栄養スクリーニングツールからの参照基準として用いられてきた.Kalantar-Zadeh らはmalnutrition-inflammation score (MIS) を開発した.それはSGAと7つの要素を共有しており, SGAとは異なる3つの要素を追加している.それはbody mass index (BMI), 血清アルブミン,TIBCである.MISはSGAより優れた栄養指標と検証され,維持透析患者及び腹膜透析患者の両者に対する有用な栄養評価ツール足りうる.しかしながらMISもSGAも評価者による主観的評価を要するため,異なる評価者と異なる評価時において一貫性のある結果を確保するには高度の訓練を要する.

 一方,これらのより簡易な栄養スクリーニングツールはきちんと定義された規則かカットオフ値により点数化されている.これらのツールは一般的な身体計測を用いるもので,大多数の人口に迅速に適用できる.それらのツールとは Mini Nutritional Assessment-Short Form (MNA-SF), nutritional risk score (NRS), Malnutrition Universal Screening Tool (MUST), Malnutrition Screening Tool (MST), geriatric nutritional risk index (GNRI) である.それらは2つから5つの要素からなり,高齢者や入院患者に用いるために開発された.これらの栄養スクリーニングツールは一つ以上の研究によって検証されたにも関わらず,透析患者を用いた報告がなかった.本研究ではこれらの簡易栄養スクリーニングツールをMISおよび個々の維持透析患者の栄養計測と比較し検証する.

対象と方法

対象

 対象は朝夕予定の維持透析患者から募集した.患者は静岡市の磐田市立病院と浜松市の丸山病院に通院する外来透析患者である.この研究の選択基準は6ヶ月以上安定して維持透析を続けていることと,心血管疾患や消化管疾患,呼吸器疾患,精神疾患,進行性の低栄養など重篤な合併症のないことである.寝たきり患者は除外した.理由は身体活動の欠如のため筋萎縮に陥っているからである.最終的に422名(男性275名,女性147名)の患者を登録した.平均年齢は63.8±12.1歳で平均透析期間は11.9±8.8年間であった.糖尿病罹患率は全患者の16.3%であった.血液透析は週に3回施行し,一回あたり4.1±0.4時間かかり,ホローファイバーダイアライザー(中空糸透析膜)と重炭酸緩衝液でエンドトキシンフリー透析液(キンダリーAF3P)を使用した.血流速度は 213.6 ± 38.2 ml/分(160から300ml/minの範囲)で透析液流量は 500 ml/min であった.患者は既に栄養士からの教育を終えており,塩分,カリウム,水分,エネルギーは 35 kcal/kg/day, 蛋白質は 1.2 g/kg/day となるよう指導されたが,実際のエネルギーと蛋白質摂取は基本的に任意とした.

 すべての患者から書面でインフォームドコンセントを得た.本研究のプロトコールは磐田市立病院及び丸山病院,静岡大学の倫理委員会によって承認された.

栄養評価とスクリーニングツール

 Table1 に示すように,我々はMISと他の幾つかの簡易栄養スクリーニングツールを評価した.それらは1985年から2005年までに刊行された文献から選択し,2つ以上の独立した研究班によって適切な方法で施行されたものである.これらの参考文献はすべてPubMedデータベースから抽出した.栄養評価は2005年の4月から7月にかけて全患者に実施した.病歴,身体所見,身体計測,血液検査を同じ週に患者ごとに実施した.これらのデータを様々な栄養評価ツールに適用した.低栄養のカットオフ値は大元の研究であるMISで定義されたもののみ使用した.

Malnutrition-Inflammation score

 MIS はKalantar-Zadehらにより開発されたもので,原法又は変法SGAの7つの要素および3つの付加的要素,つまりBMI,血清アルブミン値,TIBCからなる.従来のSGAの要素は病歴と身体所見の両者により点数化される.病歴は5つの要素で構成される.過去6ヶ月間での体重減少,消化器症状,食事摂取量,運動耐容能,透析期間を含む合併症である.身体所見は2つの要素から構成される.皮下脂肪の欠如と筋萎縮である.細胞外液量は透析の間限外濾過により本質的に管理されているため,浮腫や腹水といったSGA原法の3つ目の要素の出現は維持透析患者において栄養指標になりえない.MIS の各々の要素は重症度に応じて0(正常)から3(非常に重症)までの4つのレベルを持つ.全部で10個の要素の合計は0(正常)から30(非常に低栄養)までの範囲である.低栄養のカットオフ値は6と定義されている.低栄養の患者のほとんどがこれで同定されるからである.

Mini Nutritional Assessment-Short Form

 MNA-SF は高齢者の低栄養を検出するために European Society of Parenteral and Enteral Nutrition guideline により推奨されている.MNA には2つの手順がある.MNA-SF は低栄養のスクリーニングに用いられ,full MNA は栄養状態の評価に用いられる.本研究においては MNA-SF を栄養スクリーニングに用いた.MNA-SF は6つの要素からなる.3ヶ月以上の食事摂取減少(0-2),過去3ヶ月間の体重減少(0-3),可動性(0-2),過去3ヶ月間の精神的ストレスまたは急性疾患(0-2),精神神経学的問題(0-2),BMI(0-3)である.合計点数は0から14である.

Nutrition risk score

 NRS はReillyらにより入院患者のために開発された.5つの要素からなり,過去3ヶ月間の意図せぬ体重減少,BMI,食欲,食物を摂取するか保持するかのいずれかあるいは両者の能力,臨床的または医学的あるいはその両者のストレス因子である.それぞれの要素は0から3に点数化され,合計は0から15点の範囲である.

Malnutrition Universal Screening Tool

 成人の MUST は Malnutrition Advisory Group of British Association for Parenteral and Enteral Nutrition によって学問的に使用するために開発された.MUST は独立した3つの要素からなる.BMIを測定した現在の体重の状態(0-2),意図せぬ体重減少(0-2),5日を超えて栄養学的摂取の全くない状態に至る急性疾患の影響(0-2).これらの点数の合計を計算する.

Malnutrition Screening Tool

 MST は Ferguson らにより開発され,急性の入院患者に用いられ,3つの要素からなる.体重減少(0-2),体重減少の量(1-4),経口摂取減少か食欲不振(0-1).合計点数を患者ごとに計算する.

Geriatric nutritional risk index

 GNRI はnutritional risk index (NRI) を高齢者向けに修飾したものである.このインデックスは血清アルブミン値と体重からなり以下の式で計算される.

\displaystyle GNRI=1.489 \times albumin (g/L) + 41.7 \times \frac{body weight}{ideal body weight}\quad(1)

 体重の理想体重比は,患者の体重が理想体重を超える場合は1に設定する.本研究においては,理想体重は身長とBMIを22として計算した値と定義した.BMI22の妥当性のゆえにオリジナルの GNRI の式で用いられる Lorentz 式で計算された値を用いなかった.我々は GNRI 点数を両者の式で比較したが,ほとんど差異は認められなかった.(Figure 1)

身体測定

 透析ごとに前後の体重を測定し,透析後の体重を理想体重として用いた.BMIは理想体重を用いて計算した.シャントのない腕の上腕周囲長 (MAC) と上腕三頭筋皮下脂肪厚 (TSF) をHarpenden 皮下脂肪キャリパーで計測した.

 上腕筋面積 (MAMA) は以下の式で計算した.

\displaystyle MAMA=\frac{(MAC-31.4 \times TSF)^2}{12.56}\quad(2)

 MAMA, MAC, TSF はセンチメートル単位で計測した.

身体組成の計測

 大腿部の筋肉の面積はX線CTを用いて測定した.大腿部の短軸CT像は膝蓋骨上縁から大腿骨の大転子に伸びる線の中点で得た.患者は仰臥位で大腿筋を伸展させて検査した.スライス厚は10mmだった.放射線画像はデジタルスキャンしてPCで解析した.除脂肪大腿筋面積 (TMA) と大腿骨面積 (TBA) はNIH IMAGE で定量化した.これはアメリカNIH の Wayne Rasband が開発したパブリックドメインの面積測定プログラムである. TBA で標準化されたTMA (例えば TMA の TBA に対する比である TMA/TBA など) は筋肉量の指標であり,体格や年齢,性別で調整する必要がない.透析患者において TMA/TBA が10未満であることは低栄養状態と考えられる.体脂肪率は周波数50kHzで50μアンペアの生体電気インピーダンス解析により得られ,タニタのBC-552を用いた.

検査室の手順

 血清アルブミン,クレアチニン,尿素窒素,総コレステロール,中性脂肪,TIBC,ヘマトクリット,リンパ球数を自動計測器による標準的検査手順を用いて測定した.血清プレアルブミンと高感度CRPはレーザー比濁法により定量した.透析量は以下の式で求めた.

\displaystyle Kt/V_{urea}=-\ln(R-0.008 \times t)+(4-(3.5 \times R)) \times \frac{UF}{W}\quad(3)

 Kt/V は単一プール Kt/V であり,R は透析後の透析前に対する血清窒素の比であり,t (hour) は透析時間であり,UF (L) は限外濾過量であり,W (kg) は透析後体重である.食事蛋白摂取量の測定は標準化蛋白窒素出現率(nPNA) で標準化した.これはK/DOQI Hemodialysis Adequacy Working Groupにより刊行された式で計算する.

\displaystyle nPNA (g/kg/day)=\frac{C_0}{36.3+5.48(Kt/V)+53.5/(Kt/V)}+0.168\quad(4)

 C0 (mg/dL) は透析前の血清尿素窒素濃度である.このデータは本研究期間中の週の始めごとに集められて用いた.

統計解析

 それぞれの変数は平均値±標準偏差として表現した.群間の差異は分散分析又はノンパラメトリック検定で評価した.それらは傾斜分布とそれに続くボンフェローニ法を持つデータであった.単回帰解析も用いて変数間の相関を調べた.P値0.05未満を統計学的有意とみなした.

 MIS を参考基準とすることで各々の栄養スクリーニングツールの ROC 曲線を生成した.AUC は栄養上のリスクを判別する確率を示した.それぞれのツールの栄養のカットオフ値は ROC 曲線の最大感度から(1 – 特異度)を差し引いた値で求めた.分割表を作成して各栄養スクリーニングツールとそれぞれの栄養に関する変数又は MIS との間で相関を解析した.これらの表は感度,特異度,正確度,陽性的中率 (PPV),陰性的中率 (NPV) をそれぞれ以下の式によって定義して作成した.

\displaystyle Sensitivity = \frac{true positives}{true positives + false negatives}\quad(5)\vspace{0.2in}\\  Specificity = \frac{true negatives}{true negatives + false positives}\quad(6)\vspace{0.2in}\\  Accuracy = \frac{true positives + true negatives}{total numbers}\qquad(7)\vspace{0.2in}\\  PPV = \frac{true test positives}{all test positives}\quad(8)\vspace{0.2in}\\  NPV = \frac{true test negatives}{all test negatives}\quad(9)

検査後確率を定義するため,陽性尤度比 (LR+) と陰性尤度比 (LR-) を以下の式で計算した.

\displaystyle LR+ = \frac{sensitivity}{1 - specificity}\quad(10)\vspace{0.2in}\\  LR- = \frac{1 - sensitivity}{specificity}\quad(11)

すべての透析解析はGB-STAT および JMP にて行った.

結果

 患者は MIS 点数により3群に分類された.正常栄養群(0-5点),軽度低栄養群(6-10点),中等度から重度低栄養群(11点以上)(Table 2).個々の栄養指標のほとんどは身体所見と生化学検査を含んでおり,MIS 値の高い群ではMIS 値の低い群に比較して有意に栄養指標が低かった(P < 0.05).さらに CRP のように栄養に関連する指標でさえ高 MIS 群では低 MIS 群よりも高かった.これらの結果は MIS を本研究における参照基準として評価することが合理的と考えられることを示している.

 本研究では各種の栄養スクリーニングツールの点数を MIS の3群と比較した(Table 3).これらすべての点数は MIS の高低群間で著明に差が見られた(P < 0.0001).しかしながらこれらのツール間では低栄養を識別する能力は異なった.MIS値6点以上として定義される低栄養では,ROC AUC はGNRI が最大であり,降順に NRS, MNA-SF, MUST, 最後に MST であった(Figure 2).この結果は GNRI が栄養リスクを識別する最も優れたツールであることを示唆している.

 栄養リスクを識別する最も正確なカットオフ値はこれらのROC AUC に由来する(Figure 2).これらのカットオフ値は様々な生化学検査や身体所見の指標の異常値から各栄養スクリーニングツールの感度,特異度,正確度 の計算に用いられる(Table 4).GNRI はこれらのスクリーニングツールの中で低アルブミン血症に最も高い感度,特異度,正確度 を示した.GNRI はまた他の臨床的栄養指標にも高い診断価値を示した.

 GNRI は MIS に対して著明な負の相関を示した(r = – 0.67, P < 0.0001; Figure 3).MISに基づく低栄養の GNRI 値は 91.2 未満で感度,特異度,正確度 の値はそれぞれ0.730, 0.819, 0.787 であった.PPV (0.717) と NPV (0.787) もまた高い点数を示した.GNRI に基づく低栄養のリスクのある患者における検査後確率は尤度比で求められた.GNRI に対する LR+ と LR- はそれぞれ 4.03, 0.330 であった.これは MIS が GNRI による栄養リスクの診断にほとんど変化をもたらさないことを示唆している.本研究において維持透析患者に GNRI を適用することで,GNRI が91.2より大きいか91.2以下であるかでは,種々の栄養関連指標に著明な差がある(P < 0.05)ことがわかった(Table 5).

考察

 毎年世界中で多くの透析患者が増加しているにもかかわらず,患者の増加に見合うだけの栄養士のような健康に関わる職種の人数は増えていない.その結果栄養士一人あたりの透析患者数は増え続けている.1995年には34.9名であったのが2005年には50.3名となった.日本においては83%の栄養士がパートタイム勤務である.フルタイム相当で勤務する各栄養士あたりの透析患者数の平均人数は米国での124名に相当し,英国の128名に相当すると報告されている.腎臓治療チームにおける栄養士の人数が限られているという問題に直面し,大規模施設における何百名もの維持透析患者の中から栄養リスクにある患者を同定するのに,栄養スクリーニングツールは極めて重要となってきた.

 我々は簡易栄養スクリーニングツールの有用性を確認する参考基準としてMIS を使用した.MIS は総合的栄養評価ツールであり,Kalantar-Zadeh らによって開発され,維持透析患者において低栄養と炎症を評価するのに実際的で測定に再現性がある.それは SGA に基づいた定量的栄養評価であり,SGA ではないいくつかの客観的要素,つまり BMI,血清アルブミン値,TIBC を含んでいる.MIS 値は透析患者において罹患率,死亡率,種々の栄養に関する変数,例えば炎症,貧血,エリスロポエチン抵抗性などと相関すると報告されている.Table 2 に示すように,我々は高 MIS 値は多くの個々の栄養計測の劣化と相関することも見出した.それゆえ我々は MIS は栄養スクリーニングツールを評価する参考基準として最も合理的な選択であると確信している.

 MIS が参考基準として使われるときには GNRI は低栄養を予測する最も正確なスクリーニングツールであると考えられる.GNRI は非常にシンプルな式で計算され,血清アルブミン,身長,体重のたった3つの変数しか持たない.この栄養点数は客観的情報のみからなり,それゆえ評価者によるいかなる主観的判断も排除できる.さらにはこの式はコンピュータにより処理できるため,多くの中から低栄養の高リスク患者を呼び出しうる.

 Buzby らにより記述された NRI によると,GNRI は栄養リスクのある高齢の入院患者を同定するために Bouillanne らによって開発された.NRI は若い術後の患者のリスクを点数化するものである.GNRI は高齢入院患者において,栄養関連の罹患率および死亡率について信頼できる予後の指標であると報告されている.GNRI の数式は血清アルブミンと体重減少を含み,高齢患者及び維持透析患者の死亡率に対してはどちらも強い独立危険因子である.

 MIS に基づいて低栄養のリスクを評価する種々の栄養スクリーニングツール間で ROC AUC を比較すると,GNRI の正確度が最も高かった.GNRI はまた本研究においてカットオフ値を 91.2 に用いたときに,維持透析患者の低アルブミン血症と低筋肉量 (TMA/TBA) のリスクを評価するのに最も高い正確度を有していた.GNRI が 91.2 未満であることは MIS 値に基づく低栄養を予測するのに高い感度,特異度,陽性的中率,陰性的中率を示した.さらに,尤度比は検査後確率が検査前確率と比べて殆ど差がないことを示唆している.これらの統計解析の結果は GNRI が栄養リスクにある低栄養透析患者をスクリーニングするのに十分に高い信頼性を有することを示唆している.

 GNRI のカットオフ値は本研究では ROC AUC から 91.2 と定義された.Bouillanne により定義されたオリジナルの 98 より低い.それは栄養リスクの違いを反映している.Bouillanne による定義では高齢の低栄養患者とはアルブミン値 3.8 g/dL, 理想体重の 95 % とされているが,一方維持透析患者においてはアルブミン 3.5 g/dL, BMI 18.5 が用いられているためである.

 カットオフ値は本研究において ROC AUC の最大感度から (1 – 特異度) を差し引いた値と定義した.この点は感度の最大値と(1 – 特異度)の最小値が最も良いカットオフ値であることを意味している.もし栄養スクリーニングツールがスクリーニングだけに用いられ,もしそれがもっと詳細な栄養評価をサポートしていたなら,栄養リスクを検出するのにもっと高いカットオフ値を設定することさえ可能であった.この処理は高い感度が得られるにもかかわらず,特異度も高い.しかしながら GNRI のカットオフ値に 91.2 を用いる時に PPV および NPV の検査後確率が高い値を示している.これはそれ以上の評価は不要であろうことを示唆している.

 GNRI と比較すると他の簡易栄養スクリーニングツールは,MIS による低栄養を予測する ROC AUC からは,あまり正確でないように見える.一つの可能性として,食欲や経口摂取量,精神的ストレスといった曖昧さがスクリーニングに組み込まれているということがあるのかもしれない.これらの計測値を点数化することは不正確な主訴に依存しており,検査者の手腕に依存している.他の理由としてこれらの研究に用いられた患者の人数が挙げられるかもしれない.殆どの栄養スクリーニングは入院患者や術後の患者,または高齢者のために開発されたものである.GNRI もまた高齢者のために開発されたものであるにもかかわらず,GNRI の2つの要素(血清アルブミンとBMI)は透析患者の罹患率と死亡率によく相関することが証明された.さらに,これらの要素は透析患者における栄養,炎症,貧血の側面の代表値であることも明らかになった.それゆえ,GNRI が透析患者における最も正確な栄養スクリーニングツールとして登場することは驚くには当たらない.

 本研究の限界はこれらの栄養スクリーニングツールを基本的なリスクである罹患率や死亡率について直接十分に検証出来なかった点である.一つの客観的栄養スクリーニングは栄養リスクがあり,臨床的予後に高いリスクを有する患者を同定することである.本研究の結果以下のことが示唆された.維持透析患者の将来の入院と死亡と相関することが知られている MIS と共に,GNRI は最大の正確度をもつ.この事実は GNRI が患者の予後を規定することを意味している.しかしながら,維持透析患者における栄養スクリーニングツールとしての GNRI の意義を確立するには,更に大規模な縦断的研究が必要であろう.
結論として,本研究は GNRI が最も簡易で,かつ数ある栄養スクリーニングツールの中でも MIS による低栄養の維持透析患者を同定するには最も正確なリスク指標たりうることを示した.GNRI を導入することで,透析患者の栄養評価の効率性と合理化が改善するであろう.