[Excel関数]FAO/WHO/UNUの式により基礎代謝量を計算するBMRWHOカスタムワークシート関数

2020年12月6日

概要

BMRWHOカスタムワークシート関数は、FAO、WHO及びUNUで採用されている式により、1日の基礎代謝量(Basal metabolic rate = BMR)を計算します。他の計算方法で基礎代謝量を計算した場合は、下記のページを参照して下さい。

動作例

機能

性別、体重(kg)、身長(cm)及び年齢より、1日の基礎代謝量(kcal/日)を算出します。この関数は、10歳以上の基礎代謝量を計算することができます。

計算式

本関数が基礎代謝量の計算に使用している計算式を下記に示します。計算式の引用元は「Energy and protein requirements Report of a Joint FAO/WHO/UNU Expert Consultation(タンパク質・アミノ酸の必要量  WHO/FAO/UNU 合同専門協議会報告)」の「Annex 1 EQUATIONS FOR THE PREDICTION OF BASAL METABOLIC RATE(基礎代謝量の予測式)」です。なお、同様の式は厚生労働省の「日本人の食事摂取基準(2020年版」にも掲載されておりますが、10~17歳の式が未掲載です。また、30~59歳女性の計算式に一部差異がありますが、前述のリンク先の方で計算しております。なお、差異がある個所は体重と身長の間の演算子です( \( 36.4W – 104.6\frac{H}{100} \)と\(36.4W + 104.6\frac{H}{100} \) )。

年齢男性の基礎代謝量 \( (kcal/day) \)女性の基礎代謝量\( (kcal/day) \)
$$ 10~17 $$$$ \frac{69.4W + 322.2\frac{H}{100} + 2392}{4.186} $$$$ \frac{30.9W + 2016.6\frac{H}{100} + 907}{4.186} $$
$$ 18~29 $$$$ \frac{64.4W – 113.0\frac{H}{100} + 3000}{4.186} $$$$ \frac{55.6W + 1397.4\frac{H}{100} + 146}{4.186} $$
$$ 30~59 $$$$ \frac{47.2W + 66.9\frac{H}{100} + 3769}{4.186} $$$$ \frac{36.4W – 104.6\frac{H}{100} + 3619}{4.186} $$
$$ 60以上 $$$$ \frac{36.8W + 4719.5\frac{H}{100} – 4481}{4.186} $$$$ \frac{38.5W + 2665.2\frac{H}{100} – 1264}{4.186} $$
\( W:体重(kg) \)
\( H:身長(cm) \)
\( 4.186:カロリーとジュールの換算比 \)

構文

BMRWHO(性別, 体重, 身長, 年齢 )
BMRFAO(性別, 体重, 身長, 年齢 )
BMRUNU(性別, 体重, 身長, 年齢 )

引数説明引数の指定既定値
性別性別を整数または文字列で指定します。整数の場合は、男性が1、女性が2です。
文字列の場合は、文字列の先頭文字が"男","M"又は"m"の場合は男性、"女","F"又は"f"の場合は女性として処理します。
必須(無し)
体重体重をkgで指定します。必須(無し)
身長身長をcmで指定します。必須(無し)
年齢年齢を年で指定します。10以上の数値を入力して下さい。必須(無し)

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。
' [Excel関数]FAO/WHO/UNUの式により基礎代謝量を計算するBMRWHOカスタムワークシート関数 
' Copyright (c) 2020-2024  黒箱 
' This software is released under the GPLv3. 
' このソフトウェアはGNU GPLv3の下でリリースされています。 

'* @fn Public Function BMRWHO(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
'* @brief WHOの式により、基礎代謝量(Basal metabolic rate = BMR)を算出します。
'* @param[in] Sex 性別を整数または文字列で指定します。整数の場合は、男性が1、女性が2です。文字列の場合は、文字列の先頭文字が"男","M"又は"m"の場合は男性、"女","F"又は"f"の場合は女性として処理します。
'* @param[in] Weight 体重をkgで指定します。
'* @param[in] Height 身長をcmで指定します。
'* @param[in] Age 年齢を年で指定します。10以上の数値を入力してください。
'* @return Variant 基礎代謝量をkcal/dayで返します。
'* @details
'* @note 計算式参照元1:http://www.fao.org/3/aa040e/AA040E15.htm
'* @note 計算式参照元2:厚生労働省「日本人の食事摂取基準(2020年版)」p72 表4
'*
Public Function BMRWHO(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
Const UNKNOWN_GENDER = 0
Const MALE As Long = 1 '男性
Const FEMALE As Long = 2 '女性

    '男女の判別
    Dim SexNo As Long
    If (VarType(Sex) = vbString) Then
        
        Select Case (Left(UCase(Sex), 1))
        Case "男", "M": SexNo = MALE
        Case "女", "F": SexNo = FEMALE
        Case Else:  SexNo = UNKNOWN_GENDER
        End Select
    
    Else
        SexNo = CLng(Sex)
        If ((SexNo <> MALE) And (SexNo <> FEMALE)) Then SexNo = UNKNOWN_GENDER
    
    End If
        
    If (SexNo = UNKNOWN_GENDER) Then
        BMRWHO = CVErr(2036) 'CVErr(2036) '#NUM!
        Exit Function
    End If
    
    '10歳未満は計算不可
    If (Age < 10) Then
        BMRWHO = CVErr(2036) 'CVErr(2036) '#NUM!
        Exit Function
    End If
    
    
    'BMR計算
    Dim Result As Variant
    
    Height = Height / 100 'オリジナルの計算式は身長がメートル単位なので、引数の単位(cm)から換算
    
    If (SexNo = MALE) Then
        Select Case (Int(Age))
        Case 10 To 17:  Result = ((69.4 * Weight) + (322.2 * Height) + 2392)
        Case 18 To 29:  Result = ((64.4 * Weight) - (113 * Height) + 3000)
        Case 30 To 59:  Result = ((47.2 * Weight) + (66.9 * Height) + 3769)
        Case Else:      Result = ((36.8 * Weight) + (4719.5 * Height) - 4481) '60歳以上
        End Select
    
    Else
        Select Case (Int(Age))
        Case 10 To 17:  Result = ((30.9 * Weight) + (2016.6 * Height) + 907)
        Case 18 To 29:  Result = ((55.6 * Weight) + (1397.4 * Height) + 146)
        Case 30 To 59:  Result = ((36.4 * Weight) - (104.6 * Height) + 3619)
        Case Else:      Result = ((38.5 * Weight) + (2665.2 * Height) - 1264) '60歳以上
        End Select
    
    End If

    BMRWHO = Result / 4.186 'Joule to cal
End Function

'* @fn Public Function BMRFAO(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
'* @brief FAOの式により、基礎代謝量(Basal metabolic rate = BMR)を算出します。
'* @param[in] Sex 性別を整数または文字列で指定します。整数の場合は、男性が1、女性が2です。文字列の場合は、文字列の先頭文字が"男","M"又は"m"の場合は男性、"女","F"又は"f"の場合は女性として処理します。
'* @param[in] Weight 体重をkgで指定します。
'* @param[in] Height 身長をcmで指定します。
'* @param[in] Age 年齢を年で指定します。10以上の数値を入力してください。
'* @return Variant 基礎代謝量をkcal/dayで返します。
'* @details この関数はBMRWHOの別名です。詳細はBMRWHOを参照して下さい。
'*
Public Function BMRFAO(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
    BMRFAO = BMRWHO(Sex, Weight, Height, Age)
End Function

'* @fn Public Function BMRUNU(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
'* @brief UNUの式により、基礎代謝量(Basal metabolic rate = BMR)を算出します。
'* @param[in] Sex 性別を整数または文字列で指定します。整数の場合は、男性が1、女性が2です。文字列の場合は、文字列の先頭文字が"男","M"又は"m"の場合は男性、"女","F"又は"f"の場合は女性として処理します。
'* @param[in] Weight 体重をkgで指定します。
'* @param[in] Height 身長をcmで指定します。
'* @param[in] Age 年齢を年で指定します。10以上の数値を入力してください。
'* @return Variant 基礎代謝量をkcal/dayで返します。
'* @details この関数はBMRWHOの別名です。詳細はBMRWHOを参照して下さい。
'*
Public Function BMRUNU(ByVal Sex As Variant, ByVal Weight As Double, ByVal Height As Double, ByVal Age As Double) As Variant
    BMRUNU = BMRWHO(Sex, Weight, Height, Age)
End Function

プログラムの利用について

本プログラムのライセンスは「GPL-3.0(GNU General Public License version 3)」を適用しています。

本プログラムを私的に利用(個人利用、並びに企業またはその他の組織の内部利用)される方は、本プログラムを無償で利用できると考えて差し支え御座いません。その場合でも、本プログラム内の著作権及びライセンスの表示は削除せずに表示しておいて下さい。

その他の方は、GNU 一般公衆利用許諾書(GNU GENERAL PUBLIC LICENSE)バージョン3の内容をご理解頂き、適正な利用をお願い致します。同ライセンス以外での利用をご希望の方はお問い合わせフォームよりご連絡下さい。

本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡下さい。

スポンサーリンク