• 締切済み

文字列カウントと並び替え

初めての質問です。PC初心者です。宜しくお願い致します。 エクセルの関数で、 A列の文字列をカウントして小さい順にB・C列に表示したいです。 A列 :B列 :C列 200 :100 :2件 100 :200 :1件 100 :500 :1件 500 : こんな感じです。 色々調べてB列に並べかえましたが、カウントできず。。。 カウントできたら、並べ替えできず。。。 知識不足で申し訳ありませんが、お力添え下さい。

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

>(うまく表示されない場合があります。)と注意がでで、OKしても表示がでませんでした。 数式を入力したセルを計算範囲に含めてしまったのではないでしょうか? 回答No.3に貼付した画像の通りに表を作成して次の式をコピーし、B2セルを選択して数式バーへ貼り付けEnterキーで確定してください。 =IF(MAX(A$2:A$100)>MAX(B$1:B1),SMALL(INDEX((A$2:A$100="")*(MAX(A$2:A$100)+1)+A$2:A$100,0),COUNTIF(A$2:A$100,"<="&B1)+1),"") 続いて次の式をコピーしてC2セルを選択し、数式バーへ貼り付けてEnterキーで確定します。 =IF(B2<>"",COUNTIF(A$2:A$100,B2),"") B2セルとC2セルを選択してC2セルの右下隅を下へ20行までドラック(オートフィルコピー)してください。 結果が回答No.3の貼付画像と同じになればB列とC列の数式が正しいことになります。 B2の数式について説明しますと次のようになります。 INDEX関数でA列の空白セルの値を仮にA列の最大値+1とし、数値が入力されている値はそのままとした配列数をSMALL関数へ与えます。 SMALL関数ではINDEX関数から受けた配列の中の小さい順に抽出するための番号をCOUNTIF関数の返り値から割り出しています。 これを上の行から順に重複しないような工夫をしてあります。 あなたが実行された内容を提示して頂ければ数式を添削できますが「やっぱり私にはできませんでした。」ではアドバイスのしようがありません。 数式の論理を理解できなければ先へ進めないでしょう。

noname#204879
noname#204879
回答No.5

》 色々調べ…ましたが、カウントできず。。。 関数が苦手なら、関数を一切使わない[ピボットテーブルレポート]に依るという別解もあります。結果だけを示しておきます。→添付図

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

No.1です。 >E1:E150などにしたからでしょうか?? というコトですと、絶対参照にする必要がありますね。 作業列はちゃんとできたとして、 B1セルの数式を =IFERROR(SMALL(E$1:E$150,ROW(A1)),"") のように$マークを付ける必要があります。 範囲指定後 F4キーを何度か押してみてください、「$」の位置が変わります。 今回は下へフィル&コピーするだけですので、行だけを絶対参照させます。 同じようにC列も150行までであれば =IF(B1="","",COUNTIF(A$1:A$150,B1)) のようにしてみてください。 おそらく大丈夫だと思います。 ※ 相対参照・絶対参照(複合参照)などはネットで検索してみてください。m(_ _)m

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

回答No.2の一部訂正です。 B2セルの数式に勘違いがありました。 =IF(COUNT(A$2:A$100)>=ROW(),SMALL(INDEX((A$2:A$100="")*(MAX(A$2:A$100)+1)+A$2:A$100,0),COUNTIF(A$2:A$100,"<="&B1)+1),"")     ↓ =IF(MAX(A$2:A$100)>MAX(B$1:B1),SMALL(INDEX((A$2:A$100="")*(MAX(A$2:A$100)+1)+A$2:A$100,0),COUNTIF(A$2:A$100,"<="&B1)+1),"")

haruna-0313
質問者

お礼

ありがとうございます。 やっぱり私にはできませんでした。 (うまく表示されない場合があります。)と注意がでで、 OKしても表示がでませんでした。 関数に間違いはなかったようですが、、、(間違ってますの注意はでませんでした。)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>エクセルの関数で、A列の文字列をカウントして小さい順にB・C列に表示したいです。 先頭行をフィールド名としてA1:元データ、B1:単一化、C1:再現数のように入力したものとします。 A2以下に提示の数値データが入力されている状態で以下の数式を入力してください。 B2セル =IF(COUNT(A$2:A$100)>=ROW(),SMALL(INDEX((A$2:A$100="")*(MAX(A$2:A$100)+1)+A$2:A$100,0),COUNTIF(A$2:A$100,"<="&B1)+1),"") C2セル =IF(B2<>"",COUNTIF(A$2:A$100,B2),"") B2セルとC2セルを選択して下へ必要数コピーすれば良いでしょう。 この数式は元データの最大行番号を100としてありますので実際の行数に合わせて変更してください。

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

こんにちは! >A列の文字列をカウントして・・・ とありますが、A列は数値だとします。 ↓の画像のように作業用の列を設けるのが判りやすいと思います。 作業列E1セルに =IF(COUNTIF(A$1:A1,A1)=1,A1,"") という数式を入れフィルハンドルでずぃ~~~!っと下へコピーしておきます。 そしてB1セルに =IFERROR(SMALL(E:E,ROW(A1)),"") C1セルに =IF(B1="","",COUNTIF(A:A,B1)) という数式を入れ、B1・C1セルを範囲指定 → C1セルのフィルハンドルで下へコピー! これで画像のような感じになります。m(_ _)m

haruna-0313
質問者

お礼

早速、ご回答頂きましてありがとうございます。 ただ、私の技術ではできませんでした。。。 なぜかB列の100などが表示されず500から下が表示されました。 =IFERROR(SMALL(E:E,ROW(A1)),"")のE:E範囲を列でなく E1:E150などにしたからでしょうか??

関連するQ&A