• 締切済み

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

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

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答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/8248)
回答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/8248)
回答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

  • 文字列から数字をカウント

    エクセルバージョン2007 A列に以下の文字列が有る場合、数字の一塊のカウントではなく、文字列に入っています "0,1,2,3,4,5,6,7,8,9" それぞれをカウントする関数をご教授頂ければ幸いです。 12345-67890    → B列に 10 と表示 2aa-12345-00   → B列に 8 と表示 1bb        → B列に 1 と表示 以上、宜しくお願い致します。

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • 文字列の並べ替えで、お知恵拝借

    Excel 2003、2013 を使用しています。 添付図に基づいて説明させていただきます。 列Bの文字列データを[昇順]で[並べ替え]ると、 “ふりがなを使う”の場合は、列Cに示した番号順で、 “ふりがなを使わない”場合は、列Dに示した番号順で、 上から並べ替わります。 しかしながら、私の実力では実際に[並べ替え]操作をしてみないことには、列C、Dの数値が判明しません。 質問は、=RANK()関数みたいに、[並べ替え]操作をしなくても、列C、Dに示した数値を求めたいので、その方法を教えてください。 差行列、作業シートを使用も、式が寿限無式になることも厭わないので、マクロを使わない方法を教えてください。 文字列の長さは最大10文字としておきます。

  • 列に含まれる同じ文字列をカウントし、表示させる方法を教えてください。

    簡単な質問かもしれませんが、どうかお願い致します。  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11 11111  11 11111  11 11111  11 11121  11 11121  11 12111  12 13111  13 上記のような A列には5桁の数字 B列には2桁の数字 エクセルのデータがあるとして、 まず、A列で同じ数字をカウントし、  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11      11111  4 11111  11      11121  2 11111  11      12111  1 11111  11      13111  1 11121  11 11121  11 12111  12 13111  13 のように表示させたいのですが、どうしたらいいかわかりません。 データが膨大で数字がランダムな為、CountIfは使えないんだと思いますが、素人なので、詳しくはわかりません。 また、B列が何なのかと言いますと、A列の上2桁が入っています。 なぜ必要かなんですが、理由があります。 A列で5桁でカウントした個数が2以下の場合、5桁ではカウントせずに、2桁でカウントするという風にしたいのです。 しかも、5桁でカウントし、3以上だった数字については2桁ではカウントしない様にしたいんです。 要するに、最終的に  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11       11111  4    11   2 11111  11                  12   1 11111  11                  13   1 11111  11 11121  11 11121  11 12111  12 13111  13 のように表示させたいんです。 長々とすみません。 ご指導のほど、よろしくお願いいたします

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • 値を文字列に変換する関数について

    初心者です。よろしくお願いします。 B列に関数を使用して出てきた値(「北海道」「東北」などの数値ではなく、文字列なんですが・・・)をC列に文字列として入れたいのです。 コピペで貼り付けるときに「値」を選択すればいいのですが、いちいち面倒なので、あらかじめ、関数を入れておくと楽だと考えています。 B列には、関数を使用して出てきた値もあれば、直接「北海道」「東北」などと入力したものもあるのです。そのB列を並べ替えしたいのですが、うまくいかないため、C列に文字列だけを抜き出して、並べ替えをしようと思っています。 どうか、簡単な言葉で、どなたか教えて下さい。

  • Excelで文字列を独自の二進数で表したい。

    A,B,C,D,Eのいずれかを含む文字が順不同でセルに入っているものから、 A=10000 B=1000 C=100 D=10 E=1 と置換して足した、二進数であらわしたり、逆にその二進数から文字列に戻したりしたいです。 (例:DAなら10010、EBCなら1101) VBAの自作関数を含めてExcelの関数でできる方法があればお教えくださると助かります。

  • 列に複数の内容をカウントが出来ない

    エクセルで、B列に商品名を入力しています。各項目の内容件数をカウントしたいのですが、列には関数のVLOOKUPで表示してあるのでCUNT・CUNTAなどの関数を使うとVLLOKUPを含む内容の件数が出ます。例:商品1 3件 商品2 3件と個別にカウントする方法は無いでしょうか?

  • エクセルでの行数カウント

    エクセルで A列 B列 1行 ●1 C ⇒カウント 2行 X1 D  3行 ●2 E 4行 X2 F 5行 ●3 C ⇒カウント 6行 ●4 D 7行 X3 E A列で「●」を含み、なおかつB列で「C」である行の数(例でいうと「2」)を求める 数式を教えてください。 ちなみに A列 B列 1行 ● C ⇒カウント 2行 X1 D  3行 ● E 4行 X2 F 5行 ● C ⇒カウント 6行 ● D 7行 X3 E であればA列が全く「●」に等しいものでカウントする場合は、下記の関数で計算できます。 {=SUM(IF(B1:B7="C",IF(A1:A7="●",1,0)))} COUNTIF関数では、"●*"のように「任意の文字」を指定することが可能ですが、IF関数の 中ではできないようです。

  • エクセル関数:右側の文字列を抜き出す方法

    エクセル初心者です。 文字列の抜き出す方法で悩んでいます。 たとえば、A1~A5までに下のような 文字列が順に入っているとします。 C:\abc\TEST1.DOC C:\abc\def\TEST2.DOC C:\abc\def\ghi\jkl\TEST3.DOC C:\abc\def\ghi\TEST4.DOC C:\abc\def\TEST5.DOC これらの文字列の一番右側の'\'以降の文字列 (TEST1~5.DOC)を、B1~B5のセルに 出したいと思っているんですが できるのでしょうか? RIGHT関数や、LEN関数、FIND関数を使って できそうな気がするのですが どうも良い方法が思いつきません。 よろしくお願いします。

専門家に質問してみよう