• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COUNTIFSの逆の働きを関数で実現したい)

COUNTIFS関数の逆を実現する方法とは?

このQ&Aのポイント
  • COUNTIFS関数では複数条件で該当のセルをカウントできますが、その逆で数値分を対象のフィールド名に置き換える方法を、関数のみで実現したいと思っています。
  • 左のテーブルから右のテーブルにデータを転記する際に、COUNTIFS関数と同様の機能を使いたい場合、どのようにすれば良いでしょうか?
  • 左のテーブルの行と列のフィールドから、右のテーブルに対応する個数を表示したい場合、COUNTIFS関数を利用する方法がわかりません。解決策はありますか?

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

ANo.2です。 > バージョンは、Excel2016(not Office 365 サブスクリプション)です。 それではCONCAT関数は使用できませんね。 今回の例のように3×3程度でしたら私ならC10の式を↓の様にしちゃいます。 =C7&D7&E7&C8&D8&E8&C9&D9&E9

aro_tek
質問者

お礼

ご回答有り難うございます。 実際のところは、縦にも横にも長いので、行で一度結合した後に列で結合する形で対応してみることにしました。 ありがとうございました。

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

その他の回答 (2)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

Excelのバージョンは? 取りあえず、Excel2016の場合で回答します。 添付の図を見てください。 A2:A4、C7:E9、C10を作業セルとして使用します。 A2に 1 A3に =SUM(C2:E2)+A2 と入れてA4にコピー C7に =REPT(C$1&"★",C2) と入れてC7:E9にコピー C10に =CONCAT(C7:E9) G1に =VLOOKUP(ROW(),A:B,2,TRUE) と入れてG6までコピー H1に =TRIM(MID(SUBSTITUTE($C$10,"★",REPT(" ",100)),ROW()*100-99,100)) と、入れてH6までコピーします。 G列の連続する文字を表示したくない場合は条件付き書式を使って上のセルと同じ場合は文字色白としてください。 ★は表では使用しない文字列としています。もし、表の文字列に★が有る場合は別な文字に変更して下さい。 また、ちょっと手抜き版ですので、C1:E1に入る文字列をせいぜい10文字程度と仮定しています。 文字列が長くなるとH列の文字列が正しく表示されない可能性があります。

aro_tek
質問者

補足

失礼致しました。 バージョンは、Excel2016(not Office 365 サブスクリプション)です。 そのため、CONCAT関数(もちろんTEXTJOIN 関数も)が使用できない状態です。 ここら辺、CONCATENATE関数とかでゴリ押しで行かざるを得ないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問表現がわかりにくかった。それで推測して、やってみた。 ーー 右テーブルにあたるもの A2:B7に 1 A 2 B 2 B 3 A 3 C 3 C A列に直前と同じだからと言って、空白セルにするのは、Excelでは 複雑になる素。見やすいからだろうが、こういうデータを作るのはエクセルの経験がすくない人のやること。(書式で空白にすしたのなら、セルの値は入っているのでよいが)それで同じ値を入れた例にする。 c2:F5に完成系 0のセルを空白にするのは略。   A B C 1  1  0  0 2  0  2  0 3  1  0  2 D2の式は、=COUNTIFS($A:$A,$C3,$B:$B,D$2) 縦と横方向に式を複写。 ここまでは、質問者は、簡単だとして、質問してない内容。 しかし、本当に簡単だったかな? === 左のデータから右の表を作る。 関数では面倒くさい。小生も、考えると何時間かかるか。 長い式の回答になると思いが、もし回答が出たら、以下の本回答は無視して。 標準モジュールに Sub test05() Set sh = Worksheets("Sheet1") k = 1 For Each cl In sh.Range("D3:f5") If cl <> 0 Then ’空白でないセルだけ処理 'MsgBox cl For j = 1 To cl ’セル数値回だけ繰り返す sh.Cells(k, "H") = cl.Row() - 2 'データが第3行目から始まるので,マイナス2 sh.Cells(k, "I") = sh.Cells(2, cl.Column) k = k + 1 Next j End If Next ’--並べ替え Range("H:I").Sort Key1:=Range("H1"), Order1:=xlAscending End Sub ーーー 実行結果 H1:I6 1 A 2 B 2 B 3 A 3 C 3 C

aro_tek
質問者

お礼

有難うございます。 紐付いている内容を考えれば、左の列から走査して、上のフィールド名を必要な数拾う。 拾い終わったら次の行に進むってだけの簡単な内容なので、実装方法はともかくマクロならすぐ終わるんですが…… ここを関数のみで実現するというのが辛いところです……

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

