プロが教えるわが家の防犯対策術!

たびたび申し訳ありません。

こちらで教えてもらった式をセルに設定すると
それがウマく動くときと動かないときがあります。
A1 1.3(1日と3時間)
A2 1.6(1日と6時間)
A3 2.9(2日と9時間)になるトコロを3.1(3日と1時間)
とさせるのに
=INT(A1+A2)+DEC2OCT(INT(MOD(A1+A2,1)*10))/10
あるいは
=INT(A1+A2)+INT(MOD(A1+A2,1)/0.8)+MOD(MOD(A1+A2,1),0.8)
を設定すればいいようなのですが、セルによって動くときと
動かないときがあって、原因がわからないでいます
(参照URL http://okweb.jp/kotaeru.php3?q=1272124)。
申し訳ありませんが、ご教授ください。当方完全な文系です。
本当にご迷惑かけます(涙

A 回答 (17件中1~10件)

動かないときの


A1とA2を教えてください
    • good
    • 0

> A1 1.3(1日と3時間)


> A2 1.6(1日と6時間)
> A3 2.9(2日と9時間)になるトコロを…
> とさせるのに

と、A1とA2のセルを元にA3のセルに計算結果を表示させる話が、

> セルによって動くときと
> 動かないときがあって、

A3だけでない、複数のセルの話になっていませんか?
他のセルに数値や数式を設定したのなら、その条件を書いてもらえないと、何が問題になっているのか読み取れません。

B1,B2に数値、B3にはA3をコピー&ペースト。
C1,C2に数値、C3にはA3をコピー&ペースト。

と、→向きに広げていくのなら問題ないハズです。
    • good
    • 0

>セルによって動くときと動かないときがあって、原因がわからないでいます


セルによって、動く動かないというのは、セルの位置なのでしょうか?

メニューのツール-オプション-計算方法-自動
になっているのでしょうか?

それから、関係ないのですが、「セルによって動く」という表現は、Excelでは動的な印象から、VBAの質問と受け取られますので、なるべく正確に表現してください。

この回答への補足

あっWendy02さん、たびたびお手数かけます。皆さん同様の質問を
していただいてますので、以下一括して正確な状態を補足致します。
当初の条件とちがうやん!というトコロもあると思いますが
どうかご容赦ください。

  A  B  C 
1 5.4  0.0  5.4 ←この行のCは問題なかった
2 5.3  0.7 6.0 ←本当は6.2にならなくてはいけない
3 10.1 3.7 14.0 ←ここのCはまた問題なくなっている

このように動いてしまうんです。まず式をC1のセルに設定して
+マークを下に引っ張ってコピーしたんですが、マズいでしょうか?
メニューのツール-オプション-計算方法-自動
にはなっていました。

説明不充分で申し訳ありませんでした。

補足日時:2005/03/16 14:13
    • good
    • 0

MOD関数の計算誤差のためにズレちゃってるみたいですね。



ちゃんとしようとすると、INTの切り捨てとかの所を四捨五入してきれいに処理する必要があると思いますけど、式が長くなるので、VBAで関数を作る方がかしこいかも。

この回答への補足

VBAがイマイチわからないのですが、インターネットで検索してみると
それをするのにソフトをダウンロードしなくてはならないのでしょうか???
ソフトのダウンロードはできないので、それ以外の方法が何かあれば
ご教授くださいませ。

補足日時:2005/03/16 15:43
    • good
    • 0

すみません。


私は、気がつきませんでした。

とりあえず、修正してみました。
C1:~下へ
=INT(A1)+INT(B1)+INT(MOD(A1,1)+MOD(B1,1)/0.8)+MOD(MOD(A1,1)+MOD(B1,1),0.8)

この回答への補足

この関数を設定してみましたが、やはりウマくいきません。こちらの
PCの設定が何が悪いのでしょうか。それにしてもこんなムズカシイ関数
使ったことありませんです。

補足日時:2005/03/16 15:51
    • good
    • 0

=INT(A1)+INT(B1)+DEC2OCT((A1+B1-(INT(A1)+INT(B1)))*10)/10

この回答への補足

お答えありがとうございます。しかしやはりできませんでした。
セルが#####となって、ヘルプに
1.分析ツール アドインが登録されていない状態で、このアドインの関数が使用されている
2.存在しない名前が使われている
3.名前の指定が正しくない
4.関数名の指定が正しくない
5.数式中の文字列が二重引用符 (") で囲まれていない
6.セル範囲の参照にコロン (:) が抜けている
7.ほかのシートへの参照が一重引用符 (') で囲まれていない
と出ました。参考にしていただけますか?

補足日時:2005/03/16 16:01
    • good
    • 0

試してみると、案外ズレますね。



作業列を10列くらい使う計算です。
A1, B1に数値が入っているとして、C列から→向きに式を指定します。

C1:=INT(A1)
D1:=INT(B1)
E1:=A1-C1
F1:=B1-D1
G1:=E1+F1
H1:=INT(G1/0.8)
I1:=C1+D1+H1
J1:=IF(H1=0,G1,G1-0.8)
K1:=IF(J1<0,0,J1)
L1:=I1+K1

と、ここまででL1に答えが出ます。
C~Kの列を非表示にすると見た目が良いです。

この回答への補足

補足が遅くなり、申し訳ありません。neKo_deux さんの
おっしゃるとおり、何列か使うといいのかもしれませんが
できれば1つの式、というか、1つの関数で解決できたらと
欲張っております。でもみなさん、頭いいですね~一般人なんて
ありえません(ワシは一般人以下ということか:ジョークです)。

補足日時:2005/03/17 16:20
    • good
    • 0

VBA・・ソフトをダウンロード の必要はない。


ツール > マクロ で とりあえず何か記録して・・操作して・・記録終了
 ツール > マクロ で VisualBasicエディタ を開いてみる。

データシート C1 に ユーザー関数設定
A1B1
5.30.7

fx  の 関数の分類の ユーザー定義 で
 マクロ ファンクション名「変な8H単位足し算」を指定

c1 セル の式
=変な8H単位足し算(A1,B1)
結果 6.2 表示 セルの 書式 標準

・・ 普通は 残業時間と単価が違うのでこういう計算はしないと思います。 パートやアルバイトなら 単純な時間の累積で良さそうなので 何に使うのか・・

ユーザー関数設定

マクロ VBエディタで 挿入 > 標準モジュール
↓マクロ VBエディタで 標準モジュールに以下コピー↓

Function 変な8H単位足し算(セル1 As Range, セル2 As Range)
数値1 = セル1.Value
数値2 = セル2.Value

整数部 = Int(数値1) + Int(数値2)

時間の繰上げ部 = Int((数値1 + 数値2 - 整数部) / 0.8)

時間の部 = (数値1 + 数値2 - 整数部) - 時間の繰上げ部 * 0.8

変な8H単位足し算 = 整数部 + 時間の繰上げ部 + 時間の部

End Function

この回答への補足

何に使うのかについては、当初の質問のとおりで、休暇取得日数と時間の集計です。
この質問を数人にしたとき「意味がない」とか「わけわからん」とか
言われましたが、長年続いてきたやりかたで、私個人には
どうすることもできない状態です。こういうやりかたを
採用している会社って、珍しいんでしょうか?

補足日時:2005/03/17 09:42
    • good
    • 0

もう面倒くさいので、新しい関数「DADD()」をマクロで作っちゃいましょう。


難しく構えないで下さい。ここで言われたとおりのことをしていただければ、
次回からは、SUM関数と全く同様の手順で動くようになりますよ。
マクロを編集するためのツールは、Excelを普通にインストールしたときに自動的に
インストールされていますから、問題ありません。

さて、まずは新規ブックを開いてください。そうしたら以下の操作を行います。
1) ツール(T)-マクロ(M)-新しいマクロの記録(R)を開く
2) 「マクロの記録」ウィンドウが表示されたら、何も変更せずにOKをクリック
3) 画面上に二つのボタンが表示されたツールバーが現れたら、左側の「■」をクリックして記録終了
4) Altキーを押しながらF8キーを押して、マクロウィンドウを開く
5) マクロウィンドウから、編集(E)ボタンをクリック
6) 現れた「Microsoft Visual Basic」の右側に
Sub Macro1()
'
'
'
End Sub
と書いてある部分を消去して、下の「ここから」から「ここまで」を貼り付ける。

