• ベストアンサー

EXCELで表計算がしたい

空白を含む 2つの列があり、その空白があるセル以外の行の差同士を計算し さらにそれを合計したいのですがどうすればいいですか? (厄介なのは空白のセルを飛ばす事) また、その二つの数列を a列、b列、c列、d列・・・どれとでも組み合わせられるようなプログラム的なものほどいいです 文章ではなかなか分かりづらいでしょうけど よき知恵がありましたら教えてください!!

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

  • ベストアンサー
回答No.5

こんばんわ。早速サンプルマクロを組んでみました。1行目は、すべて空白に設定し、2行目をタイトル行、A列の3行目以降にデータが入っている設定で、合計値はA1-B2の時はB列の最終行の2行下に表示されます。次のように操作してみて下さい。 1.データが入力されているブックを開き、ALT+F11キーを押してVBE画面を開く 2.画面左上のVBAProjectと書いてある下のSheet1をダブルクリックし、右側の白い部分へ下のコードをコピー・ペーストする。 3.ALT+F11キーを押してエクセルの画面にもどり、次のように操作する。  (1)1行目に行を挿入し、1行目をすべて空白にする。  (2)A1に1・B1に2と入力する。 自動でA列-B列が計算され、合計値が表示されます。 ご不明な点。不具合等がありましたらご遠慮なくお知らせ下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myClm1 As Integer Dim myClm2 As Integer Dim myClm3 As Integer Dim i As Integer Dim myRow As Integer Dim myAdr1 As String Dim myAdr2 As String If Target.Address <> "$B$1" Then Exit Sub Application.EnableEvents = False myClm1 = Range("A1").Value myClm2 = Range("B1").Value myClm3 = Range("A3").CurrentRegion.SpecialCells(xlCellTypeLastCell).Offset(0, 1).Column myRow = Range("A3").CurrentRegion.SpecialCells(xlCellTypeLastCell).Offset(0, 1).Row For i = 3 To myRow If Cells(i, myClm1).Value = "" Then Cells(i, myClm3).Value = 0 Else If Cells(i, myClm2).Value = "" Then Cells(i, myClm3).Value = 0 Else Cells(i, myClm3).Value = Cells(i, myClm1).Value - Cells(i, myClm2).Value End If End If Next i myAdr2 = Range("A3").CurrentRegion.SpecialCells(xlCellTypeLastCell).Address myAdr1 = Range(myAdr2).End(xlUp).Address Cells(myRow, myClm2).Offset(2, 0).Value = Application.WorksheetFunction.Sum(Range(myAdr1 & ":" & myAdr2)) Application.EnableEvents = True End Sub

nightbaron
質問者

お礼

お礼が遅れて申し訳ありませんでした すごいですねぇ マクロってはっきり言ってまったく分かりません とりあえず 言われたとおりにしたつもりなんですが うまく使いこなすことが出来ませんでした(×_×;)シュン 今回はなんとか 他の方法で計算できました ありがとう ございました

その他の回答 (4)

回答No.4

#1さんの補足に対する >A列とC列の結果という風に スイッチポンで変らないところが難点 の回答です。 (1)2行目からデータが始まっているとし、    G1セルに引かれる列    H1セルに引く列    ([A列-B列]ならばG1に[1]、H1に[2])を書く(セルをお借りします) (2)差を表示したい2行目のセルに    =IF(OR(OFFSET($A2,0,$G$1-1)="",OFFSET($A2,0,$H$1-1)=""),0,OFFSET($A2,0,$G$1-1)-OFFSET($A2,0,$H$1-1))    と入力する    OffSet(セル,移動したい行数,移動したい列数)    例えば =OffSet(A1,0,3)とすると =D1を入力したのと同じになります    G1=1,H1=2 → B - A    G1=5,H1=3 → E - C    のように表示されます。 注意)気をつけなければいけないのは、例えば、G2に差を表示している時に、    G1かH1に7(G列対象)にしてしまうと循環参照になってしまい、メッセージが表示されます    しなければいいことですが、いやな場合は、データ→入力規則→種類を整数、最大値を差を表示する列の前まで(この例なら6)にして下さい 補足)また、列をaやbで入力したい場合には、さらに2セルお借りしますが、    E1セルに引かれる列    F1セルに引く列    ([A列-B列]ならばE1に[a]、F1に[b])    G1セルに[=CODE(UPPER(E1))-64]    H1セルに[=CODE(UPPER(F1))-64]    としてください。   (上と同じでG1,H1に列を入れるのですが、=Code("A")で65が返ってきますので-64で列の数字にしています    UPPER()は小文字を大文字に変換しますのでaと入れてもAと入れても1を表示します)   この場合は、-65として、 =IF(OR(OFFSET($A2,0,$G$1)="",OFFSET($A2,0,$H$1)=""),0,OFFSET($A2,0,$G$1)-OFFSET($A2,0,$H$1)) に(-1を消す)してもいいです。 セルに$が付いていたり、いなかったりするのは、 横に移動した時には、セルの内容が変わらないようにしています。 縦方向へのコピーはG1セルとH1セルが変わらないようにしています。 何か疑問などありましたら補足してください。 マクロでの処理は、kazuhiko5681さんが回答されると思いますので、省略します。

