• ベストアンサー

MS Exelで次の機能を作りたいのですが。

たとえばひとつの列のB3からB10のセルに適当に数値が,あるいは文字がはいっている(但し、ブランクのセルもある)として、 そのうちB10に近い(B10も含んで)セルにあるデータをB11に入れる機能。 どのように関数を組み合わせたらよいか悩んでいます。DO I=1 to 10 のような繰り返しが出来ないので それに置き換わる計算式を考えてみているのですが、思いつきません。このような計算が簡単に思いつかれた方おしえてください。VBAは考えていません。エクセルの関数を使った方法で出来ないか、ということです。 宜しくおねがいします。       

  • aegis
  • お礼率40% (8/20)

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

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

行数が不定のようなので作り直しました。 「=IF(COUNTA(B3:B10)>0,OFFSET($A$1,MAX(IF(B3:B10>0,ROW(B3:B10)))-1,COLUMN(B10)-1),"")」 配列数式ですので登録するときは、CtrlキーとShiftキーを押しながらEnterキーを押して下さい。上式の「B3:B10」は任意の範囲にして下さい。どのようなセル範囲についても表示可能と思います。(列は1列です) 指定した配列数式内で登録された最大の行番号を求め、A1セルからの座標位置を決めています。(他の方法もあった?) Columnの引数は列座標を求めるためです。自分以外の同一列のセルを指定してください。 countAは配列数式内が全て未登録の場合の対応です。

aegis
質問者

お礼

