• ベストアンサー

エクセルで関数を用いて数値入力

エクセルでA列に0とそれ以外の数字が入力されています。(下記の画像のように、0以外の数字は飛び飛びに入力されており、それらの数字の間を0が埋めているというイメージです) B列に以下の条件で数字を入力したいのです。 1、A列に0以外の数字が入力されているときは、B列には0を入力する。 2、A列に0が入力されているときには、その行より上で最も近い0以外の数字を入力する。 上記の条件で、B列に関数で数値入力をすることはできますか。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

先頭行のA列がゼロだと「上」が無くて解決できないのですが,まぁそれは置いておいて B1に =IF(A1="","",IF(A1<>0,0,OFFSET(A1,-1,- -(OFFSET(A1,-1,0)=0)))) として下向けにつるつるっとコピーしておくなど。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#204879
noname#204879
回答No.4

  配列数式 B1: {=IF(A1,0,LOOKUP(10^99,IF(A$1:A1,A$1:A1,"")))}

blackleon
質問者

お礼

ご回答ありがとうございました。様々な考え方があることがわかりとても勉強になりました。 回答をいただいた方、皆様に感謝いたします。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 一例です。 A1セルからデータがあるとします。 B1セルに =IF(A1="","",IF(A1=0,INDEX($A$1:A1,MAX(IF($A$1:A1<>0,ROW($A$1:A1)))),0)) これは配列数式になってしまいますので、この画面からB1セルにコピー&ペーストした後に 数式バー内で一度クリック → 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これをオートフィルでずぃ~~~!っと下へコピーではどうでしょうか?m(__)m

blackleon
質問者

お礼

ご回答ありがとうございました。様々な考え方があることがわかりとても勉強になりました。 回答をいただいた方、皆様に感謝いたします。

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

1行目に2の条件は設定できません。ですのでB1は手入力になりますが... 2行目以降なら B2=IF($A2=0,IF($B1=0,$A1,$B1),0)

blackleon
質問者

お礼