'ここから-------------------------------------------------------
Private Function DADD(DL As Range) As Double
  Dim INTNUM As Long
  Dim PNTNUM As Double
  For Each CL In DL
    INTNUM = INTNUM + Application.WorksheetFunction.RoundDown(CL, 0)
    PNTNUM = PNTNUM + CDbl(CL) - Application.WorksheetFunction.RoundDown(CL, 0)
  Next CL
  INTNUM = INTNUM + PNTNUM \ 0.8
  PNTNUM = ((PNTNUM * 10) Mod 8) / 10
  DADD = INTNUM + PNTNUM
End Function
'ここまで-------------------------------------------------------


できましたでしょうか?そうしたら実験をしてみましょう。
現在のブックの任意のシート状のセルA1に1.6、A2に0.3、A3に2.5と入力してみてください。
セルA4に =DADD(A1:A3) と入力してみましょう。 A4に「4.6」と表示されましたか?
その値は期待通りですか?、例えばこの状態でセルA1の値を書き換えたらA4の値も変わりますか?



でも毎度毎度新しいブックを作るたびに上のようなことを書いていては面倒ですね。
というわけで、どのブックでも上の関数が使えるように、登録してしまいましょう。
まずはシートに落書きした、さっきの実験結果を消去してください。
さて行きますよ。もう一歩です。

