[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『時間の計算』(みやび)
セルの一つを30分または0.5時間として一列に24時間(A~AV)の表を作り、セル内に文字を入力した部分だけを自動で(AW)に合計時間が出るようにしたいのですがどうすればいいでしょうか?
(MSE) =COUNTA(A1:AV1)*30 とすれば分単位で、 =COUNTA(A1:AV1)*0.5 とすれば、時間単位で 合計時間が出せると思いますが、 いかがでしょう。
セルの一つをある部分は1時間と設定したいのですがどうすればいいのでしょうか?
また、セルを結合し網掛けをし先頭のセルに文字を入れた場合他のセルの情報は無効になってしまいます。どうすれば全てを有効に出来るのでしょうか?
申し訳ありませんが、回答ではありません。 私の読解力が足りないのか、いまいち質問の意味というか、 どんなことがしたいのかが理解できません。 具体的な例をあげるなど、もう少しわかり安く質問いただけると、 助かります。
24時間から、空白のセル数分の時間を引けばいいのでは? (純丸)(o^-')b
純丸さんに質問〜
>1時間の場合は二つのセルを結合して と、結合を希望しているようなのですが、 COUNTBLANK関数や、(範囲="") 等で行っても、先頭セル以外も空白のセルとして 数えられてしまいました・・・ 純丸さんは、どのような方法をとって出来ました?
それ以外思いつかなかった・・・orz (キリキ)(〃⌒o⌒)b
m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m ごめんなさぁい。検証せずに回答してました、、、。 結合セルも数えてしまうんですね。みやびさん、すみません。 上の私の回答は間違ってますので無視して下さい。 (純丸)(o^-')b
ありゃりゃ、、、 そうだったんですか。。。 突っ込みすいませんでしたm(_ _)m
マクロで考えてみました。 シートモジュールにコピペ '------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim data As Variant, adrs As Variant Dim x As Variant Dim r As Long, c As Long adrs = Target.Address If Target.Count <> 1 Then: Exit Sub If Left(Range(adrs), 7) <> "miyabi(" Then: Exit Sub data = Split(Range(adrs).Value, "(")(1) If data = "" Then: Exit Sub data = Left(data, Len(data) - 1) Application.EnableEvents = False Target = "" r = Range(data).Row c = Range(data).Column Do Cells(r, c).Select If Cells(r, c) <> "" Then x = x + Selection.Count c = c + Selection.Count - 1 End If c = c + 1 Loop Until c = Target.Column Range(adrs) = x / 2 Application.EnableEvents = True End Sub
使用している Sheet のタブを、右クリック 「コードの表示」を選んで、出てきた画面に上記コードをコピペ
使用方法は、時間を出したいセル(今回の場合は AV )に =(イコール)を付けずに miyabi(A2:AV2) のように入力してみてください。
※無理やり、Select して、Selection をカウントしてみました・・・ (キリキ)(〃⌒o⌒)b 今日はもうレス出来ません。。。
>ありゃりゃ、、、 >そうだったんですか。。。 >突っ込みすいませんでしたm(_ _)m
いえいえ、こちらこそご指摘ありがとうございました。
さてこちらはユーザー関数を作ってみました。範囲の空白以外の セル数を数えます。結合セルは結合されているセル数で数えます。 下記マクロを標準モジュールにコピペ後、=cellcnt(A2:AV2)*0.5 と 入力して下さい。 範囲にデータを入力したり消したりすれば再計算されますが、 セルを結合したり解除したりしただけでは再計算されませんので 注意が必要です。(F9キーを押してもダメです) (純丸)(o^-')b
Function cellcnt(myr As Range) As Integer
Dim i As Integer Dim r As Range For Each r In myr If r.Value <> "" Then i = i + r.MergeArea.Count End If Next r cellcnt = i
End Function
セルの内容は用件や時間であるのなら、0を使ってこんなのはいかが? 先頭セルに0を入力し、AV列までコピー。 ツール → オプション → 表示タブのウィンドウオプションでゼロ値のチェックをはずす。 AWに =24-COUNTIF(A1:AV1,0)*0.5 とすると1.5等と時間で求められます。 (かなれっと) 0入力が手間〜だとか、0値を表したいセルがある、だと役に立ちませんが^^; うっ 計算間違えた;; AWに =24-COUNTIF(A1:AV1,0)*0.25 *0.25じゃなく*0.5でした… 訂正。。。
____
(キリキ)さん、(純丸)さん、ありがとうございます。
色々試してみましたが0を使っての計算が簡単そうで良かったです。
と言うよりも他のは実行してみると####がでたりmiyabiとそのまま出たり・・・。
きっと無知な私のやりかたが変なんだと思います。これから頑張って勉強させていただきます。
そこでもう一つ教えて頂きたいのですが、0を使っての計算で実行しているのですが、介護時間の中で二人で入る仕事があります。例えば「15時〜16時入浴」の場合は二人のスタッフを派遣しますのでそこだけ×2の勤務時間を認識させて合計に入るようにする仕方ってありますでしょうか?何度も申し訳ありません。
う〜ん^^; 入浴という文字が入っていればそれは必ずスタッフ2人なのか? とか 入浴は毎回1時間と決まっているのか? とか その他にスタッフの増員要件はないのか? とか 時間帯によって同じ仕事でも人数増えたり減ったりするのか? などなど。 ご提示の条件だけでは、表の仕様といいますか、基本的条件がハッキリしません。 条件を整理され、簡単な表の例をつけて、問題点をご相談されてはいかがでしょう? ちなみに私が想定していたのは、下記のような表です。 A B C D … AU AV AW 1 0時 1時 … 23時 合計 2 0 0 文字(結合) … 文字 0 1.5 ←スタッフA 3 文字 0 0 0 … 0 0 0.5 ←スタッフB
と、これだけではナンなので。 =24-COUNTIF(A1:AV1,0)*0.5+COUNTIF(A1:AV1,"*入浴*")*0.5 とすると、 入浴という文字が含まれるセルの数を数えて、0.5時間単位で加算します。 入浴の仕事は必ず1時間かかり、セルは結合される、という条件でしたら、 +COUNTIF(A1:AV1,"*入浴*")*0.5 の*0.5を削除されればいいかと思います。 (かなれっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.