みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

60進数と10進数の足し算について

エクセルの計算式で整数部分を10進数、小数部分を60進数と分離して足し算する方法はないでしょうか?
例えば1.30+1.30は3.00、1.45+2.15.1.30は5.30というように答えを足したいのですが。
どなたかご教授お願いします。

投稿日時 - 2004-06-04 00:58:35

QNo.880319

暇なときに回答ください

質問者が選んだベストアンサー

マクロを使った計算です。小数点以下は2桁しか無いものと仮定します。
Function sump60(ParamArray InDt() As Variant)
Dim mySeisu As Long, myShosu As Long
Dim Ix As Long
Dim WrkJ, WrkK

For Each WrkJ In InDt
  If IsNumeric(WrkJ) Then
    mySeisu = mySeisu + Int(WrkJ)
    myShosu = myShosu + (WrkJ - Int(WrkJ)) * 100
  End If
  If IsArray(WrkJ) Then
    For Each WrkK In WrkJ
      mySeisu = mySeisu + Int(WrkK)
      myShosu = myShosu + (WrkK - Int(WrkK)) * 100
    Next WrkK
  End If
Next WrkJ
mySeisu = mySeisu + Int(myShosu / 60)
myShosu = myShosu Mod 60
sump60 = mySeisu + myShosu / 100
End Function

使用方法は、計算したいデータがA1,A2,A3セルに入力されているとして、
=sump60(A1,A2,A3)
または
=sump60(A1:A3)
あるいは直接値を指定します。(必ずコンマで区切って下さい。)
=sump60(1.45,2.15,1.30)

投稿日時 - 2004-06-04 04:04:00

お礼

ありがとうございます。
マクロを組む能力がないために関数で考えていたのですが親切にありがとうございます。
この方法も試してみます。

投稿日時 - 2004-06-04 10:37:22

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

>普通「1:30」と入力するのはNGなんです。
A1:A3に1.45 2.15 1.30があるとして
=TEXT(SUMPRODUCT(TEXT(A1:A3*100,"0"":""00")*1),"h.mm")+0

TEXT関数で一度時系列に変換、SUMPRODUCTで合計後に
TEXT関数で数値書式に戻し+0で数値化です。

投稿日時 - 2004-06-04 09:25:30

お礼

ありがとうございます。
こんなシンプルでやりたいことができるとは思いませんでした。

投稿日時 - 2004-06-04 10:33:11

ANo.6

A1からA3にデータがある想定です。

=TRUNC(SUM(A1:A3))+(SUM(A1:A3)-TRUNC(SUM(A1:A3)))/60*100

投稿日時 - 2004-06-04 08:05:11

お礼

ありがとうございます。
しかしこの方法だと小数部分が1を越えたときにエラーが出てしまいます。

投稿日時 - 2004-06-04 10:23:51

ANo.5

>時間として扱うのはNGなんです。
この意味が良く取れませんが、下記は混合型?
A1,B1、C1の書式を数値で小数点以下2桁に設定します。
そしてA1に1.45
B1に2.15
C1に1.30と入力します。
すると上記の通りに表示されます。
A2セルに式=INT(A1)/24+(A1-INT(A1))*100/(24*60)
を入れて、A2の式をB2、C3に複写します。
B2は=INT(B1)/24+(B1-INT(B1))*100/(24*60)
です。C2は略。
値はA2:C2は0.0729166670.093750.0625
これはエクセル時刻値と同じです。
例えばD2に=A2+B2+C2または=SUM(A2:C2)を入れます。
書式を時刻にして5:30となります。
●エクセルの時間計算の機能を借りないならば
=INT(A1)+INT(B1)+INT(C1)+INT(((A1-INT(A1))*100+(B1-INT(B1))*100+(C1-INT(C1))*100)/60)+MOD(((A1-INT(A1))*100+(B1-INT(B1))*100+(C1-INT(C1))*100),60)/100
となる。考えは単純ですが式が長くなって、これで良いか検証し難い。結果は5.3、書式を数値で小数点以下2桁に設定して5.30となりましたが。
セルが沢山あれば(上記のような式をこれ以上長く続けていられないから)、ピリオドを区切り文字として、整数部分と小数部分を2つのセルに分け、小数部分をX100して、それぞれを加え、小数点以下の部分の合計を÷60をした整数部を繰り上げるのが普通でしょう。

投稿日時 - 2004-06-04 08:03:41

お礼

ありがとうございます。
そうですか。検証してみます。

投稿日時 - 2004-06-04 10:29:49

ANo.3

ARC

>もう少し具体的な回答はないでしょうか?

参考URLは役に立ちませんでしたか?
それ以外の回答としては、例えばセル上に文字として「5.30」などと入力しておき、そういった形で入力されたデータ専用の足し算関数を自作する、なんて方法も考えられますね。

○参考URLの例ではどの部分が仕様にそぐわないのか
或いは、
○セル上にどのように数値が格納されていて、どのように演算を行いたいのか
といったことが判れば、もう少し踏み込んだ回答が書けるかもしれません。


Excel上で10進数以外の演算を行うのは、結構厄介なのです。
場合によっては、「時間で入力するのはNG」という仕様の方を潰した方が、効率が良いかもしれません。

投稿日時 - 2004-06-04 03:02:27

お礼

ありがとうございます。
>場合によっては、「時間で入力するのはNG」という仕様の方を潰した方が、効率が良いかもしれません。
テンキーのみで入力したいのでここだけは外せなくて・・・

投稿日時 - 2004-06-04 10:34:05

ANo.2

セルの表示形式を時間にしてしまったらいかがですか。
手っ取り早いですよ。

セルA1に1:45
セルA2に2:15
セルA3に1:30
セルA4を =A1+A2+A3
とすれば、セルA4に5:30とおそらく表示されるはずです。

なお、単位を時から分に変えて、例えば1:45を0:01:45にするなどしてもよいでしょう。

投稿日時 - 2004-06-04 01:38:15

お礼

回答ありがとうございます。
時間として扱うのはNGなんです。
他の回答はないでしょうか?
どうぞよろしくお願いします。

投稿日時 - 2004-06-04 02:04:37

ANo.1

ARC

普通に、「1:30」ってな感じで、時間として入力してはいけないのでしょうか?

セルの書式の表示形式を「[h].mm」と設定すれば、見かけ上は「1.30」のように表示されますし。

どうしても時間として扱えない場合でしたら、以前回答した「Window Excel上にて、ダース同士の計算」(参考URL)が役に立つかもしれません。
12進数→60進数と変更するだけで対応出来る気がします。(あくまでも「気がする」だけですが(^^;)

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=806812

投稿日時 - 2004-06-04 01:33:53

お礼

回答ありがとうございます。
普通「1:30」と入力するのはNGなんです。
もう少し具体的な回答はないでしょうか?

投稿日時 - 2004-06-04 02:03:52

あなたにオススメの質問