プロが教える店舗&オフィスのセキュリティ対策術

ダース(12)の足し算・引き算の時、ダースになりえない数を計算すると、10以上の数ではいつも電卓で計算しています。VBAを使用せず関数を使用して計算できますか。

A 回答 (7件)

どもども、お待たせいたしました。



VBAでの対処ですが、以下のような仮定で作ってみました。
○ワークシート名が"Sheet1"
○C1:C10及び、F1:F10のセルが、ダースの「端数入力部」
○端数入力部の左隣のセルがダースの「実数入力部」
○入力したセル、及び左隣のセルに関数が含まれている場合は無視する。


VBAの中身としては、こんな感じになりますかねぇ…

Option Explicit
Dim mrngHasuu As Range


Private Sub Worksheet_Change(ByVal Target As Range)
 Static sInitFlg As Boolean
 Static sSkipFlg As Boolean
 Dim Sht   As Worksheet
 Dim Rng   As Range
 Dim lKosuu  As Long
 
 If sSkipFlg = True Then
  Exit Sub
 End If
 
 sSkipFlg = True
 
 '端数の領域を初期化する。
 If sInitFlg = False Then
  Set mrngHasuu = Worksheets("Sheet1").Range("C1:C10, F1:F10")
  sInitFlg = True
 End If
 
 '変更されたセルが、「端数入力欄」に含まれているかをチェック
 Set Sht = mrngHasuu.Worksheet
 For Each Rng In mrngHasuu
  If Rng.Address = Target.Address Then
   '変更されたのが端数入力部のセルであった場合
   '端数部もしくは実数部のセルに関数が入力されている場合は無視する
   If Left(Rng.Formula, 1) = "=" _
    Or Left(Sht.Cells(Rng.Row, Rng.Column - 1).Formula, 1) = "=" Then
    Exit For
   
   'そうでない場合は、実数部と端数部とを正規化する。
   Else
    lKosuu = Cells(Target.Row, Target.Column - 1) * 12 + Target.Value
    Cells(Target.Row, Target.Column - 1) = Fix(lKosuu / 12)
    Target.Value = lKosuu Mod 12
    Exit For
   End If
  End If
 Next Rng
 
 sSkipFlg = False
End Sub

字数及び制限時間の関係で仕様が練れていないんですが、ちょっと実験してみた限りでは、コレでうまくいくみたいです。
あと、関数を使って演算をしている場合などは、その都度対処してやらないといけないです。

#5(と#6)の例ですと、合計を求める式は、
=Sum(B1:B10) + Trunc(Sum(C1:C10) / 12) …実数部

=Mod(Sum(C1:C10) , 12) …端数部
とになるハズです。
    • good
    • 0
この回答へのお礼

引き続きお教えいただきありがとうございます。このような投稿は初めてなのですが、ARCさんの親切さには感激しました。大変、大変ありがとうございました。

お礼日時:2004/03/21 08:38

