アプリ版:「スタンプのみでお礼する」機能のリリースについて

縦列での計算で引き算を交互に行いたいと考えています。
空白がなければ簡単なのですが、空白があると全く考えられません・・・

例えば、、、

●80      始まり・・・計算しない
〇110    (〇110-●80)
 セル空白
●70     (〇110-●70)
〇80     (〇80-●70)
 セル空白
 セル空白
 セル空白
●90     (〇80-●90)
続く・・・

●〇はわかりやすくしたものです。
実際には数字のみです。
セル空白がなく繋がっているとできそうな気がしますが、
セル空白があると想像もできません・・・

是非、わかる方教えて下さい。
宜しくお願い致します。

質問者からの補足コメント

  • わざわざすみません。
    〇の連続、●の連続はありません。
    いつも●と〇の交互です。
    空白は●と〇の交互の間にあったりなかったりのランダムです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2016/10/17 19:10
  • 試しで行いました。
    すごくきれいにできます。

    しかし自分のデータの入っているエクセルで打ち込むと
    交互ではなく2回連続の交互になります。
    そのせいでプラスマイナスが逆になったりします・・・

    またまたやり直したら♯VALUE!が出たり・・・
    なぜなのか理解に苦しむところでございます。

    情報が少なくてすみません。
    これができれば一番簡単なのですが。

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/10/17 19:55
  • 空白セルは、計算されてでた数値が空白””にいています。
    なので本当に空白かと言われれば空白ではないのですね。
    すみません、空白と思っていました。

    No.6の回答に寄せられた補足コメントです。 補足日時:2016/10/17 20:47
  • ありがとうございます。

    =IF(A2="","",IF(A1="",B1-B2,B2-B1))
    長いデータにこれを入れるとどうしても最初は合うのですが、
    途中から逆になります。
    新しく何もないところに適当な数字を入れて確認しても同じ結果になります。

    宜しければご教授頂ければたすかります。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/10/19 19:59
  • =IF(A2="","",IF(MOD(IF(A2="","",COUNTA($A$2:A2)-COUNTABLANK($A$2:A2)),2)<>0,A2-LOOKUP(10^10,$A$1:A1),LOOKUP(10^10,$A$1:A1)-A2))

    を打ち込むと♯NAMEになります・・・
    面倒ですみません。

    No.7の回答に寄せられた補足コメントです。 補足日時:2016/10/19 20:11

A 回答 (8件)

No.5の回答者です。


追加した関数名の一部に間違ったまま投稿していましたね。
https://allabout.co.jp/gm/gc/50029/
なので関数名が間違っているエラーになってしまいました。
m(__)m

説明ではCOUNTBLANK関数と書いておきながら、追加した部分では
COUNTABLANK($A$2:A2))とCOUNTA+BLANKとなっていました。
COUNTA($A$2:A2)をコピーしてBLANKを追加したままでした。

正確には

=IF(A2="","",IF(MOD(IF(A2="","",COUNTA($A$2:A2)-COUNTBLANK($A$2:A2)),2)<>0,A2-LOOKUP(10^10,$A$1:A1),LOOKUP(10^10,$A$1:A1)-A2))

となります。長い数式なので、未確認のまま投稿してしまいました。
要らぬエラーで余計な補足をさせてご迷惑を掛けました。
    • good
    • 0
この回答へのお礼

解決しました

出来ました!!!
何度も何度もお手間をお掛けしました。
すごくありがとうございます。
これは私には絶対思いつきません。
関数をある程度使いこなすのに遠そうです。。。

お礼日時:2016/10/19 20:59

No.5の回答者です。


No.6への補足だと、空白セルは数式で空白扱いをしたのですね。

COUNTA関数だけだと数式の空白もカウントするので工夫が必要です。
このことは、No.5の参考サイトにも書かれていることです。
参考サイトはCOUNTIFS関数を使っていますが、 COUNTBLANK関数で
処理しても結果は同じようです。
=COUNTA()-COUNTBLANK()
なので、No.5の式を以下のように修正します。

=IF(A2="","",IF(MOD(IF(A2="","",COUNTA($A$2:A2)-COUNTABLANK($A$2:A2)),2)<>0,A2-LOOKUP(10^10,$A$1:A1),LOOKUP(10^10,$A$1:A1)-A2))

これで交互に計算してくれると思います。

