• 締切済み

Window Excel上にて、ダース同士の計算

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

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.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) …端数部 とになるハズです。

Kentucky
質問者

お礼

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

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.6

あらら(^^; × =Sum(B1:B10) と = Sum(B1:B10) とを… ○ =Sum(B1:B10) と = Sum(C1:C10) とを… でした~

Kentucky
質問者

お礼

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

Kentucky
質問者

補足

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

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.5

まず、 >そして端数に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" などとなってしまっても、「気にしない」のです!

noname#240783
noname#240783
回答No.4

>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さんのご意見に賛成です。要件分析というか、基本設計段階での問題提起が必要でしょう。 詳細まで降りてきて、無理苦理作ろうとすると、必ず自分がドツボにはまります(経験談)。

Kentucky
質問者

補足

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

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

えと、一つのセルに、ダース数と端数とを入力するのでしょうか? セルに入力できるのはあくまでも10進数なので、簡潔な表現では無理です。 無理やり、A1のセルに10ダースと11本を入れるのでしたら、A1に = 10 + (11 / 12) ってな感じに入れてやる必要があります。(かなり強引ですね) ここまでするくらいなら、A1にダース数、B1に端数を入れたほうが余程効率がいいでしょう。 一つのセルに「10.11」みたいに入れるのは、VBAを使っても難しいかと思いますよ。 実数と端数とにセルを分けて入力する方式では、何か不都合があるのでしょうか? もしそうでしたら、私としてはその「不都合」の方を解決する方が、最終的には良い結果になるような気がします。

Kentucky
質問者

補足

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

noname#240783
noname#240783
回答No.2

A1セルに 52個、B1セルに 55個と入力されているとして、 C1セル =INT(SUM(A1:B1)/12) ダース数 D1セル =MOD(SUM(A1:B1),12) 端数 と、いうことではないのでしょうか??

Kentucky
質問者

補足

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

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

A1の数(ダース)とA2の数(ダース)を足すとすると、数式は =((A1 * 12) + (A2 * 12)) / 12 になるかと思います。 って。こういうことで良いんでしょうか(^^;;

Kentucky
質問者

補足

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

関連するQ&A