• ベストアンサー

エクセルで困ってます

現在家計簿的なものを作っています。 足し算のところで調べてもお手上げ状態です。 現在わからないところは下記になります。 1、セル5つ(横一列) (数値は一つのセルに1文字まで入力可能。 つまり1~5セルの数字を入力できます。) 2、セル5つ (ここにも上と同じように1~5桁の数字を入力します) 3、セル6つ (ここに1と2の合計を一セル一文字づつ表示させたいです。) つまり1+2=3にしたいです。 一セルなら普通にSUMとやってできるのですが、1~5のセルにそれぞれ 数字を入力していくのでどうやって計算したらいいかわからないです・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • h-mique
  • ベストアンサー率50% (16/32)
回答No.10

#2、#7です。 最後の訂正・・ A1~G1:数値1 A2~G2:数値2    ・    ・    ・ A9~G9:数値9 10行目:合計 A10に =RIGHT(SUM(A$1:A9)+ROUNDDOWN(SUM(B$1:B9)/10,0)+ROUNDDOWN((RIGHT(SUM(B$1:B9),1)+ROUNDDOWN(SUM(C$1:C9)/10,0))/10,0),1) これをG10までコピーペースト。 さっきの投稿では#8のを1つにまとめたにもかかわらず、B11などの補助計算のセルが指定されてしまっていた。(´・ω・`) 今度こそ間違いはないです。申し訳ありませんでした(-ω-)

bita123
質問者

お礼

たびたび有難う御座いました。 参考にさせていただき頑張ります。

その他の回答 (13)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.14

自分以外が使うBookで補助セルを使うと面倒になるケースが多いですね。行が増えると算式を追加する必要があるのが典型でしょうか。 質問のような要求は結構あって、何回か対処しました。 決まった書式(書類)があってその枠内に文字単位で書いて欲しいとか、子供に足し算や引算を教えるときに1文字ずつ変化させたいなど。 なかなか要求を否定できないですね。全加算機のような動きを表現することになります。 質問に対しては、  ・補助セルを使わない  ・任意の複数行に対応  ・SUMと同じように使う  ・何桁目かを意識しない算式にする  ・横方向に算式をコピーできるようにする  ・マイナス(記号-)も扱える  ・対象は整数とする。(小数点までは拡張しない) のようにしてみました。(この制約なら、VBAしかないでしょう) ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そこに貼り付けます。 __A_BCDEFG 1 2___001200 3___000031 4___050009 5___051240 のようになっている場合、(『_』は位置の調整用) B5セルの算式は、= ssum(B2:B4) C5~G5はB5をコピーできます。 sum関数と同じように書きますが、引数は1列の連続した範囲です。B2:B4がその例です。 有効数値の前の『0』は入力不要で、下のモジュールは『0』を表示しません。マイナス数値は『-』を1文字として扱います。『-』と1桁数値以外は入力しないことにします。 下のモジュールを貼り付けたら、   TopColumn = "B" はB列から数値が入っているので、このようにセットします   MaxKeta = 6   6桁を扱っているので、このようにセットします のセットを行なってください。 ↓次の行からコピーして貼り付けます Const TopColumn = "B"          '// 一番左の列 Const MaxKeta = 6            '// 数値の最大桁 Function sSum(rg As Range)   Application.Volatile        '// 自動再計算関数にする   Dim NumColumn As Integer      '// 一番左の列(数値化)   Dim rw As Long, col As Integer   '// 行、列カウンタ   Dim strSum As String        '// 行レベルの数値   Dim TTL As Long, strTTL As String  '// 合計、文字列にした合計   '// 対象とする行の合計を求める   NumColumn = Range(TopColumn & "1").Column   For rw = rg.Cells(1).Row To rg.Cells(1).Row + rg.Rows.Count - 1     strSum = ""     For col = NumColumn To NumColumn + MaxKeta - 1       strSum = strSum & Cells(rw, col)     Next     TTL = TTL + Val(strSum)   Next   strTTL = Right(String(MaxKeta, " ") & TTL, MaxKeta)   '// 対応する桁を取り出す   sSum = Mid(strTTL, rg.Cells(1).Column - NumColumn + 1, 1) End Function

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.13