nightbaron
質問者

お礼

お礼が遅れて申し訳ありませんでした すごく丁寧に 書いてくださったのですが 私にはどうやら 理解の限界を超えていたようで さっぱり意味がわかりませんでした なんとか 他の方法で計算できました ありがとう ございました

回答No.3

初めまして。 私でよろしければ、サンプルマクロを作ってみたいと思います。ご希望の節は、貴方様の思っていることがすぐ実現できるマクロを組みたいので、次のことを教えて下さい。 ・空白があるセル以外の行の差同士を計算する。というのは例えばA1とB1の差を求めるということでいいのかどうか。 ・空白のセルを含む2つの列の列番号 ・合計を表示させるセル番地 お手数をおかけいたしますが、よろしくお願いいたします。

nightbaron
質問者

補足

1.例えばA1が空白でB1に値あっても計算しない(もしくは0) 2.A1、B1にそれぞれ値がある場合のみ A1-B1を計算する 3.データがあるのは行は2~53(増える可能性大) 列はB~I(これも増減の可能性あり) 4.合計を表示させるセルはとりあえずB60でお願いします 5.それぞれBとCや CとD、CとHなどワンタッチで結果が切替ると更にありがたいです マクロは組んだ事ないんで 原理も分かるようなものがいいです 自分としても 勉強して そのようなマクロが組めたらと思います よろしくお願いします

回答No.2

 ↓もしかしたら、求めているものと違っているかもしれませんが・・・。  仮に、A1:B100までデータが入っているものとし、A列-B列の合計を求めるものと仮定します。  そして、答えを表示させるセルで、 =SUM((A1:A100<>"")*(B1:B100<>"")*(A1:A100-B1:B100))  と、Ctrl+Shift+Enterと入力してください。

nightbaron
質問者

お礼

お礼が遅れて申し訳ありませんでした Ctrl+Shift+Enterを押す意味は何ですか? マクロを起動させるコマンドなんでしょうか?? とりあえず計算結果は出せました ありがとう ございました

  • moonrose
  • ベストアンサー率31% (111/357)
回答No.1

[ツール]→[ウィザード]→[条件式合計式]ではできないでしょうか? また,マクロ等を使わずにやるとすれば,次のようなのも出来ますが,これではご希望のとはちょっと違うかな? a列およびb列が数値のある列とし,c列に[a列-b列]を返すとする。 a列またはb列が空白の場合は0を返す(=空白は計算しない) 以上のc列の計算式   [ =IF(ISBLANK(A1),0,IF(ISBLANK(A1),0,A1-B1)) ] 合計結果を示したい箇所には   [ =sum(c:c) ]

nightbaron
質問者

お礼

ありがとうございます 早速やってみた結果 ちゃんと計算できました 原理も分かりやすく 私でも式の意味が理解できました ただ、欲を言うなら たとえばA列とB列の計算結果を見てから すぐにじゃぁ A列とC列の結果という風に スイッチポンで変らない ところが難点か。。。 でもまぁ 計算できるのですから助かりました

関連するQ&A