![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
たびたび申し訳ありません。
こちらで教えてもらった式をセルに設定すると
それがウマく動くときと動かないときがあります。
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)。
申し訳ありませんが、ご教授ください。当方完全な文系です。
本当にご迷惑かけます(涙
No.15
- 回答日時:
matsu_junです。
大変なこと、お察しいたします。保存してしまったのですね。まず完全に元に戻しましょう。
1) アドインを外します。ツール(T)-アドイン(I)をクリックして、チェックをつけてしまった部分を外します。
2) ファイルも削除しましょう。画面左下のスタートメニューから検索(C)を選び、保存してしまったファイル名で検索し、見つかったら削除しましょう。
ここまでやってから、もう一度#9、#12、#13を参考に作業を再開しましょう。
まだエラーが出ますか?そうであれば、#9で言うところのどの操作をした状態で、どのようなエラーが発生するのかも書いてください。
この回答への補足
本当に情けないですが、削除ができません。
1.ツール-アドインのチェックは外しました。
2.勤務計算ファイル(仮名:最初の作業ファイル名とします)を
検索したのですが、マイコンピュータを検索しても出ません。
ローカルディスク、ファイルとドキュメントも同様です。
3.最近使ったプログラムからは見つかって、削除しました。
4.エクセルを開くと、右側の作業エリアに、勤務計算と出て、開くことができます。
5.さて、これがもっともやっかいになると思うんですが
実は最初にこの作業をしたときに、今回問題になっている実際のファイルに
適用して、試してみました。結果、そのファイルを開くと
リンクして、というか、共存状態というか、勤務計算のパーソナルエクセルが
くっついて開いてしまいます。
本当に申し訳ありません。以上の説明でおわかりになりますか?
ガンバりますので、何卒よろしくお願いいたします。
帰宅してPC確認しましたら、お礼欄が編集&削除
されていました(運営者様に対する批判ではないです)。
matsu_jun様には、今回本当にお世話になり、感謝のキモチでいっぱいです。
採用されなかったと、ガッカリしないでくださいね。何かありましたら
またよろしくお願いいたします。他の通信手段がなかったので
本欄に、最終的なお礼を記入いたします。
No.13
- 回答日時:
matsu_junです。
一度Excelごと終了しましょう。今作業中のブックは保存しなくていいですよ。
もう一度Excelを立ち上げ直して、同じ操作をしましょう。
また、■を押したらすぐに大きい画面(MicroSoft Visual Basicのことかな?)は出ませんよ。
■を押しても見た目はそう変わらないはずです。その後、#9で説明した4)へ進みましたか?
ちゃんとAltキーを押しながらF8キーを押しましたか?
画面下のタスクバーに、「Microsoft Visual Basic」というバーが表示されていたら、それをクリックしてもでるかもしれません。
ダメだったら何度でもExcelごと終了させて、私が#9で説明したことを繰り返してみましょう。
一度できたことです。2回目だってちゃんとできますよ。
ちなみに前回・前前回といい忘れていましたが、このDADD関数、単品でも使えますよ。試しにセルA1に4.9と入れて、B1セルに「=DADD(A1)」と入力してみましょう。5.1になりますね。
この回答への補足
本当に情けないことですが、今度は以下のようなエラーが出ました。
1回目に操作したとき、保存したのがいけなかったと思うのですが...
お手数かけますが、最後までガンバりますので、ご助力お願いいたします。
識別子が別の識別子と競合しているか、または修飾が必要です。エラーの原因と対処方法を次に示します。
同じ適用範囲にある複数のオブジェクトに、同じ名前の要素がある可能性があります。
要素名にオブジェクト名とピリオドを付加して修飾します。次に例を示します。
object.property
モジュール レベル識別子とプロジェクト レベル識別子 (モジュール名と参照先プロジェクト名) はプロシージャ内で再使用できますが、プログラミングが複雑になり、デバッグも難しくなります。両方の項目を同じプロシージャで参照する場合、適用範囲が広い方の項目は修飾しなければなりません。たとえば、MyModule のモジュール レベルで MyID を宣言している場合、プロシージャ レベルの変数をそのモジュール内に同じ名前で宣言しているときは、モジュール レベルの変数を適切に修飾しなければなりません。
No.12
- 回答日時:
ごめんなさいね。
#9のmatsu_junです。以下のようにして下さい。1行だけ変更しました。
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 + Application.WorksheetFunction.RoundDown(PNTNUM / 0.8, 0)
PNTNUM = ((PNTNUM * 10) Mod 8) / 10
DADD = INTNUM + PNTNUM
End Function
この回答への補足
ごめんなさいなんてそんな、こっちこそです。ついでに甘えてしまい
申し訳ないですが、この式?を、どこにどうやって貼ればいいのか
教えていただけますか。最初の方法でもう1度トライすると
■をクリックしても、大きい画面が開きません。無知でスミマセン。
皆様にお手伝いただきながらも、ちょっと燃えつき始めています...
でも最後までガンバります!
No.11
- 回答日時:
単純にもとの数式が間違えているだけのように思います。
時間の整数部分は個別に足し算しないとダメですね。
少数点以下の数値も個別に足して、1日になるか調べ、小数点以下の部分は足し算して0.8で割った余りが時間になるので以下のような式で求めます。
=INT(A1)+INT(A2)+INT((MOD(A1,1)+MOD(A2,1))/0.8)+(MOD(MOD(A1,1)+MOD(A2,1),0.8))
この回答への補足
そうですね、個別に考えればいいんですよね。ただ今回は
できれば1つの式、というか、1つの関数で解決できたらと
欲張っております。とにかく時間はかかっても、最後までガンバって
皆さんのご親切に応えたいと思っています。ありがとうございます。
No.10
- 回答日時:
#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にしてみました。
それにしても、こんな複雑なことになるとは意外でした。
お答えいただいても、ちゃんと設定できる腕があるのか
我ながら不安になります。
No.9
- 回答日時:
もう面倒くさいので、新しい関数「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ですよ。
この回答への補足
皆様ありがとうございます。申し訳ないんですが
トライしてみるのは明日になりそうです。結果のちほど
報告いたします。しかしこんな複雑なことになるとは
思いもよりませんでした。
ではでは本日はこれにて。
補足欄が使えませんので、お礼欄に記入いたします。
ご指定のようにやってみましたが、やはりできません。やりかたが
マズイのでしょうか...
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
No.8
- 回答日時:
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
この回答への補足
何に使うのかについては、当初の質問のとおりで、休暇取得日数と時間の集計です。
この質問を数人にしたとき「意味がない」とか「わけわからん」とか
言われましたが、長年続いてきたやりかたで、私個人には
どうすることもできない状態です。こういうやりかたを
採用している会社って、珍しいんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/04/13 10:55
- Excel(エクセル) エクセルで日付に続けて連番を表示したい 6 2022/05/25 23:33
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 17:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel2007 色のカウント (VBA)
-
選択したセル範囲に入っている...
-
excelのソルバーをVBAで複数行...
-
エクセル 数字をすべて○などの...
-
太字に設定されているセルの個...
-
フォントの色を指定して削除出...
-
エクセルVBA セルに表示された...
-
コピペして元のセルに戻るVBAに...
-
太文字だけをフィルターにかけ...
-
エクセルでPDFリンクを大量...
-
エクセルで該当の色のセル数の...
-
現在のセルの位置を返す関数は...
-
Excel VBAでマクロの実行範囲を...
-
[EXCEL] フォント変更が正常に...
-
関数が動くセル、動かないセル
-
【EXCEL】先週の月曜日の日付を...
-
Excel内での検索結果をシート...
-
エクセルマクロ
-
セルの値が変ると自動でマクロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excelで挿入した図をセルの中央...
-
現在のセルの位置を返す関数は...
-
セルがクリックされた回数をカ...
-
エクセルでの検索ボックスの作...
-
Excel ハイパーリンクのURLを別...
-
エクセルでPDFリンクを大量...
-
Excel2007 色のカウント (VBA)
-
フォントの色を指定して削除出...
-
【EXCEL】先週の月曜日の日付を...
-
VBA 見つからなかった時の処理
-
エクセルでページ数をあるセル...
-
空白セルを空セルに置き換える...
おすすめ情報