まず、家計簿にこんな仕様をなぜ持ち込まないといけないのか、異議をもうします。初心者らしいが、考え方からして他の方法はないのか反省が必要では。 1セルに1桁数字をばらばらに入れるなら、例えば1セルを作業セルとして =B3*10000+C3*1000+D3*100+E3*10+F3 で10進数に直せるのでは。 作業セルを使わないとかの制約を課しているのかな。 それも配列数式を使えばできます。 例データB3:F5 一番右端G列は=B3*10000+C3*1000+D3*100+E3*10+F3で出したもの B列  C列  D列  E列   F列   G列 (先頭0は桁ずれ防止のためわざと入れた。本当は不要) 0 0 1 2 3 123 0 0 3 5 6 356 0 1 3 5 7 1357 1836 1836 F7(どこでも良い) =SUM(B3:B5*10000+C3:C5*1000+D3:D5*100+E3:E5*10+F3:F5) と入れて、SHIFT+CTRL+ENTERを同時押しする。 (配列数式) 結果 1836 G列のΣと当然一致。 6-7桁になっても式が長くなるだけ。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.12

#1 Cupperです。 解決に至る回答は出ているようですが、こんな方法もあります。  1 2 3 4 5 A 0 0 0 9 0 B 0 0 2 5 0 C 0 0 3 4 0 と、5桁として回答します。 まずはA~B行の数字を文字列として繋ぎ、数字に直す  F1=VALUE(CONCATENATE(A1,B1,C1,D1,E1))  F2=VALUE(CONCATENATE(A2,B2,C2,D2,E2)) 続いて合計を出してそれを文字列に戻す  F3=RIGHT("00000"&SUM(F1:F2),5) このとき、入力した数値の桁数になるようにRIGHT関数を使います。 各桁をMID関数で抜き出す(結果は文字列になります)  A3=MID(F3,1,1)  B3=MID(F3,2,1)   :  E3=MID(F3,5,1) 最後に文字ではなく数値にしたい場合は VALUE関数を使うか  A3=VALUE(MID(F3,1,1)) 元の値が変わらない四則演算をさせます  A3=MID(F3,1,1)+0  A3=MID(F3,1,1)-0  A3=MID(F3,1,1)/1  A3=MID(F3,1,1)*1 家計簿程度であれば、どちらを使っても問題ありません F列を使わなくてもできますが、 その場合、関数式が非常に見づらくなります。  A3=VALUE(MID(RIGHT("00000"&SUM(VALUE(CONCATENATE(A1,B1,C1,D1,E1)),VALUE(CONCATENATE(A2,B2,C2,D2,E2))),5),1,1)) 正しく表示が行えることを確認したのちに式をまとめると良いでしょう。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.11

◆こんな方法もありますよ    A  B  C  D  E  F 1  0  4  5  6  7  8 2  0  5  6  7  8  9 3  0  2  3  0  4  5 4 5  1  2  5  5  1  2 A5=--LEFT(RIGHT(0&SUMPRODUCT(($A$1:$F$4*10^(6-COLUMN($A:$F)))),6-COLUMN(A1)+1)) ★右にコピー ◆出来ないわけではありませんが、できれば一つのセルにそのままの桁数の数字を入力した方が、簡単だと思います ◆もしも、桁数を分かりやすくするためだったら、表示形式をユーザー定義で、 # # # # # 0 にするような方法は、いかがでしょうか?

  • h-mique
  • ベストアンサー率50% (16/32)
回答No.9

#2、#7です。たびたびすいません(-ω-) 投稿してから、「計算補助を使うことで簡単にできたなら、それを1つの式の当てはめればいいんだ」と気づきました・・・(滝汗) そういうわけで、 A10にそれぞれを代入・・・&少し改良 =RIGHT(SUM(A$1:A9)+ROUNDDOWN(B11/10,0)+IF(COUNT(C11)=0,0,ROUNDDOWN((RIGHT(B11,1)+ROUNDDOWN(C11/10,0))/10,0)),1) これを必要な桁まで(それ以上でもOK)コピーペースト 改良したのは数値入力で1桁ごと入れる必要がなくなったときに、1の位に2桁以上の数字をいれても合計は桁ごとにわけるようになってます。 ある数字は桁ごとに、ある数字は1の位にまとめて・・でもできます。 間違いだらけですみませんでした(´・ω・`)

  • h-mique
  • ベストアンサー率50% (16/32)
回答No.8

