質問: Excel2010でマクロ、VBAを使わずに自動で同じ文字を複数行に表示するための関数の組み方などを探しています。 環境情報 ・Excel2010 背景 ・Excelをユーザに渡して、メンテや回収は自主的にやってもらうため、プログラムやマクロなどを設定はしない。 ・ユーザは関数は理解でき、自分でカスタマイズもできる前提。 質問 ・Excelで任意の数字(n)を入力したときに、関数である列に指定された文字列(Name)を入力されたn数だけ、表示したい。 ・考え方としては、COUNTIFで同じ列の文字のカウントを求める逆のパターン(カウントの分だけ表示)。 ・No.は表示する順番ですが、こちらはある程度並び替えれるやり方(VLOOKUPなど)がわかっているので、対象外で問題ないです(必要なら組み合わせていただいてもかまいません)。 Sample 考えた対策とそのNG内容 ・REPT関数を使用して、同じセルにNameをn個つなげることができますので、それを分解して、セルにおいていくことを考えましたが、実現は可能ですが、次の文字(AAAの次であるBBB)を表示するのが条件が複雑すぎて断念しました。 ⇒試した関数(Sample) G2:=REPT(A2,C2) G3以降:=LEFT(G2,LEN(G2)-LEN(A$2)) D列:=IF(A$2=LEFT(G2,LEN(A$2)),A$2) IF文でG2とG3を組み合わせればできますが、$を条件をIF等を使って分岐すると複雑になりすぎました。 ・INDIRECT関数とMATCH関数を組み合わせると2文字目以降がやはり複雑になりすぎたため断念しました。 条件 ・Sampleでは7までしかありませんが、No.は概ね100前後で、数量に変動あり。 ・Countは1~300としています。つまり最大で1列の自動表示のNameは30000セル。 ・計算領域は自由。 ・Sampleの列や行に関してはどの列や行を利用するかは自由としてます(作業列の追加など)。 求めている目標 ・必要なのはCount個のName(SampleのE列)であって、No.やCountの表示方法は不要です。 ・あまりに複雑な関数を多くのセルに適用すると、重くなることはさける(NGにした要因もその一つ)。 よろしくお願いいたします。
回答: あまりきれいではないですが、以下の方式でいかがでしょうか。 ・計算用として以下の列を追加(1行目にタイトルを追加する。データは2行目以降)。 D列:TotalCount(AAAから順番に合計数を積み上げる) E列:index(計算用の通し番号) F列:NameNo(Name文字列を参照するための番号) (もともとE列にあったName列以降を右にずらす(NameはG列になる) 具体的な計算式は以下。 ■TotalCount D2セル:=C2 D3セル:=D2+C3 D4セル:=D3+C4 ・・・・・ ■index E2セル:=1 E3セル:=1 E4セル:=2 E5セル:=3 ・・・・・ (1が2つになるのは、NameNoでMATCHを使用する関係上です。) (E3以降は「=ROW()-2」でもよいです。) ■NameNo F2セル:=1 F3セル:=IF(ISERROR(MATCH(E3,D:D,1)),1,MATCH(E3,D:D,1)) F4セル:=IF(ISERROR(MATCH(E4,D:D,1)),1,MATCH(E4,D:D,1)) ・・・・・ ■Name G2セル:=OFFSET($A$1,F2,0) G3セル:=OFFSET($A$1,F3,0) ・・・・・