• 締切済み

Excel(エクセル) 同じ列の空白でないセルの数を数える際、数えるセル範囲を流動的にしたい

S,A,B,C,Dと評価をして、それぞれ2,1,0,-1,-2という点数にします。 その点数の合計を評価と同じ列に表示されるようにしたいのです。 以下に具体的な例をあげます。 [B3]セル =SUM(COUNTIF(B$5:B$11,"=S")*2,COUNTIF(B$5:B$11,"=A")*1,COUNTIF(B$5:B$11,"=B")*0,COUNTIF(B$5:B$11,"=C")*-1,COUNTIF(B$5:B$11,"=D")*-2) [B5]~[B11]セル 評価(S,A~D)を入力 ここまではいいのですが、したいのはB12セル以降に新しく値を入れたら、自動的にB12セル以降の点数も加えてB3セルに表示されるようにしたいのです。B3セルに「B$5:B$11」の「11」代わりにもっと大きな値を入れれば可能なのですが、それはしたくありません。また名前をつけてもいいのですが、オートフィル機能を利用してC列以降にも数式を入れたいため、どうしていいかわかりません。 どなたか解決策がお分かりになられる方がおられましたら、どうかお知恵を拝借願えないでしょうか? ※管理者の方へ 訂正して再投稿ました。前回の書き込みは削除していただけると幸いです。

みんなの回答

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

前の質問で考えてました。締め切られてしまったが。 列のデータの最終行を捕まえることは関数では案外難しい。最終行のデータはLOOKUP関数で捉えられますが、同じ値が悦内に別に有るかも知れず、最終行が捉えにくい。VBAではコードが常套かしていてたやすい。 それで一例ですが、ユーザー関数を作る。 標準モジュールに Function wgt(A) d = Cells(65536, A.Column).End(xlUp).Row For i = 2 To d If Cells(i, A.Column) = "" Then Else s = s + Application.WorksheetFunction.VLookup(Cells(i, A.Column), Range("E1:F5"), 2, False) End If Next i wgt = s End Function シートのA1に =wgt(A1)と入れる。 またE1:F5に対応表を作る 今回の質問では変わったらしいが。 a 2 b 1 c 0 d -1 e -2 -- S S とは何点何点ですか?スペース? >S,A,B,C,Dと評価をして、それぞれ2,1,0,-1,-2という点数にします。 前の質問と変わったね。 E,F列をそのように組み替えてください。 出来るだけ前の質問で、捕足で修正し、続けてほしかった。 なお対応表はVBAでなら何とでもなる(プログラム内に入れるとか) VLOOKUPの第2引数も配列化できるかもしれない。VLOOKUPを使わなくても出来る。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

先ほど解答した者です。 >前回の書き込みは削除していただけると幸いです。 とは随分ですね。データと同じ列で集計したいならこんな式でも出来ますよ。達人maron--5さんの回答とややかぶりますが、ごめんなさい  =SUMPRODUCT((OFFSET(B$5,0,0,COUNTA(B$5:B$65536),1)={"A","B","C","D","E"})*({2,1,0,-1,-2}))

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.1です。 たびたびごめんなさい。 cpdqp454様が使っていらっしゃる数式もすでに関数ですが・・・ もっと簡単な関数という事でしたら、 すでに他の方の良い方法が出ていると思います。 私もそれ以上の良い方法はちょっと思いつきません。 顔を出したついでに・・・と言っては失礼なのですが、 maron--5様の数式を利用させていただいて、 AVEの行のB4セルの数式を書いておきます。 すでに実行されていると思いますが、余計なお世話として B4セルを =B3/COUNTA(B5:B100) として列方向にオートフィルでコピー! 今回もエラー処理はしていません (分母が「0」の場合はエラーになるはずです) どうも何度も失礼しました。m(__)m

回答No.4

B列のどこかのセルを選択して[Ctrl]+[F3]名前の定義 名前 : 数 参照範囲 : =COUNT($A:$A)+4 名前 : 範囲 参照範囲 : =B$5:INDEX(B:B,数) B3セルに =SUMPRODUCT((範囲={"S","A","C","D"})*{2,1,-1,-2}) 右へオートフィル

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