ご回答ありがとうございました。様々な考え方があることがわかりとても勉強になりました。 回答をいただいた方、皆様に感謝いたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 2つの数字の変化を読み取るエクセル関数はありますか

    エクセルの関数についてです。2つの数字の変化を A列  B列 100    1 103    1 109    1 120    1 105    -1 102    -1 120    1 123    -1 ・    ・ ・    ・ ・    ・ となっている時に,以下の2つの条件を満たす式を作ることはできますでしょうか。 (1)B列の数字を3行ずつ見てゆく。3行目までずっと1が続き,数字が変わらなければ(-1が出なければ)3行目のA列の数値(109)を取り出す (2)数字を取り出してから次の3行目までの間でB列の数字が変わったとき(1→-1,-1→1)には,変わった行のA列の数値(105)を取り出す。次は,B7なので120,次はB8なので123…と 数字を取り出す度にリセットして,新たに3行の中から新しい数字を取り出すようにしたいのです。 やはりマクロを組まないといけないのでしょうか? 分かりにくかったら申し訳ございません…

  • エクセルのIF関数について

    エクセルのIF関数について質問をさせて頂きます。 現在、下記のような条件で抽出できる式を考えているのですが、 中々思うような式が思い浮かびません。 例えば、     A列  B列  C列  D列 1行目  111 2行目  222 3行目  333 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999 上記のようなシートがあったとして、     A列  B列  C列  D列 1行目  111       999 2行目  222       333 3行目  333   ○   123   × 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999   ○ 上記のように、例として C列の1行目に「999」と入力した場合、A列の9行目に「999」の数字があるので、その横のB列に「○」 C列の2行目に「333」と入力した場合、A列の3行目に「333」の数字があるので、その横のB列に「○」 C列の3行目に「123」と入力した場合、どこにも該当番号がないので、入力したC列の横、即ちD列の3行目に「×」を表示 要は、A列のどこかに該当数字があった場合にはその数字の横(B列)に「○」、どこにも該当数字が無い時には、入力した数字の横、D列に「×」を表示するような数式を考えています。 IF関数を使えばできるような気がするのですが、色々と試してみても中々うまくいきません。 下手な説明で分かり辛いかもしれませんが、どなたかご存知の方がいましたら、ご教授の程頂ければ幸いです。 どうぞ宜しくお願い致します。

  • エクセルの関数で

    A列B列それぞれに100行ぐらいあり数値が入力しています。 C列にA列とB列のうち数値が小さい方の数値を100行分抽出したいのですが、エクセルの関数でできないでしょうか?

  • エクセル関数について

    エクセル関数について質問です。 簡単に説明すると特定のセルに特定の数値を入力するとその行の別のセルの数値を別のセルに表示させたい。 たとえば     A      B       C 1  100            2  200      1      100 3  300      1      300 4  400 5  合計            400 上記の様になっていた場合 A列は定数で固定です。B列のセルに1と入力(1でなくてもよい)した行のA列の数値を Cに表示したいのですが、 C列にどの様な関数を使ったらいいんでしょうか?宜しくお願い致します。

  • エクセルで範囲内の条件を満たす数値を返す関数を教えてください。

    エクセルで範囲内の条件を満たす数値を返す関数を教えてください。 100以下なら1111 100超~200以下なら2222 200超~300以下なら3333 300超~400以下なら4444 400超~500以下なら5555 500超~600以下なら6666 600超~700以下なら7777 700超~800以下なら8888 800超~900以下なら9999 900超なら10000 上記のような条件があり、入力した数字が該当する条件の範囲内に該当している数字を抽出したいのですが、それができる関数を教えてください。 例えばA1セルに650と入力するとB1セルに上記の条件で該当する7777を表示する、 A1セルに100と入力するとB1セルに1111、 901とA1に入力するとB1に10000と表示されるなどのようにしたいのです。 IFを使った関数では7つまでしかネストできないので、上記の場合10ネストしなければならないのでIF関数が使えません(使える方法があるかもしれませんが私は知りません)。 ネストせずに「&」を使う方法も考えたのですが、それだと数値として扱われず文字として扱われてしまい表示形式を自在に編集することができなくなってしまいます。 良い解決方法を教えてください。

  • 文字を入力したら数値が自動入力!(エクセル)

    いつもお世話になっています。 例えばA列の1行目に「りんご」と入力(若しくはリストの中から選択)すれば、B列の1行目には自動的に「5」と数値が入力されるという仕組みを教えて頂ければと思います。 因みにA列1行目に入力する文字(上記の例では「りんご」)が仮にA列の1行目以外に入力しても、それに対応し、数値を出せるようにしたいのです。(例:A列5行目に「りんご」を入力すると、B列5行目に数値の「5」が表示) 以上の説明で分かりにくいかもしれませんが、宜しくお願いします。

  • ある条件下でIF関数により取り出した数値を計算する方法

    エクセル関数です。2つの数字の変化が A列  B列 100    1 103    1 109    1 120    1 105    -1 102    -1 120    1 123    -1 ・    ・ の時に,以下の2つの条件を満たす式を作る。(1)B列の数字を3行ずつ見てゆく。3行目までずっと1が続き,数字が変わらなければ(-1が出なければ)3行目のA列の数値(109)を取り出す。(2)数字を取り出してから次の3行目までの間でB列の数字が変わったとき(1→-1,-1→1)には,変わった行のA列の数値(105)を取り出す。次はB7なので120,次はB8なので123…と数字を取り出す度にリセットして,新たに3行の中から新しい数字を取り出す。 (頂いた回答) 3列使います。C4=IF((B3=B2)*(B4=B3)*(SUM(C$2:C3)=0)=1,1,0)。D4=IF(B4<>B3,1,0) E4=A4*(C4+D4)。 リセットする毎に,リセットした時点のA列の数字から取り出したA列の数字を引き算したいのですが,良い関数が思いつきません。

  • エクセル関数の詳しい方ご教示ください。

    エクセルの詳しい方、ご教示ください。 A B C D E F G(表示したい列) 1行目 2 3 5 7 9 2 =知りたい関数 2行目  4 5 8 9 1 2 上記のようなランダムな数値データがあり、 ・Aの列に表示している数字の数だけ、 ・Bから右の列に移動した数字を、 ・Gの列に表示したい と、思っています。 例で考えると、 G1のセルは7 G2のセルは2 と表示されるイメージです。 Gにはどのような関数を使えばよいでしょうか?

  • エクセル 条件によってデータ入力 関数

    エクセルで、関数を利用してデータ集計をしたいと考えています。 A列の数値が  (1)100以下だったら 「1」 (2)101~150だったら 「2」 (3)151以上だったら 「3」 と別列Bに表記する というイメージで関数を組みたいと考えています。 この例の場合だと、A列の値に応じてB列に1/2/3のいずれかの値が入力されるイメージです。 どう関数をつくればいいかわからず困っています。 よろしくお願いします。

  • 関数中にセルに入力した値を反映させて計算を行いたい

    こんにちは Excelを用いた計算を行っているのですが 自分の知識では出来なかったために皆様の知恵を借りたいと思っています Excelで単純な足し算を行いたいのですが とあるセルに入力した値によって計算範囲を変更したものを作りたいと考えています 仮にA行1列からA行20列まで各セルに1,23…20と順番に1つの数字が各セルに入力されていたとします この時, B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力される (イメージとしたら結果として1+5より6が出力される) B行1列のセルに10という数字が入力されていたら C行1列にA行1列数字とA行10列の数字の和が入力される (イメージとしたら結果として1+10より11が出力される) ような関数を作りたいと考えています 自身の甘い考えで B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力されるのは C行1列に=A1+A(B1)と入力したら出来るのではないかと考えていたのですが どうもできないみたいです なにか方法等浮かぶ方がいらしましたら回答をお願いします

専門家に質問してみよう