#2、#7です。 計算補助をさせる行を作ることで10個でも100個でも簡単にできました。 ※5桁でなくてもOKです。(必ず1の位はそろえてください) 1行目:数値その1 2行目:数値その2    ・    ・    ・ 9行目:数値その9 10行目に合計 11行目、12行目に計算補助(邪魔なら文字色を白に^^;) A10に =RIGHT(A11+ROUNDDOWN(B11/10,0)+B12,1) A11に =SUM(A$1:A9) A12に =IF(COUNT(B11)=0,0,ROUNDDOWN((RIGHT(A11,1)+LEFT(B11,1))/10,0)) 桁は何万でも何億でもいけます。 数字が更に増える場合は合計と計算補助を下にずらしていけばOKです。 9個数字を入れるようにしてあって、2個しか数字をいれなくてもちゃんと計算します。

  • h-mique
  • ベストアンサー率50% (16/32)
回答No.7

#2です、更に修正ごめんなさい(ノ_・。) =IF(OR(B1+B2>9,AND(B1+B2=9,B3=0)),MOD(A1+A2+1,10),MOD(A1+A2,10)) です・・・ >もし、B3ーF3という5桁の数字が更に増えた場合はどうなるのでしょうか?? 3つ以上の数字の場合は繰り上がりが1とは限らなくなるので私のやり方ではできません(´・ω・`) もし3つ以上なら 例えば B1~F1:5桁の数字その1 B2~F2:5桁の数字その2 B3~F3:5桁の数字その3 A4~F4:合計 A4に =IF(AND(MOD(SUM(B1:B3),10)>10-COUNT(B1:B3),MOD(SUM(B1:B3),10)>B4,COUNT(C4)=1),MOD(SUM(A1:A3)+ROUNDDOWN(SUM(B1:B3)/10,0),10)+1,MOD(SUM(A1:A3)+ROUNDDOWN(SUM(B1:B3)/10,0),10)) これをF4までコピーペースト これでいけると思います(かなりややこしいですが^^;) 数字が4つになったら関数内の3の部分を全て4にして、A5のところに入れれば機能する(はず)です。(同様に5個でも6個でも) ただし繰り上がりが10以上(数字が11個以上)になるとまた修正する必要があります。

回答No.6

言っていることがよくわかりませんが… 具体的にどのセルにいくつ(A1に20、B1に30…)入っていて、どのセルにいくつ(A2に25、B2に35…)入っていて、どのように計算してその結果をどこのセルに表示させたいのかがわかりません。 >一セル一文字づつ表示させたいです もしこんなことすると、ちょっと考えただけで数式でifのネストが3つくらい?になる複雑な式になりますよ。 これは下一桁同士を計算させた結果ですが(G12,G13にそれぞれ1桁のデータが入っているとしての結果) =IF(SUM(G12:G13)>=10,SUM(G12:G13)-10,SUM(G12:G13)) 桁があがると下の桁の繰り上がり判定、その結果のその桁の繰り上がり判定…いやめんどくさすぎます。 普通のSUM関数ですることに支障があるのでしょうか? 詳しい情報がないと答えられません。

bita123
質問者

お礼

そうなんです・・・複雑すぎるんです。 友人が自分で家計簿のテンプレートを作ったけど 数式がわからないからやってと頼まれ・・・。 普通にSUMでサクッとできるかと思ったら テンプレートを見て愕然としてます・・・。

  • h-mique
  • ベストアンサー率50% (16/32)
回答No.5

#2です、さらにミスごめんなさい(´;ω;`) 横に書くのだから A2~A6ではなく、B1~F1ですね・・・ B1~F1に5桁の数字 B2~F2に5桁の数字 A3~F3に合計 A3に =IF(OR(A1+A2>9,AND(B1+B2=9,B3=0)),MOD(A1+A2+1,10),MOD(A1+A2,10)) これをB3からF3にコピーペーストです。

bita123
質問者

お礼

ご解答有難う御座います。 もし、B3ーF3という5桁の数字が更に増えた場合 はどうなるのでしょうか?? 自分には難しく少し混乱しています汗

  • h-mique
  • ベストアンサー率50% (16/32)
回答No.4

#2です。 ひとつ忘れてました(-ω-) #2のやり方だと、繰り上がりにより10になった場合が計算されません。 なのでC1に =IF(OR(A2+B2>9,AND(A2+B2=9,C2=0)),MOD(A1+B1+1,10),MOD(A1+B1,10)) これでC6までコピーペーストです。 #2と違うのは、下の位が0であり、下の位の足し算の合計が9であった場合も+1(繰り上げ)するをいれたものです。

関連するQ&A

専門家に質問してみよう