Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10607 / 13644 ツリー ←次へ | 前へ→

【20812】単位の変換方法 TOKU 04/12/20(月) 19:54 質問[未読]
【20813】Re:単位の変換方法 かみちゃん 04/12/20(月) 21:24 回答[未読]
【20814】Re:単位の変換方法 ichinose 04/12/20(月) 22:05 発言[未読]
【20818】Re:単位の変換方法 訂正 ichinose 04/12/21(火) 10:11 発言[未読]
【20821】Re:単位の変換方法 訂正 TOKU 04/12/21(火) 12:44 お礼[未読]
【20853】Re:単位の変換方法 訂正 TOKU 04/12/22(水) 21:54 質問[未読]
【20855】Re:単位の変換方法 訂正 ichinose 04/12/22(水) 23:07 回答[未読]
【20859】Re:単位の変換方法 訂正 TOKU 04/12/23(木) 0:11 お礼[未読]
【20861】Re:単位の変換方法 訂正 ichinose 04/12/23(木) 2:02 発言[未読]
【20897】Re:単位の変換方法 訂正 TOKU 04/12/23(木) 20:23 お礼[未読]

【20812】単位の変換方法
質問  TOKU  - 04/12/20(月) 19:54 -

引用なし
パスワード
   セルA1に0.3
セルB1に0.3
セルC1に1.0
と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
うまくいきません。
※0.3は30分という意味です。(1.0は1時間)
 0.3+0.3=1.0(H)

何か関数を入れると良いのでしょうか?
それともマクロを入れるのでしょうか?

知っている方がいましたら教えて下さい。m(_ _)m

【20813】Re:単位の変換方法
回答  かみちゃん  - 04/12/20(月) 21:24 -

引用なし
パスワード
   こんちには。かみちゃん です。

>セルA1に0.3
>セルB1に0.3
>セルC1に1.0
>と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
>うまくいきません。
>※0.3は30分という意味です。(1.0は1時間)
> 0.3+0.3=1.0(H)

いろいろ方法はあるかと思いますが、D1に次の式を入れてください。
長いですが、一行の関数式です。
=TIME(INT(SUM(INT(A1/1)*60+MOD(A1,1)*100,INT(B1/1)*60+MOD(B1,1)*100,INT
(C1/1)*60+MOD(C1,1)*100)/60),MOD(SUM(INT(A1/1)*60+MOD(A1,1)*100,INT(B1/1)
*60+MOD(B1,1)*100,INT(C1/1)*60+MOD(C1,1)*100)/60,1)*60,0)

ちなみに以下の式で分単位に換算できます。
=INT(A1/1)*60+MOD(A1,1)*100

【20814】Re:単位の変換方法
発言  ichinose  - 04/12/20(月) 22:05 -

引用なし
パスワード
   TOKUさん、かみちゃん さん、こんばんは。

>セルA1に0.3
>セルB1に0.3
>セルC1に1.0
>と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
>うまくいきません。
>※0.3は30分という意味です。(1.0は1時間)
> 0.3+0.3=1.0(H)
>

こういう計算をしなければならない場合もあるんですねえ・・・。

0.3を0.5に変換しなければなりませんね・・・。

ユーザー定義関数にしました。

関数名     : Addtime_Sp
機能      : 時間の足し算を行う
          小数点以下は分です つまり
          0.3は30分という意味です、  です
呼び出し形式  : =Addtime_Sp(a1,a2,a3,・・)


>セルA1に0.3
>セルB1に0.3
>セルC1に1.0
>と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
の場合、
セルD1に

「=addtime_sp(A1:C1)」

又は、

「=addtime_sp(A1,B1,C1)」


ではコードです。標準モジュールに
'===================================================
Function Addtime_Sp(ParamArray hh()) As Double
  Addtime_Sp = 0
  For idx = LBound(hh()) To UBound(hh())
   For Each chh In hh(idx)
    Addtime_Sp = Addtime_Sp + Int(chh) + TimeSerial(0, (chh - Int(chh)) * 100, 0) * 24
    Next
   Next idx
End Function


確認してみて下さい

【20818】Re:単位の変換方法 訂正
発言  ichinose  - 04/12/21(火) 10:11 -

引用なし
パスワード
   TOKUさん、かみちゃん さん、こんにちは。

>
>>セルA1に0.3
>>セルB1に0.3
>>セルC1に1.0
>>と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
>>うまくいきません。
>>※0.3は30分という意味です。(1.0は1時間)
>> 0.3+0.3=1.0(H)
>>
>
>こういう計算をしなければならない場合もあるんですねえ・・・。
>
>0.3を0.5に変換しなければなりませんね・・・。
>
>ユーザー定義関数にしました。
>
>関数名     : Addtime_Sp
>機能      : 時間の足し算を行う
>          小数点以下は分です つまり
>          0.3は30分という意味です、  です
>呼び出し形式  : =Addtime_Sp(a1,a2,a3,・・)
>
>例
>>セルA1に0.3
>>セルB1に0.3
>>セルC1に1.0
>>と入力した時にセルD1のTotalが2.0(H)と表示したいのですが、
>の場合、
>セルD1に
>
>「=addtime_sp(A1:C1)」
>
>又は、
>
>「=addtime_sp(A1,B1,C1)」
>
>
>ではコードです。標準モジュールに
>'===================================================
>Function Addtime_Sp(ParamArray hh()) As Double
>  Addtime_Sp = 0
>  For idx = LBound(hh()) To UBound(hh())
>   For Each chh In hh(idx)
>    Addtime_Sp = Addtime_Sp + Int(chh) + TimeSerial(0, (chh - Int(chh)) * 100, 0) * 24
>    Next
>   Next idx
>End Function
私、仕様、間違ってたかもしれません。