関連するQ&A

  • excel2003でcountifs関数と同等の

    excel2003でcountifs関数と同等の効果を出すにはどうすればいいのでしょうか? 具体的には、A1からB100に1から5の数字がランダムに入っている場合、 AとBの列がどちらも3である行の個数をカウントしたいです。 よろしくお願いいたします。。

  • エクセル countifs関数の記述法を教えて

    画像の一覧表から、A列に"○"が付いた行だけについて、75歳~79歳の男性の人数をカウントしたいのですが。 "○"を付けるする前の一覧表については、先の質問(No.8135362)で回答をいただき解決しました。    =COUNTIFS(C2:I6,">=70",C2:I6,"<80",D2:J6,"男") で5人となります。 このたび、A列に"○"を付けた行だけについてカウントする必要になり、次の式を立てましたが、#VALUEがでてしまい、どうにもなりません。    =COUNTIFS(A2:A6,"○",C2:I6,">=70",C2:I6,"<80",D2:J6,"男") countifs関数に、subtotal関数のような機能があればよいのですが、わかりません。 思いつくのは、フィルターをかけた後、その一覧表を、別シートにコピーペーストしてから、最初の式でカウントする方法しか思いあたらないのですが。 実際の表はもっとずっと大きいので、ひとつの関数式でできないものかと思っています。 よろしくお願いします。

  • エクセル 2010 のピポット・テーブル

    エクセル 2003 でピポット・テーブルを使って,同じ列にあるデータの個数をカウントしていました。基本的な原理は全く分からないのですが,添付画像にあるように,カウントする列をアクティブにして(画像左)ピポット・テーブルを作動させますと,「ここの行にフィールドをドラッグします」,「ここにデータ アイテムをドッグします」という表示がなされ(画像中),その通りドラッグするとデータの個数を集計してくれます。(画像右) エクセル 2010 で同じ操作をさせようと思っているのですが,ピポット・テーブルの仕様が,以前と違うようで,操作の仕方が分かりません。手順をご指導いただけませんでしょうか。

  • COUNTIFS関数 条件が日付の場合の入力方法

    いつも回答ありがとうございます。 別シートに一覧があります。この別シートから個数を算出し、集計用シートに個数を表示させようと思っています。COUNTIFSの記述方法通り【集計用のC4セルに=COUNTIFS(一覧!$D$8:$D$76,C3,一覧!B8:B51,B4)】に入力しましたが、結果がVALUEになります。日付の条件記述方法が間違っていると思われますが、何処が間違っているのか分かりません。御指導の程よろしく願い致します。 一覧 B8:B100 に日付 D8:D100 に商品名 集計用シート B4:B100 に日付が連番で入力されている C3:Q3 に商品名が入力されている 集計用シートのセル番地を使用して条件入力。

  • 関数をVBAで使用する方法

    こんばんは、VBAについて質問させてください、初心者のため、初歩的な質問で申し訳ありません。 '検索対象は「りんご」や「みかん」などの文字列 Dim 検索対象の文字 As String '3行目から最終行+1行を処理対象にする For 行 = 3 To Cells(Rows.Count, 1).End(xlUp).Row + 1 '3列目の文字が下の行と違う場合(1行下から別の文字列のデータが始まる場合)3行上の19列目に3列目と同じ文字を入力し、数を集計 If Cells(行, 3) <> Cells(行 + 1, 3) Then Cells(行 - 3, 19) = Cells(行, 3) 検索対象の文字 = Cells(行, 3).Value Cells(行 - 2, 19) = "=CountIfs(C:C," & 検索対象の文字 & ")" End If Next 行 上記の処理を行っても関数の中には"=CountIfs(C:C,みかん)としか表示されず、 数が集計できません。文字列なので、「みかん」の前後に「"」が必要なのですが、 どのようにすれば「"」を追記できるでしょうか…?!また、もう一つCOUNTIFSの条件がありまして、「M列が0でないならば」(<>0)という条件を加えたいのですが、これも追記しようと "=CountIfs(C:C," & 検索対象の文字 & "M:M,<>0)"にしますと「アプリケーション定義またはオブジェクト定義のエラーです。」と表示されます。 ネットにある関数と変数の組み合わせ方は色々読んで色々と試してみたのですが、中々うまくいきません。 どなたかご助力いただけると大変嬉しいです…!

  • Excelピボットテーブルについて

    ピボットテーブルを使ってデータ集計をしています。 とある文字列Aの個数と文字列Bの個数を値として表に出しているのですが、 文字列Aの個数/文字列Bの個数を表示させる新たな列を作ることは可能でしょうか? 集計フィールドの挿入で「文字列A/文字列B」と入れてみたのですが、#DIV/0!になってしまいました。 もう少し具体的にやりたいことを書くと、 品物列に「きゅうり、りんご、トマト」の文字列 〇×列に「〇、×」の文字列 が、データベースに入っていて ピボットテーブルのほうできゅうりと入力されてる個数、〇と入力されてる個数が値としてあります。 きゅうりが3、〇が1だとして、1/3をパーセント表示した列を作りたいです。 (きゅうりの合計数のうち〇が何パーセントあるか) 分かりにくくてすみません。。 可能であればその方法も教えていただきたいです。

  • HTMLにて実現可能かどうか

    こんにちは。今回もまたよろしくお願いします。 今「こういう形でレイアウトしたい」という画面がありまして、そのレイアウトが実現できるかどうか知りたいのです。 使ってるのはHTMLだけなのですが、列が7個ほど、行がかなりの数あるテーブルがあって、これをこのまま出力すると下まで、ずーっと続いてしまいますよね? これをテーブルの横にスクロールバーをつけるような感じのレイアウトにしたいと思っているのですが、これは実現可能なものなのでしょうか? タグや参考サイトがございましたらお教えいただけると助かります。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • 表のばらばらの文字列を1列にまとめたい 関数

    添付の左の表を右の表にしたいです。 (1)左の表には数式が入っていて、この他にもう一つある表のデータに該当すると1列ごとにSMとかNPとか表示されるようになっています。 (2)この左の表は実際には136列あるので、結果を印刷すると一枚に収まりきらないのです。なので、右の表のように、1列に表示したいのです。 (3)1行のうち、2個以上文字列が入ることもありますが、その可能性は低いので、とりあえず1行に1個ずつ出現すると考えてもらっていいです。(2個以上文字列が出現する場合も分かれば教えてください。) (4)関数でできませんか? またはマクロでもいいです。

  • ピボットの集計方法「合計」初期設定、他

    エクセルのピボットテーブルを作成するとき、 データアイテムの集計方法がいちいち「個数」になってしまうのですが、最初から「合計」に設定する方法はないでしょうか? (2)また列フィールドの選択肢が沢山ある時、まとめて列フィールドに表示させる事はできないでしょうか?一つ一つリストから移動しないといけないでしょうか? (3)さらに行フィールドに項目を選ぶと、全てに「集計」行が出来て、一つ一つ「表示しない」にしないと消せないのですが、最初からあるいはまとめて「集計」行を表示させない方法はないでしょうか? よろしくお願い致します。

  • SQLの DELETE文を関数で実現するアイデア?

     当方、エクセルは一度も操作したことがありません。それなのに 1、クロス集計クエリーをエクセルで実現する。 2、ユニオンクエリ―をエクセルで実現する。 3、SQL言語で全ての操作を実現する。  以上をVBAコードやマクロを使わないで式(関数)一発で可能とするに挑戦中。 1、クエリーの結果をシートに表示する。 2、Delete文の実行を可能にする。 【質問】SQLの DELETE文を関数で実現するアイデアとは? 今、私が、考えているアイデアは、 Step1:削除対象の先頭列に"#delete"を書き込むUpdate文を実行する。 Step2:先頭列に"#delete"のある行を、エクセルの.Delete で削除する。 Step2の対案: 先頭列に"#delete"のある行を不要行と見做して必要行を繰り上げて詰める。  エクセルユーザーが、《テーブルシート》《データ入力シート》《レポートシート》という考えでシート設計していれば、現行の有力候補でOKだと思います。が、「あくまでもテーブルの行だけを削除しなきゃーダメ1」と言われれば、対案を考えざるを得ません。  で、皆さん、グッドアイデアはありませんか?

このQ&Aのポイント
  • EP-976A3のスキャナーユニットを閉じてくださいというメッセージが表示され、印刷ができない問題が発生しています。どのように解決すればよいでしょうか?
  • EPSONのEP-976A3プリンターで印刷しようとすると、スキャナーユニットを閉じてくださいというエラーメッセージが表示され、印刷ができません。どのように対処すればよいのでしょうか?
  • EP-976A3の印刷に際して、スキャナーユニットを閉じてくださいというエラーメッセージが表示され、印刷ができない問題に悩まされています。解決策を教えてください。
回答を見る

専門家に質問してみよう