1) 出来上がったファイルを保存します。
その際、ファイルの種類を「Microsoft Excelアドイン (*.xla)」にします。ファイル名はなんでも結構です(後で分かりやすい名前にしておいた方がいいですが)。保存先が「AddIns」になっていたら変えないでください。
2) Excelの「ツール(T)-アドイン(I)」でアドインダイアログを開き、参照ボタンをクリックします。
3) 先ほど保存したファイルが登場するはずなのでこれを選択します。

はい、これで完成です。好きなブックを開いていただいて同じことを試してみてください。当然SUM関数と同様に、「=DADD(」とまで打ち込んでから、合計したいセルをドラッグしていってもOKですよ。

この回答への補足

皆様ありがとうございます。申し訳ないんですが
トライしてみるのは明日になりそうです。結果のちほど
報告いたします。しかしこんな複雑なことになるとは
思いもよりませんでした。

ではでは本日はこれにて。

補足日時:2005/03/16 18:25
    • good
    • 0
この回答へのお礼

補足欄が使えませんので、お礼欄に記入いたします。
ご指定のようにやってみましたが、やはりできません。やりかたが
マズイのでしょうか...
 A  B  C
1 6.5 0.3 7.0←ここはオッケー
2 4.7 1.0 6.7←本当は5.7
3 5.6 2.4 8.2←ここもオッケー
4 12  0.6 13.6←本当は12.6

お礼日時:2005/03/17 10:34

#6です。


アドインで分析ツールを入れておられないのですね。
質問文でDEC2OCTを使っておられたので、入れられたものだと思っていました。
DEC2OCTを使えるようにするには、
[ツール] メニューの [アドイン] をクリックします。
[アドイン] の一覧の [分析ツール] ボックスを選択し、[OK] をクリックします。

この回答への補足

たびたびお答えありがとうございます。しっしかし!
前回懸案部分は計算されたんですが、他のセルがやはり
ウマく計算されません。

今回の懸案部分の具体例:
  A  B  C
4 5.3 0.7 6.2 ←前回懸案部分はオッケー
5 6.5 0.3 6.7 ←本来は7.0
6 1.4 0.0 1.3 ←本来は1.4

ご回答のとおり、分析ツールはOKにしてみました。
それにしても、こんな複雑なことになるとは意外でした。
お答えいただいても、ちゃんと設定できる腕があるのか
我ながら不安になります。

補足日時:2005/03/17 09:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!