'==========================================================
Function Addtime_Sp(ParamArray hh()) As Double
  Addtime_Sp = 0
  adddec = 0
  For idx = LBound(hh()) To UBound(hh())
   For Each chh In hh(idx)
    Addtime_Sp = Addtime_Sp + Int(chh)
    adddec = adddec + (chh - Int(chh)) * 100
    Next
   Next idx
  Addtime_Sp = Addtime_Sp + (adddec \ 60) + (adddec Mod 60) / 100
End Function
こっちでどうでしょうか?

【20821】Re:単位の変換方法 訂正
お礼  TOKU  - 04/12/21(火) 12:44 -

引用なし
パスワード
   ichinose さん、かみちゃん さん

ご教授ありがとう御座いました。
ichinose さんの新しいモジュールでやってみたら思っていたことが出来ました。
また機会があれば宜しくお願いしますm(_ _)m

【20853】Re:単位の変換方法 訂正
質問  TOKU  - 04/12/22(水) 21:54 -

引用なし
パスワード
   ひとつ問題が発生しました。
0.3+0.3=1.0(H)までの単位変換方法は良かったのですが−(マイナス)の場合がうまく表示
出来ません。
(例)0.3+(-0.3)=0.0(H)

何か対策はないでしょうか?

【20855】Re:単位の変換方法 訂正
回答  ichinose  - 04/12/22(水) 23:07 -

引用なし
パスワード
   ▼TOKU さん:
こんばんは。

>ひとつ問題が発生しました。
>0.3+0.3=1.0(H)までの単位変換方法は良かったのですが−(マイナス)の場合がうまく表示
>出来ません。
>(例)0.3+(-0.3)=0.0(H)
>
>何か対策はないでしょうか?
投稿したコード内のInt(・・)関数を全てFix(・・)に変更してください。

【20859】Re:単位の変換方法 訂正
お礼  TOKU  - 04/12/23(木) 0:11 -

引用なし
パスワード
   ▼ichinose さん:
>▼TOKU さん:
>こんばんは。
>
>>ひとつ問題が発生しました。
>>0.3+0.3=1.0(H)までの単位変換方法は良かったのですが−(マイナス)の場合がうまく表示
>>出来ません。
>>(例)0.3+(-0.3)=0.0(H)
>>
>>何か対策はないでしょうか?
>投稿したコード内のInt(・・)関数を全てFix(・・)に変更してください。

早速のご回答有難う御座います。
Fixに変更したら出来ました。
また機会があればご教授お願いしますm(_ _)m

【20861】Re:単位の変換方法 訂正
発言  ichinose  - 04/12/23(木) 2:02 -

引用なし
パスワード
   ▼TOKU さん:
>早速のご回答有難う御座います。
>Fixに変更したら出来ました。
Fixに訂正しただけでは正しい結果が得られない場合もありました。
これ、一度全部、分単位に変換しないとダメみたい!!
'===============================================
Function Addtime_Sp(ParamArray hh()) As Double
  Addtime_Sp = 0
  For idx = LBound(hh()) To UBound(hh())
   For Each chh In hh(idx)
    Addtime_Sp = Addtime_Sp + Fix(chh) * 60 + (chh - Fix(chh)) * 100
    Next
   Next idx
  Addtime_Sp = (Addtime_Sp \ 60) + (Addtime_Sp Mod 60) / 100
End Function

【20897】Re:単位の変換方法 訂正
お礼  TOKU  - 04/12/23(木) 20:23 -

引用なし
パスワード
   ▼ichinose さん:
>▼TOKU さん:
>>早速のご回答有難う御座います。
>>Fixに変更したら出来ました。
>Fixに訂正しただけでは正しい結果が得られない場合もありました。
>これ、一度全部、分単位に変換しないとダメみたい!!
>'===============================================
>Function Addtime_Sp(ParamArray hh()) As Double
>  Addtime_Sp = 0
>  For idx = LBound(hh()) To UBound(hh())
>   For Each chh In hh(idx)
>    Addtime_Sp = Addtime_Sp + Fix(chh) * 60 + (chh - Fix(chh)) * 100
>    Next
>   Next idx
>  Addtime_Sp = (Addtime_Sp \ 60) + (Addtime_Sp Mod 60) / 100
>End Function
本当ですね。
ありがとうございます。
助かりました。

10607 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free