◆これでいかがでしょう >わりにもっと大きな値を入れれば可能なのですが、それはしたくありません ★ご希望ではないかもしれませんが B3=SUM(COUNTIF(B5:B100,{"S","A","B","C","D"})*{2,1,0,-1,-2}) ★下の式でも、COUNTA(B5:B100))とすると同じように思います B3=SUM(COUNTIF(OFFSET(B5,,,COUNTA(B5:B100)),{"S","A","B","C","D"})*{2,1,0,-1,-2}) ★右にコピー

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

> B3セルに「B$5:B$11」の「11」代わりにもっと大きな値を入れれば可能なのです> が、それはしたくありません なぜしたくないのでしょうか? 余分なセルの指定をしたくないと言うことでしたら A:A指定でも駄目と言うことになると思いますが… 最後の行を求めるにしても =MAX(INDEX((B1:B100<>"")*ROW(B1:B100),0)) などのようにセル範囲に値が入ると思われる範囲を指定しなければいけませんし…

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例ですが・・・ まず、メニュー → ツール → オプション → 「計算方法」タブで「反復計算」にチェックを入れておきます。 そして、B3セルに =SUM(COUNTIF(B:B,"S")*2,COUNTIF(B:B,"A")*1,COUNTIF(B:B,"B")*0,COUNTIF(B:B,"C")*(-1),COUNTIF(B:B,"D")*(-2)) という計算式を入れて 列方向にオートフィルでコピーではどうでしょうか? (エラー処理はしていません) 以上、当方使用のExcel2003での回答になります。 以上、参考になれば幸いです。m(__)m

cpdqp454
質問者

お礼

目から鱗です。うまくいきました。 関数で処理しようとばかり頭がいってました。 ありがとうございました。 でもせっかくだから関数で処理する方法も知りたいと思います。 何かいい案ないでしょうか?