Nishi6さん、有難うございます。肝はMAX(ROWS(B3:B10)),Column(B10))という風に理解しました。これで行が挿入されて変更になっても、自動的に対応されそうですね。IF(B3:B10>0,…は何を調べているのでしょうか?また機会がありました教えてください。返事が遅くなり申し訳ありませんでした。

その他の回答 (5)

  • kbonb
  • ベストアンサー率51% (254/492)
回答No.6

こんにちは 1.B3:B10内で最下行にある数値または文字列を返す数式 =INDEX(B3:B10,MAX(ROW(B3:B10)*(B3:B10<>"")-ROW(B3)+1)) Ctrl+Shift+Enterで入力 2.B3:B10内で最下行にある数値を返す数式 =INDEX(D3:D10,MATCH(MAX(D3:D10)+1,D3:D10,1)) 3.B3:B10内で最下行にある文字列を返す数式 =INDEX(B3:B10,MATCH("*",B3:B10,-1))

参考URL:
http://www2.odn.ne.jp/excel/
aegis
質問者

お礼

ご回答有難うございます。Nishi6さんのご回答とほぼ同じ内容と個人的に独断で判断させていただき、この件はCloseさせていただきます。有難うございました。 

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

無理やり作ってみました。(IFを使わないで) B11セルにコピーしてください。 未登録のセル番号の最大値(B3が1)を求めてchooseで抽出しています。行数が増えたら変更する必要があります。 =CHOOSE(MAX((B3<>"")*1,(B4<>"")*2,(B5<>"")*3,(B6<>"")*4,(B7<>"")*5,(B8<>"")*6,(B9<>"")*7,(B10<>"")*8)+1,"",B3,B4,B5,B6,B7,B8,B9,B10) VBAは考えていないようですが、ユーザー定義関数なら関数的に使えますが・・・・ Public Function Toroku_Last(rg As Range) Dim cot As Integer With rg For cot = 0 To 7 If .Offset(-cot, 0) <> "" Then Toroku_Last = .Offset(-cot, 0) Exit For End If Next End With End Function B11セルは'=Toroku_Last(B10)'としてください。

  • Kaz003
  • ベストアンサー率48% (31/64)
回答No.3

データが3行から10行までなら 例えばB11に =IF(B10="",IF(B9="",IF(B8="",IF(B7="",IF(B6="",IF(B5="",IF(B4="",B3,B4),B5),B6),B7),B8),B9),B10) とすればいいですね。  C列以降は同様に数式コピーでいけます。 ただ、私感になりますがもっとデータ行数が増えたりすると if(if(if・・・もどうかと思うので、先の回答の方が使えるような気がします。 この場合必ずしも隣のセルである必要はありませんので例えばデータがB列からZ列まであるとしても、AA列以降とか(あるいは別のsheetとか)に同じ大きさの判定用領域があればいいわけですし、EXCELの数式コピーは容易ですので、お勧めだと思うのですが・・・

aegis
質問者

補足

有難うございます。B3からB10と言ったのは例示に過ぎません。実際の私の表はもっと長い列になっています。 エクセルでは関数のネステングは16(?)までになっているとありましたのでそれ以上の長い列には途中でいったんどこかにセーブしないと長続きしません。また隣の列でなくともという意見もわかりますが、個人的にはもっとスマートな方法で其れが達成されないかなということ希望があります。宜しくお願いします。

  • Kaz003
  • ベストアンサー率48% (31/64)
回答No.2

例えばC3のセルに =IF(B3<>"",ROW(B3),0)と入力しC10までフィルすると Bnが空白でない時の行番号が数値としてCnに返されます。 で、B11に =INDEX(B3:B10,MATCH(MAX(C3:C10),C3:C10,1),1) とすると B10に近いセルでブランクでないセルの値(数値、文字列) がB11に出ます。

aegis
質問者

補足

Kaz003 さん及びarataさん、ご回答ありがとうございます。補足させていただきますと、B3からB10のようなData列がB列の隣にも10数列並んでいると考えてください。したがって、B列の隣に計算を助ける列を新たに入れることは考えていません。但しB10と結果をいれるB11 の間に一セルくらいの計算を手助けするセルを入れることは吝かではありません。でも望むらくは、B11にエクセルで提供されている関数を組み合わせた計算式をいれることで目的を達成できたらと考えています。 宜しくお願いします。

  • arata
  • ベストアンサー率49% (139/279)
回答No.1

質問の内容では、仕様が良くわからないのですが、 □B10からB3に向かってブランクでないセルを探していって、最初のブランクでないセルの値をB11に入れる ということでしょうか? それとも、 □B3からB9に入っている値で、B10に最も近い値(近似値)のものをB11に入れると言うことでしょうか? 前者であれば、こんな感じにすればいいのでは? C3:=B3 C4:=IF(B4="",C3,B4) C5:=IF(B5="",C4,B5) C6:=IF(B6="",C5,B6) : 省略 : C9:=IF(B9="",C8,B9) C10:=IF(B10="",C9,B10) B11:=C10 後者だとしたら、数値以外が混じると難しいですね。 数字だけなら出来ると思いますけど・・・

aegis
質問者

補足

Arataさんご回答ありがとうございます。最初の質問におこたえします。そうです。B10からB3にむかってブランクでないセルを探しにいって最初のセルの内容をB11に戻したいということです。kz003さんの補足にもかきましたが、B列の隣には似たような列がさらにいくつか並んでいて、B列の隣は計算補助としては使えないと考えてください。 宜しくお願いします。  

関連するQ&A

  • Excel2003 ユーザー定義関数 で SUBTOTALとSUMPRODUCTの複合できますか?(複数条件)

    こんばんは。お願いします。 まず、セルA2、B2にそれぞれフィールド名"あ"、"い"があるとします。 この2列目以下にオートフィルターを使います。 A列のA3,A4…には文字列"a","b","う",または"かき"が入っていて、 B列のB3,B4…には数値(整数)が入っているとします。 このとき、セルB1にVBAで作成した関数を入れたいと思っています。 Excel2003です。 その関数は、以下の条件(1)と(2)を同時に満たします。 (1)A列が"a"または"かき"である場合のみ、その行のB列の数値の合計を計算する(SUMIF関数で可能) (2)オートフィルターを用いて抽出したら、表示されているB列の数値だけの合計を計算する(SUBTOTAL関数で可能) (3)作業列は使えません。 要するに、表示されているセルのうち、条件にあうもののみ計算したい、ということです。 もしこのようなことがワークシート関数でもできるのであれば、それで構いません。 どうぞ、よろしくお願いいたします。

  • Exel VBAで1つずつ代入するには?

    VBA初心者です。 日報を入力する作業を、Exel VBAを使って省力化したいと考えています。 1日が1シート、1か月分で1ブックになっています。 いったん別シートにべた打ちしたデータを、VBAで1つずつ各日のシートに貼り付けたいのです。 1枚目のシートのB列のセルB2~B32(1日~31日分に相当)に数値が入っているとして、 これを格納し、 シート「1日」セルF2、シート「2日」セルF2...シート「31日」セルF2 という具合に各シートの同じセル番地のセルに1つずつ貼り付けていくイメージです。 こんなふうに書いてみました。 ---------------------------------------- Sub test() Dim myNum(30) As Integer Dim i As Integer Dim j As Integer For i = 1 To 30 myNum(i) = Worksheets(1).Cells(i + 1, 2) For j = 1 To 30 Worksheets(i + 1).Cells(2, 6) = myNum(i) Next j Next i End Sub ---------------------------------------- でも、これでは1か月の日数の違いに対応できません。 これ以上はお手上げなので、お知恵を貸してください。 よろしくお願いします。

  • exelでセルの個数を数えたいんですが…

     どなたか教えて下さい。エクセルでセルの個数を数えたいんですが、普段私が使っているのは、COUNTA関数で十分だったんですが、これは文字、数値、数式などが入っていれば数えてしまいますよね。下のような表があった場合の数式が入っているセルを数えないようにする関数ってあるでしょうか? B2~B4、D2~D4、F2~F4まで全て数式が入っています。数字は別表から関数を使い出した数字です。それぞれB2~B4、D2~D4、F2~F4の数字の入っているセルの個数を計算したいです。A,C,D列には一連番号が入っています。)   A   B   C   D   E   F 1 番号     番号     番号   2 1   2   4   1 7 3 3 2       5   4    8 4 3   2  6       9   1  宜しくお願いいたします。

  • Excel 関数 計算式について

    Excel関数について教えて下さい。 下記のようにExcelの縦列で、A列とB列があるとします。 まず、B列の数値が「2.5」以下になる際の”A列のセル数”を算出するには、どのような関数(計算式)を使えば宜しいでしょうか? また、B列の数値が「2.5」のみの”A列のセル数”を算出するには、どのような関数(計算式)を使えば宜しいでしょうか? 但し、実際に計算式を記入するセルはA列でもB列ではなく、X列となります。 A列   B列 1     2.4 3     3.5 5     3.6 2     2.7 1     2.1 1     3.0 4     2.2 1     2.5 2     1.6 1     1.9 1     3.4 3     1.7 1     1.4 6     2.5 1     3.6 5     2.5 宜しくお願い致します。

  • Excel2002において、数式と数値を別に数えたいのですが。

    Excelで表を作っています。 表の最後の列にそれぞれ、その列の合計が入っていますが、基本的にそれは数式による計算結果です。 ですが、時々直接数値を入力したセルがあります。 1.数式による計算結果のセルが30個 2.そうでない数値のセルが10個 のとき、 1.30 2.10 というふうに数えたいのです。 できれば関数がいいのですが…(VBAは手に余るので) できるかできないかだけでもいいので、どうかお答えください。

  • Excel 関数 計算式について

    Excel関数について教えて下さい。 下記のようにExcelの縦列で、A列とB列があるとします。 A列の数値が「1」で、かつB列の数値が「2.5」以下の数(割合)を算出するにはどのような関数(計算式)を使えば宜しいでしょうか? また、上記の計算をすると同時に、その計算結果に当てはまる”B列”の数値を計算して、B列の合計数と平均数を割り出すためにはどのような関数(計算式)を使えば宜しいでしょうか。 個人的には、幾つかのセルに計算式を分ける必要があるかと思いますが、セルを分けるパターンでも分けないパターンてもどちらでも結構です。 但し、実際に計算式を記入するセルはA列でもB列ではなく、X列となります。 A列    B列 1      2.4 3      3.5 5      3.6 2      2.7 1      2.1 1      3.0 4      2.2 1      2.8 2      1.6 1      1.9 1      3.4 3      1.7 1      1.4 宜しくお願い致します。

  • エクセルで計算の結果がある数値の場合のみ文字列を表示させたいです・・・。

    エクセルで計算の結果がある数値の場合のみ文字列を表示させたいのですが、IF関数を使うのかなと思いますが関数がよく解かりません。。。 やりたいことはこんな感じです。 セルG1にはA1-B1、H1にはC1-D1、I1にはE1-F1と計算式が入っています。 計算の結果、▲1になるセルだけを文字列『売上』と表示させたいのですが・・・。 なお、計算の結果は、必ず『1』か『▲1』のどちらかにしかなりません。 つたない質問ですが解決したく困っています。よろしくお願いします。

  • Excel関数が機能しません

    エクセルのセルに関数を入れて、入力された数値から自動的に必要な値を算出する表を作ったのですが、関数の部分をいちいちダブルクリックしないと関数の機能を果たしません(計算されない)。 どうしたら良いでしょうか。

  • 特定の文字列を含む数値の分散計算

    Excelで特定の文字列を含む数値の分散を計算したいのです。 I2~I10にA・Bどちらかの文字が書いてあり、A2:H10には数値が書いてあります。 A~H列の数値について、Aを含むセルの分散とBを含むセルの分散を計算しなくてはなりません。 例えばA列の場合、A2~A10の中でI行にAが書いてあるもののみの分散・Bが書いてあるもののみの分散を計算するといった具合です。

  • MS Excelの「空文字」

    MS Excelの「空文字」 セルの内容が空文字(null)であるかブランク文字(blank)であるかの見分け方及びそれぞれの入力方法ははどうしたら良いのでしょうか。又、数値としての0(zero)との使い分けをパソコンのDisplay上どうしたら良いのでしょうか。ExcelのGraph機能を使う場合ブランクとして入れたものが0(zero)として認識され折れ線グラフなどで邪魔なゼロ点Graphなどが出てきてしまいます。これまでは、訳もわからず適当なコピペなどで誤魔化してきましたが今回すっきりしておきたくよろしくお願いします。

専門家に質問してみよう