あらら(^^;



×
=Sum(B1:B10) と = Sum(B1:B10) とを…


=Sum(B1:B10) と = Sum(C1:C10) とを…

でした~

この回答への補足

ありがとうございました。大変満足しています。もし差し支えなければ、VBAでの方法も教えていただけますか。

補足日時:2004/03/18 11:27
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございます。

お礼日時:2004/03/20 22:47

まず、


>そして端数に10もしくは11の値であっても表現できますか。

コレを実現するために、実数部と端数部とを分けたかったのです。

>端数の値が12を越えた時点で、実数にその値が足すことはできますでしょうか。

うーん、VBAを使えば可能なんですが…
関数だけでするとすれば、少し考え方をひねってやる必要があると思います。

例えば、A1を「ダース数表示用」B1とC1のセルを「値入力 & 計算用」とします。(B1に実数部, C1に端数部)

で、A1のセルに
=TRUNC((B1*12+C1)/12) & "." & MOD((B1*12+C1),12)
ってな感じの数式を入力します。
B1, C1のセルは、建前上はダースの実数部と端数部を入力する枠であるのですが、計算を行った結果、"10.15"みたいなことになっても「気にしない」ことにするのです。(A1のセルには正しく"11.3"と表示されるはずなので。
もちろん気になるようであれば、その都度、A1のセルを参照して"11"と"3"とを入力し直しても構いません)

ちなみに、1行目から10行目の合計を得たいときには、
B11のセルとC11のセルに
=Sum(B1:B10) と = Sum(B1:B10) とを入れてやれば良いですね。
A列にはA1のセルをコピーして貼り付けておればOKですね。
たとえ計算の結果、C列の合計が "99" などとなってしまっても、「気にしない」のです!
    • good
    • 0

>1つのセルでダースと端数を分けないですることが可能ですか。



うむむっ...か、可能ですっ!ただし、文字列表現です。

「11.10」は「11ダースと、端数が10個」を意味するとし、
使用するセルの書式はすべて「文字列」として、

=IF(AND(AND(A1<>"",B1<>""),C1<>""),
LEFT(A1,FIND(".",A1,1))+LEFT(B1,FIND(".",B1,1))+LEFT(C1,FIND(".",C1,1))
+INT((MID(A1,FIND(".",A1,1)+1,LEN(A1))+MID(B1,FIND(".",B1,1)+1,LEN(B1))+MID(C1,FIND(".",C1,1)+1,LEN(C1)))/12)
&"."&
MOD(MID(A1,FIND(".",A1,1)+1,LEN(A1))+MID(B1,FIND(".",B1,1)+1,LEN(B1))+MID(C1,FIND(".",C1,1)+1,LEN(C1)),12),
"")

でも、こうまでする(って、私が勝手にやっているのですが、アハハ)事情がお有りなのでしょうか?
あるいは、なにか勘違いをされていらっしゃるのかもしれませんねぇ(失礼かもしれませんが...)
私も、#3さんのご意見に賛成です。要件分析というか、基本設計段階での問題提起が必要でしょう。
詳細まで降りてきて、無理苦理作ろうとすると、必ず自分がドツボにはまります(経験談)。

この回答への補足

親切なご意見ありがとうございます。確かにChipmoguraさんの話されている実数と端数とを分ける方向で考えています。ただ端数の11を超えた繰り上がりが、実数に反映されることは可能でしょうか。

補足日時:2004/03/17 08:28
    • good
    • 0

えと、一つのセルに、ダース数と端数とを入力するのでしょうか?


セルに入力できるのはあくまでも10進数なので、簡潔な表現では無理です。


無理やり、A1のセルに10ダースと11本を入れるのでしたら、A1に
= 10 + (11 / 12)
ってな感じに入れてやる必要があります。(かなり強引ですね)

ここまでするくらいなら、A1にダース数、B1に端数を入れたほうが余程効率がいいでしょう。
一つのセルに「10.11」みたいに入れるのは、VBAを使っても難しいかと思いますよ。

実数と端数とにセルを分けて入力する方式では、何か不都合があるのでしょうか?
もしそうでしたら、私としてはその「不都合」の方を解決する方が、最終的には良い結果になるような気がします。

この回答への補足

親切な回答ありがとうございます。実数と端数を分けて、端数の値が12を越えた時点で、実数にその値が足すことはできますでしょうか。そして端数に10もしくは11の値であっても表現できますか。

補足日時:2004/03/17 08:17
    • good
    • 0

A1セルに 52個、B1セルに 55個と入力されているとして、



C1セル =INT(SUM(A1:B1)/12) ダース数
D1セル =MOD(SUM(A1:B1),12) 端数

と、いうことではないのでしょうか??

この回答への補足

A1に10ダースと11個、B1に10ダースと1個、C1に10ダースと5個の場合どうなりますか。1つのセルでダースと端数を分けないですることが可能ですか。

補足日時:2004/03/16 17:31
    • good
    • 0

A1の数(ダース)とA2の数(ダース)を足すとすると、数式は


=((A1 * 12) + (A2 * 12)) / 12
になるかと思います。

って。こういうことで良いんでしょうか(^^;;

この回答への補足

A1に10ダースと11本、B2に10ダースと1本、C3に10ダースと5本の場合、どうなるかわかりますか。そして1つのセルでその回答を表現できますか。

補足日時:2004/03/16 17:41
    • good
    • 0

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