関連するQ&A

  • Excel(エクセル) 同じ列の空白でないセルの数を数える際、数えるセル範囲を流動的にしたい

    A~D評価をして、それぞれ2,1,0,-1,-2という点数にします。 その点数の合計を出したいのです。 以下に具体的な例をあげます。 [A1]セル =SUM(COUNTIF(A$2:A$11,"=A")*2,COUNTIF(A$2:A$11,"=B")*1,COUNTIF(A$2:A$11,"=C")*0,COUNTIF(A$2:A$11,"=D")*-1,COUNTIF(A$2:A$11,"=E")*-2) [A2]~[A11]セル 評価(A~D)を入力 ここまではいいのですが、したいのはA12セル以降に新しく値を入れたら、自動的にA12セル以降の点数も加えてA1セルに表示されるようにしたいのです。A1セルに「A$2:A$11」の「11」代わりにもっと大きな値を入れれば可能なのですが、それはしたくありません。また名前をつけてもいいのですが、オートフィル機能を利用してB列以降にも数式を入れたいため、どうしていいかわかりません。 どなたか解決策がお分かりになられる方がおられましたら、どうかお知恵を拝借願えないでしょうか?

  • セルに数式が入ってるかどうかを取得する関数は?

    C1には、=SUM(A1:B1) C2には、0 が入力されています。 実際、A1:B1の値は0なので、 C1もC2も0が表示されています。 D列で、ちゃんとC列にsum関数が入ってるか調べてたいのですが =COUNTIF(C1,"*sum*") をオートフィルしても、0が返ります。 C3に「sum」と言う文字列を入れて、=COUNTIF(C3,"*sum*")をしたら 1が返りました。 COUNTIF関数は文字列は認識しますが数式は認識しないようです。 このような場合、セルに数式が入ってるかを取得する方法はありますか?

  • エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。

    エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。 エクセルのセルA1に 「A123B1234X9876C123DD」と入力されています。 これを 「A123-B123X9876-C123-DD」としたいです。 現在 ・B1のセルに=REPLACE(A1,5,0,"-") ・C1のセルに=REPLACE(B1,15,0,"-") ・D1のセルに=REPLACE(C1,20,0,"-") と入れて、D1にできた値の 「A123-B123X9876-C123-DD」 をコピーして E1のセルに「形式を選択して貼り付け」「値」で貼り付けして B1~D1を削除して ・A1のセルには元の「A123B123X9876C123DD」 ・B1のセルには編集後の「A123-B123X9876-C123-DD」 が表示されるようにしています。 このA列が100行もあるとうんざりです。 式をオートフィルでコピーしていくのですが  ・B1に式を入れてオートフィルでB100までコピー  ・C1に式を入れてオートフィルでC100までコピー  ・D1に式を入れてオートフィルでD100までコピー  ・D1~D100をコピーしてE1~E100に「形式を選択して貼り付け」「値」で貼り付け  ・B,C,D列を列削除  3回は式を入れないといけないです。一発で編集する方法はありますでしょうか?

  • 300個の文字列を結合し1個のセルに

    ファイル名変更ソフト「Namery」に使うのですが、セル1個に 001> 001a|002> 001b|003> 001c|004> 002a|005> 002a|006> 002c このようにして 300> 100c| までの文字列つくれませんか? VBAをお願いしたいのです。あるいは下記のD1からD300のセルの文字列を合体してE1に表示、でも良いのですが。 VBAを知らないので、次のような作業を始めましたが途中で疲労困憊です。 A1に001をいれオートフィルでA300までつくり B1に半角スペース+001a B2に半角スペース+002b B3に半角スペース+003c としてから 100c迄オートフィルし C1 に=CONCATENATE(A1,B1) C1をコピーD1に「値のみ貼り付け」してからオートフィル。 出来たD1からD300の文字列を1セルの文字列にするために、エクセルの30個までの制限のため何段階にも作業を分けなければなりません。 ファイル名変更ソフト=Namery の[連続置換・正規表現]に文字列を入れ目的を果たしたいのです。 http://www.vector.co.jp/soft/win95/util/se217399.html

  • エクセル”検索条件はセル内のあいまい値”

    どうにも検討がつかず調べても対応したものができないのでお力添え願います。 D列に”A”と入力し、C列へ「D列のセル値が含まれた場合C値からB値をマイナスし それ以外は上のセル値を反映させる」としたいのですがどうするのがいいでしょうか。 直接値を指定してあいまい検索は『=IF(COUNTIF($A2,"*A*"),C1-$B2,C1)』でできたのですが この "*A*" 部分を”B”というときもあるのでD列のセル値であいまい検索としたいです。 A列の値は以下のように”A”の後ろに複数の数字がつくことがあります。 A列 A2 A3 B4 B3 B4 A2 A4

  • エクセル ある数が含まれる範囲を調べ、その隣のセルの数を取得する

    聞きたい内容がうまく説明できないので、具体例を書かせていただきます。 下のような表があり、それとは別に1つ数値を入れるセルと結果を表示するセルがあります。 入力セルに例えば105を入れたとき、105は101(A列)~110(B列)の間の数値なので、その行のC列の値である3を結果セルに表示させたいのですが、どのようにすればよいでしょうか。 A列   B列   C列 1 100 0 101 110 3 111 120 2 121 130 5 131 140 2 141 150 2 151 200 3 201 1000 0

  • excel 文字列に他セルの数値を引用したい

    excel2003を使用しています。 簡単な収支報告書をつくってます。 A1~A5に値が入っていてA6にsum関数で合計が入っています。 B1~B5に値が入っていてB6にsum関数で合計が入っています。 Aが収入・Bが支出です。 たとえばA6は10000、B6は8000と入ってます。 A10のセルに「10000 - 8000 = 2000」といった感じで表示をしたいのです。 もちろん値は引用したいので、「A6 - B6 = (A6-B6)」という感じだと思います。そして、引く(-)とかイコール(=)は文字列として加えてあげるんですよね。 この時に実際の書き方はどのようにしたらよいのでしょうか?(2000の部分をそこで引用計算出来なければ、見えないところで計算させてC6などの引用でもいいと思いますが) ちなみにA10一つのセルに表示したいのは、レイアウト上セル幅を動かしたり出来ないからです。 文字列にセルの値を引用出来るでしょうか?

  • EXCEL 数式が入った空白セルを数える

    毎度お世話になっています。 質問の内容ですが、例えば下記のようなシートがあるとします。 セルB1、セルC1、セルD1:手入力セル セルA1:数式「=IF(B1="","",B1+C1)」 セルA2:文字列 セルA3:数式「=IF(D1="","",D1*0.1)」 セルA4:文字列 セルA5:A1+A3の計算結果を表示 (※なお、セルA2、A4は数値が入らない) というような場合において、 ●セルB1、C1、D1になにも入力されていない場合、セルA5が空白となる。 ●セルB1、C1にのみ数値が入力されている場合、セルA5の計算結果がセルA1の値のみ。 ●セルD1にのみ数値が入力されている場合も上記と同様に計算結果が表示される。 以上の条件を満たす数式をセルA5に入力したいのですが、 COUNTBLANKは数式が入っている場合には使えず、COUNTAの場合だとセルA1、A3のどちらにも数値が入った場合に表示される、といった数式になります。 IFをいくつも使えば可能とは思いますが、もう少し単純に数式を作れたらと思い質問をさせて頂きました。 よろしければ御回答宜しくお願い致します。 (内容を訂正したため、いったん質問を削除しました。もし御回答中の方が居ましたら申し訳ありませんでした。)

  • エクセルでセルに特定の数値を空白にしたい

    タイトルと質問内容が少し違うかもしれませんが、適当な表現が分からなかったのでこのようにさせて頂きました。 上司にエクセルで管理表を作成してほしいと頼まれました。 使用しているエクセルは2003です。 A列に担当者名、B列に契約日、C列に完了日、D列に契約から完了までの日数を表示し、日数ごとにセルへ色を付ける事にしました。 ということで、A1列に名前、B1とC1に日付、D1に=C1-B1を入力しました。 さらにD1は条件付き書式を以下のように3つ指定しました。 =AND(D1>3,D1<11) →青:4~10日間 =AND(D1>10,D1<16) →黄: 11~15日間 =D2>15 →赤: 16日以上 (上司には4種類で分けて欲しいと言われましたが、設定上出来ないと断りました。) これをオートフィルで下へコピーし、ほぼ思うような表に出来たのですが、B列に日付が入力されていて、C列に日付が未入力の状態だと、D列にー40923というようなマイナスの数値が出てしまいました。 これを回避するために、マイナスの数値はセルに表示しないようにしようと思いました。 しかし、契約よりも先に完了していることもあるかもしれないので、マイナス方向の日数には30日の幅を持たせることにしました。 従ってD1には=IF(C1-B1<-30," ",C1-B1)を入力し再びオートフィルしました。 これは希望通りに反映されたのですが、今度は B列入力済でC列未入力のD列のセルが赤で表示されるようになりました。 これはどのようにして解決したら良いのでしょうか? なぜ赤で表示されるのですか? そもそも私おやり方で間違いはないのでしょうか? つたない説明で申し訳ありませんが教えてください。 よろしくお願いします。

  • Excel 範囲内で条件を満たす異なる列の合計

    範囲内で条件を満たすセルで、異なる列の値を合計したい。 A1からA5に{10,20,30,40,50}という値が B1からB5に{0,1,2,3,4}という値が C1からC5に{5,6,7,8,9}入っている事とします。 A1:A5の範囲で複数の条件をつけます。 B列ではA列のセルの値が15<A<35となる、A2とA3と同じ行であるB2とB3の値 C列ではA列のセルの値が25<A<45となる、A3とA4と同じ行であるC3とC4の値 全部でB2,B3,C3,C4のセルの値を合計を返すセルを作成したい。 この場合目的のセルが返す値は1+2+7+8で18となる。 補助行を作ってでも構いませんので、このような加算が可能とするセルの作り方はないでしょうか。 Excel2000を使用しています。どうかよろしくお願いします。

専門家に質問してみよう