• ベストアンサー
※ 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/17070)
回答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