スポンサーリンク

[Excel関数]水平直円柱セグメントの体積や表面積を計算するHCYLSEGMENTカスタムワークシート関数群

説明

HCYLSEGMENTカスタムワークシート関数群は、水平直円柱セグメントの体積や表面積などを計算します。直円柱セグメントとは、直円柱を円に対して直角に分割した形状の立体です。水平直円柱セグメントとは、直円柱セグメントを横倒しにした立体です。缶ジュースを横に倒した際の、中のジュースの形と一致します。

HCYLSEGMENTカスタムワークシート関数群には、下記の関数が含まれます。ワークシート関数だけで(VBAを使用せずに)同じことをしたい場合はコチラの記事を参照して下さい。

関数名機能関数名の由来
HCYLSEGMENTSUR水平直円柱セグメントの半径、高さ及び幅から、水平直円柱セグメントの表面積を計算します。Horizontal CYLindrical SEGMENT SURface area
HCYLSEGMENTVOL水平直円柱セグメントの半径、高さ及び幅から、水平直円柱セグメントの体積を計算します。Horizontal CYLindrical SEGMENT VOLume

動作例

計算式


項目
計算式補足
$$ 中心角(\theta) $$$$ \theta=2\cos^{-1} \left(1-\frac{h}{r} \right) $$
$$ 円弧(a) $$$$ a=r\theta $$
$$ 弦(c) $$$$ c=2\sqrt{h(2r-h)} $$
$$ 表面積(S) $$$$ S= F1.A + F2.A + F3.A $$
$$ 体積(V) $$$$ V=F1.A\cdot w $$
$$ 側面の面積(F1.A) $$$$ F1.A=\frac{\theta}{2}r^{2}-(r-h)\sqrt{h(2r-h)} $$
$$ 底面展開図の面積(F2.A) $$$$ F2.A=w \cdot a$$
$$ 上面の面積(F3.A) $$$$ F3.A=w \cdot c$$

構文

関数名第1引数第2引数第2引数戻り値
RCCYLINDERSUR半径高さ表面積
RCCYLINDERVOL半径高さ体積
引数説明引数の指定既定値
半径水平直円柱セグメントの半径を数値で指定します。必須(無し)
高さ水平直円柱セグメントの高さを数値で指定します。必須(無し)
水平直円柱セグメントの幅を数値で指定します。必須(無し)

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。

'[Excel関数]水平直円柱セグメントの体積や表面積を計算するHCYLSEGMENTカスタムワークシート関数群
'Copyright (c) 2020 黒い箱の中 All Rights Reserved.
'This software is released under the MIT License<https://opensource.org/licenses/MIT>.
'このソフトウェアはMITライセンスの下でリリースされています<https://opensource.org/licenses/MIT>。


'* @fn Public Function HCYLSEGMENTSUR(ByVal r As Variant, ByVal h As Variant, ByVal w As Variant) As Variant
'* @brief 水平直円柱セグメントの半径、高さ及び幅から水平直円柱セグメントの表面積を求めます。
'* @param[in] r 水平直円柱セグメントの半径を指定します。
'* @param[in] h 水平直円柱セグメントの高さを指定します。
'* @param[in] w 水平直円柱セグメントの幅を指定します。
'* @return Variant 水平直円柱セグメントの表面積を返します。
'* @note 関数名の由来:Horizontal CYLindrical SEGMENT SURface area
'* @note 直円柱セグメントとは、直円柱を円に対して直角に分割した形状の立体です。
'* @note 水平直円柱セグメントとは、直円柱セグメントを横倒しにした立体です。
'* @note 缶ジュースを横に倒した際の、中のジュースの形と一致します。
Public Function HCYLSEGMENTSUR(ByVal r As Variant, ByVal h As Variant, ByVal w As Variant) As Variant

    '中心角
    Dim rad As Double
    Dim cs As Double: cs = 1 - h / r

    Select Case (cs)
    Case 1:     rad = 0
    Case -1:    rad = 6.28318530717959 '2Pi
    Case Else:  rad = 2 * (Atn(-cs / (-cs * cs + 1) ^ 0.5) + 1.5707963267949) '1.5707... = 2 * Atn(1)
    End Select
    
    
    '円弧
    Dim a As Double: a = r * rad
    
    '弦
    Dim c As Double: c = 2 * (h * (2 * r - h)) ^ 0.5
    
    '側面、底面及び上面の面積
    Dim f1a As Double: f1a = rad / 2 * r ^ 2 - (r - h) * (h * (2 * r - h)) ^ 0.5
    Dim f2a As Double: f2a = a * w
    Dim f3a As Double: f3a = c * w
    
    HCYLSEGMENTSUR = f1a + f2a + f3a

End Function

'* @fn Public Function HCYLSEGMENTVOL(ByVal r As Variant, ByVal h As Variant, ByVal w As Variant) As Variant
'* @brief 水平直円柱セグメントの半径、高さ及び幅から水平直円柱セグメントの体積を求めます。
'* @param[in] r 水平直円柱セグメントの半径を指定します。
'* @param[in] h 水平直円柱セグメントの高さを指定します。
'* @param[in] w 水平直円柱セグメントの幅を指定します。
'* @return Variant 水平直円柱セグメントの体積を返します。
'* @note 関数名の由来:Horizontal CYLindrical SEGMENT VOLume
'* @note 直円柱セグメントとは、直円柱を円に対して直角に分割した形状の立体です。
'* @note 水平直円柱セグメントとは、直円柱セグメントを横倒しにした立体です。
'* @note 缶ジュースを横に倒した際の、中のジュースの形と一致します。
Public Function HCYLSEGMENTVOL(ByVal r As Variant, ByVal h As Variant, ByVal w As Variant) As Variant
    
    '中心角
    Dim rad As Double
    Dim cs As Double: cs = 1 - h / r

    Select Case (cs)
    Case 1:     rad = 0
    Case -1:    rad = 6.28318530717959 '2Pi
    Case Else:  rad = 2 * (Atn(-cs / (-cs * cs + 1) ^ 0.5) + 1.5707963267949) '1.5707... = 2 * Atn(1)
    End Select
    
    Dim f1a As Double: f1a = rad / 2 * r ^ 2 - (r - h) * (h * (2 * r - h)) ^ 0.5
    
    HCYLSEGMENTVOL = f1a * w
End Function

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

本プログラムのライセンスは「The MIT License」を適用しています。

本プログラムは無償で利用できますが、本プログラム内の著作権表示及びライセンス表示は削除せずに表示しておいて下さい。

必須ではございませんが、本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡頂けると幸いです。

スポンサーリンク