もしも、" #VALUE! "でのエラーが出たとしたら、空白にするための""が
" "のように間にスペースなどの文字列が入っている場合があるので、
このスペースを削除するなどして再計算してみてください。
https://allabout.co.jp/gm/gc/50028/
「エクセル関数? セルの飛び飛びになった引」の回答画像7
この回答への補足あり
    • good
    • 0

No.5の回答者です。


> しかし自分のデータの入っているエクセルで打ち込むと
> 交互ではなく2回連続の交互になります。
> またまたやり直したら♯VALUE!が出たり・・・

空白セルは本当に空白なのでしょうか?
半角スペースなどの見えないものが入っているのでは?
[置換]でスペースを削除してみてはいかが。
http://www.relief.jp/itnote/archives/excel-remov …

[半角と全角を区別する]のチェックを外せば、全角スペースの入力でも
半角スペースも[置換]で削除してくれます。
他の列の文字列などにスペースを入れたものがあるのなら、列を選択
して置換をすれば、選択列のみのスペースを削除してくれます。


交互に計算する部分のLOOKUPを使ったものは、以下のサイトを参考
にしています。
http://www.relief.jp/itnote/archives/003450.php
この回答への補足あり
    • good
    • 0

質問を理解していないかもしれませんが。



以下の式で計算してみて。

=IF(A2="","",IF(MOD(IF(A2="","",COUNTA($A$2:A2)),2)<>0,A2-LOOKUP(10^10,$A$1:A1),LOOKUP(10^10,$A$1:A1)-A2))

参考サイト
http://www.helpforest.com/excel/fx_sample/ex0700 …
「エクセル関数? セルの飛び飛びになった引」の回答画像5
この回答への補足あり
    • good
    • 1

》 ●80      始まり・・・計算しない


「始まり」は必ず●ですか?○の場合もあり?

●あるいは○が連続することもあるなら、その場合の計算法は?
空白の次に○が来ることはない?
この回答への補足あり
    • good
    • 1

・・・忘れ物・・・


この場合、B1セルには
 =A1
を入れておいてください。
    • good
    • 0
この回答へのお礼

先に解決いたしました。
お手間取らせてすみません。
ありがとうございました!

お礼日時:2016/10/19 21:00

数値が縦に連続しているときは、


 (下のセル)-(上のセル)
数値が縦に連続していないときは、
 (上のセル)-(下のセル)
のようなルールになっていますが、合っていますか?


自分はあまり賢くないので、作業列を作って行います。
A1セルから数値が入力されているとしたら、B2セルに
 =IF(A2="",B1,A2)
を入力後、必要な行までコピーします。

これで上下に隣り合ったセルを計算できます。
後は、
・A列の値が空白なら計算しない。
・A列の一つ上の行の値が空白なら(上のセル)-(下のセル)
 違えば(下のセル)-(上のセル)
のIF関数式を作ればよい。
C2セルに
 =IF(A2="","",IF(A1="",B1-B2,B2-B1))
を入力後、必要な行までコピーします。

…こんな感じ。

・・・
引き算の「引かれるセル」と「引くセル」の関係が前述のルールでない場合は、後半の式(C列)は自身で考えてください。
この回答への補足あり
    • good
    • 0

マクロ(VBA)を使ってよいならば、以下のようなものはいかがですか?


------------------------------------------------------------------------
Sub Sample()
Dim 数 As Variant
Dim 行 As Long
Dim 奇数回 As Boolean
Const 問列 As Long = 1
Const 答列 As Long = 2
For 行 = 1 To Cells(Rows.Count, 問列).End(xlUp).Row
With Cells(行, 問列)
If .Value <> "" Then
If 数 <> "" Then
If 奇数回 Then
Cells(行, 答列) = .Value - 数
Else
Cells(行, 答列) = 数 - .Value
End If
End If
奇数回 = Not 奇数回
数 = .Value
End If
End With
Next
End Sub
------------------------------------------------------------------------
問い対象をA列としていますが、別の列にしたいときは「Const 問列 As Long = 1」の「1」の部分を変更して下さい。
答えをB列に書き込みますが、別の列にしたいときは「Const 答列 As Long = 2」の「2」の部分を変更して下さい。
    • good
    • 0
この回答へのお礼

こちらの方でもお世話になります。
先ほどのと同じで全くVBAが一からになります・・・
すみません。

お礼日時:2016/10/17 18:49

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