- ベストアンサー
エクセル範囲の代入
- エクセルの特定のセルに入力された範囲を別のセルの関数式に用いる方法について教えてください。
- 25シートにわたるエクセルの表において、項目ごとの区分の数や種別ごとの数を自動的にカウントしたいです。
- 範囲式部分を抜き出してCOUNTIF関数に代入する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あ、それともう一つ二つ。 とりあえず、A列「項目番号」は昇順で並んでいるのかな? という疑問を呈しつつ。 私の回答には直接影響しませんが(汗)。 一つ目、これは構成の・・というか考え方の転換なのですが、 A列に条件付き書式、数式を使用して~~ で、 式(A2セル):=A1=A2 設定する書式:文字色=背景色(通常は白?) を設定し、入力されているけど見えない状態にしてやれば COUNTIFS関数一発でいけますね。 2007以降をお使いであれば、という条件が付きます。 で・・集計についてはピボットテーブルで考えると面白いかもですね。 前の回答の「作業1:G2:=IF(A2="",G1,A2)」だけを作って (A列は昇順に並んでなくてもOKですよ)、 A:G列を基にピボットテーブルを作成。 ウィンドウ右側にフィールドリストがでますので、 ・作業1 ⇒ 行 ・区分 ⇒ 行 ・種別 ⇒ 値 ※データの個数/種別 と表示されます。 にそれぞれドラッグ・ドロップしてやると、添付のように出来上がります。 詳細は「ピボットテーブル」で検索すると色々出てきますから、 ご興味がおありなら別途お調べください。 なお、A列に条件付き書式作戦で行くなら、作業列は不要ですね。 見えなくてもデータは保持してますから。
その他の回答 (2)
- mt2015
- ベストアンサー率49% (258/524)
- tsubu-yuki
- ベストアンサー率46% (179/386)
例えば・・ごく単純に解りやすい関数で いわゆるステップバイステップで考えてみましょうか。 前提として、1行目に表の項目名(項目番号・区分・・)があり、 2行目からデータ行開始、としています。 表外のどこでもいいので(とりあえず、G列にします)、 G2:=IF(A2="",G1,A2) として、行方向にフィルしてやると・・どうでしょう。 おそらく、G列が「項目番号」で満たされると思われます。 これを、「作業1」と考えます。 続いてH列には H2:=IF(B2<>"",G2&"-"&B2,"") として、項目番号&区分の「作業2」を作りました。 「区分が空欄」のデータ(行)は空白を返すようにしています。 ※最終的にはこの列を数えます。 I列は I2:=IF(COUNTIF($H$2:H2,H2)>1,"",H2) 起点の$H$2セルを絶対参照し、 終点であるH列自行セルを相対参照で追いかけるのがポイントです。 簡単に言うと 「自分の行より上に、自分と同じデータが(自分を含めて)2件以上あれば」 つまり、「自分のデータが既出なら」空白を返す、という感じです。 これで重複を非表示にした「作業3」ができました。 ※発生し得る「項目番号&区分」をあらかじめリストアップできるなら 「作業3」を飛ばして次のステップにいけますね。 「結論」のJ列 J2:=IF(I2<>"",COUNTIF(H:H,H2),"") として、H列(作業2)全体にCOUNTIFして完了です。 I列が空白だったらJ列にも空白が返ります。 あとはこれを、例えば「フィルタ」などで空白を消してやれば スッキリしますね。 以上、馴染みの浅い関数は使わずに出来ますよ。 ただし、作業列は勘弁してくださいね。 非表示にしておけば見えませんから(汗)。 の例でした。 ・・・難しい関数をややこしく使えば一撃かもしれませんが、 私はややこしい長い式は不得手なので、それは他の方にお任せします(笑)。 VBAを使ってもそんなに難しくない案件かもしれませんが、 そこまでやる必要もあまり無さそうかなと思いますので、 私は積極的にオススメはしません。 後々の引継ぎやメンテナンスを考えると、 簡単な仕組みの方が良いですよ、きっと。
お礼
なるほど・・・ 一気に済ませようとするのではなく、段階を踏んで 徐々に答えに近づけていく・・・ということですね!? それならできそうです。 ありがとうございます!!
お礼
なるほど・・・ 同じ行に 項番と区分が無いので、ピボットは思いつきませんでした。 確かに、すぐ横に答え(出したい値)が無くても良いので、ピボットで出してしまえば簡単でしたね。 「こう!」と考え出すと、一人ではなかなか別の発想に行きつかないので、参考になりました。 ありがとうございます!!!