• ベストアンサー

エクセル SMALL の機能を文字列でもできないか

数値に対し小さいほうからn番目というのは SMALLで出来ますが、2文字以上(最低15文字くらい まで)の文字列に対しそれを行う方法は無いでしょうか? なんらかの式の組み合わせで出来ないものでしょうか? 要するに名前(よみがな)などを昇順(または降順)に読み込み ソートさせた状態で別表に表示させたいのですが 文字1文字ならCODEで何とかなるのですが 2文字以上となると・・・ VB等のプログラムは一切使わず関数の駆使でなんとかならない ものでしょうか?

  • s_shi
  • お礼率65% (30/46)

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.7

◆先程の回答で、順位を表示させなくてもできます    A       B 1  ああああ  ああ 2  ああ     あああ 3  あい     ああああ 4  あう     あい 5  あいあい  あいあい 6  いいい   あう 7  あああ   いいい B1=IF(COUNTA(A:$A)<ROW(),"",INDEX(A:A,MATCH(ROW(),INDEX(COUNTIF($A$1:$A$10,"<="&$A$1:$A$10),),))) ★下にコピー

s_shi
質問者

お礼

回答ありがとうございます。 こんなに簡単に順位をつけられてしまうなんて、拍子抜けです!! >COUNTIF($A$1:$A$10,"<="&$A$1:$A$10) こんな使い方(特に<=の部分におどろき)が出来るのですね♪ このやり方で何とかなりそうな様相です。 頑張ってみます。 ありがとうございました。

その他の回答 (7)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんにちは。 回答ではないのですが、#7 の回答、感服しました。私が、某所で書いていたころは、誰も解答できませんのでしたの、隔世の感を感じました。 いいわけとしては、あまり長く、関数の世界には留まらなかったので、VBAのユーザー定義関数で、解いてしまいました。どのみち、関数というのものは、人が作ったものですから、そういう既成の枠の中で考えるのが面倒というか、ばかばかしく感じることがあります。確かに、初期の関数のコンセプトを考えた人たちには、敬意を払いますが、現行の関数は、バグが残っていたり、むやみに変更してみたりして、統一性もない関数を使わされるのには、閉口するときがあります。 ご質問者さんには、失礼な回答をしたことをお詫びします。m(__)m

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

◆こんな方法はいかがでしょうか     A     B   C 1  ああああ  3  ああ 2  ああ     1  あああ 3  あい     4  ああああ 4  ああ     6  あい 5  あいあい  5  あいあい 6  いいい   7  あう 7  あああ   2  いいい ★B列に順位を表示します B1=IF(A1="","",COUNTIF($A$1:$A$10,"<="&A1)) ★下にコピー ★C列にひらがなを昇順に C1=IF(COUNTA(A:$A)<ROW(),"",INDEX(A:A,MATCH(ROW(),INDEX(COUNTIF($A$1:$A$10,"<="&$A$1:$A$10),),))) ★下にコピー

noname#79209
noname#79209
回答No.5

> 回答ありがとうございます。 > 今回の趣旨とは外れてきます。 > いやぁ、まいった・・・♪ 一応お礼は言われているので、多分他意はないのでしょうが、 最後の八分音符に回答者諸氏を試しているニュアンスを感じましたので、 私は、降ろさせていただきます。

s_shi
質問者

お礼

再度質問に戻って見ていただきありがとうございます。 >回答者諸氏を試している なんていうつもりは全くございません。 そのようなニュアンスに見えましたことをお詫びいたします。 ホントにまいっているため、お礼文面で表現のしようがなかったため 「いやぁ、まいった…♪」と自然に使ってしまいました。 またお目にかかった折にはよろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#2 のWendy02です。 >いやぁ、まいった・・・♪ こういう問題を個人の解決のテーマとして持ち続けるのは良いとは思います。 ですが、もう少し、自分の中で冷静に考えてみてください。 まず、関数は、一部は、文字列は、0 とみなすように出来ているのと、そうでないものは、文字列が入るとエラーを出すように作られています。逆にいうと、関数の比較は、数値を処理するために出来ています。 私個人は、その問題を、数年前にユーザー定義関数で解決させてはいますが、しょせん、MSが、お仕着せで作ったものにあやかって、ああでもないこうでもない、というようなプロセスが、ちょっと私には歯がゆいです。VBAを知っていれば、Excelは、もっと自由度が高いと思います。VBAは、分かればとても便利です。VBAを勉強すれば、関数の本質的なことも分かります。 >なんとか文字列の大小が判断できれば成功するのですが 文字というのも、本来は、数字の塊で、プログラムの世界では、本質的には数字とはなんら変わりません。だから、本来は可能なのですが、そうさせないだけなのです。 Excelにも、まだ、私の手の届かないような世界もあります。狭く使えば、また、それは、それまでだと思います。こんなことを書いても、何の役にも立ちませんが。

s_shi
質問者

お礼

ありがとうございます。 関数とは・・・、と言う点については十二分に理解しています。 もちろん文字についても・・・。 そしてVBAについて今後勉強したいと考えております。 ただ今回唐突に質問内容の様ななことが必要となり(1週間ほどで カタをつける必要が…(×_×;) )、何とかならないか と思い質問いたしました。 皆様には色々アドバイスいただき感謝しております。

noname#79209
noname#79209
回答No.3

ちょっと強引ですが、 #1さんが言われているように、「データ」-「並べ替え」を使います。 A列に並べ替えの対象になる文字列が入っているとして、 B列に「=ROW()」と計算式をいれ、A列だけを並び替えを行います。 100行の内、5番目のデータを表示したい場合、表示させたいセルに =INDEX(A1:A100,SMALL(B1:B100,5),1)とします。 ただし、上記100行の中にブランクがあるとうまくいきません。

s_shi
質問者

お礼

回答ありがとうございます。 「データ」-「並べ替え」を手動で利用する時点で 今回の趣旨とは外れてきます。 なんとか文字列の大小が判断できれば成功するのですが 「名前」のような場合によってはカナ10文字以上になりそうな ものでは、CODEで表れた数値を結合して使うなんてことも 桁数的に不可能なので・・・ いやぁ、まいった・・・♪

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 がんばってみるのは良いでしょうね。多少の関数が分かってきたなって思ったら、誰もが一度は、それは挑戦しているはずです。ただ、私の知る限りでは、関数で成功したという話は聞きません。少なくとも私は出来ませんでした。 VBAなら、あれをこうして、とか想像は付きますが、それでも、なかなか難しいような気がします。 もしも、他のセルを使って数値化するのでしたら、文字コードは、左から読むことになりますが、それも、ややこしいでしょうね。

s_shi
質問者

お礼

アドバイスありがとうございます。 かなりいろんなことを思案しているのですが なかなか厳しい状況ですね♪ 1、元データ(関数や式の入っていないタダの値)   ↓ 2、エクセル上で関数や式等を使い出来上がった   なんらかのデータ   ↓ 3、そのデータを引数とし、今回の質問のような   ソート状態にもっていった最終データ(リスト) 今回は3、を自動でしたいと思っていますので 2、のデータを手動でソートしたり あるいは、2、のデータを別に手動で値のみコピーして さらに手動でソートしてということはしたくないのです。 やはりムリなのかなぁ・・・

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

ソートで済むものを、なぜこんあんことをするのか良くわからないし、 >VB等のプログラムは一切使わず関数の駆使でなんとかならない など制約を課すのか 関数では無理ではないかとおもう。 ーー VBAといえなくもないが、ユーザー定義関数を作る。 (1)作業列を使う (2)数行のVBAコーを書く が欠点といえば欠点だが。 標準モジュールに Function cd(a) s = "" For i = 1 To Len(a) s = s & Format(Asc(Mid(a, i, 1)), "000") Next cd = s End Function シートで、A列に半角カナがあるとして B1に=cd(A1)と入れて最下行まで式を複写する。 全データ範囲を指定して並べ替えする。 ソートキーはもちろんB列、昇順。 結果 エノモト 180201211196 オオカワ 181181182220 キムラ 183209215 キムラ 183209215 セキ 190183 タムラ 192209215 ワダ 220192222 姓と名の間のスペースが邪魔化も知れない。 SUBSTITUTE関数で取り除けばようかもしれない。

s_shi
質問者

お礼

回答ありがとうございます。 並び替え自体を自動で行っていないため 今回の趣旨とは根本が異なりますが ユーザー定義関数というものを今回初めて 知りました。 ぜひ勉強させていただきます。 ありがとうございました。

関連するQ&A

  • DataGridViewの昇順降順。

    再びお世話になります。 VB2005で表題の件ご教授願います。 作成した表でカラムスヘッダーをクリックすることによりソートは可能状態です。しかし、数値データを表示させていていて昇順、降順とも文字列としの結果で数値の大小でソートされません。 プロパティでColumnsからCellStyleビルダのFormatを数字に選択しても結果はかわりません。 以上よろしくお願いします。

  • VBでのFlexGridのソート方法

    VBでのFlexGridのソート方法でいくつかの列を指定して その列がKeyとして昇順または降順のようなソートは 可能でしょうか?

  • Excel 関数 SMALL

    Excel 関数についての質問です。 関数のSMALLのようにデータを降順に検索する機能で、 数値ではなく文字を返してくれるような関数ってないですか? 例えば、 【テスト点数】 A1 ヤマダさん B1 78 A2 ハヤシさん B2 55 A3 イシダさん B3 96 →順位(上記データとは違うセルに) 1位 イシダさん 2位 ヤマダさん 3位 ハヤシさん となるような関数探してます。 ご存知の方はご回答お願い致します。

  • エクセルで、1つの列で文字(降順&優先順位1)と日付(昇順&優先順位2)の並べ替えはできますか?

    エクセル(97)で、1つの列で文字(降順&優先順位1)と日付(昇順&優先順位2)の並べ替えはできますか? 例えば、C列に「2004/5/18~2004/8/10」までの日付と「予定」という文字列がありましたら、文字列(予定)を上にくるように並べ替えて、2番目の優先順位の日付は「古い順(昇順)」に並べていきたいのです。。 やりかたをご存知のかた、いらっしゃいましたらよろしくお願いします

  • 文字列3次元配列のソート(複数キー)について教えてください

    皆様こんにちは。 ソートについて悩んでおります。 以下の様な表イメージで配列を持っており (実際は要素数は動的に変わります) char AAA[10000][20][10]; /*(10000行20列10文字)*/ これを列毎のキーで昇順/降順と並び替えるプログラムを Cにて実現させたいのですが 検索して調べても2次元はよく載っているのでが、 複数列となるとなかなか無くて、お手上げ状態です。 ・qsortは使えない。 ・安定するソート法にてやらないといけなさそう というのはなんとなく理解できるのですが..... 良い方法をご存知の方いらっしゃいましたら、よろしくお願います。

  • TextBoxに入力された文字列のソート

    TextBoxに入力された文字列のソート TextBoxに入力された文字列のソート 開発環境:Visual Web Developer 2008 express 言語:Visual Basic TextBoxを縦5行横3列に並べた表形式の入力フォームがあり、1列目のTextBox(番号…1,4、7、10、13)に入力された文字列(数値)を基準に、昇順にソートし、行ごと入れ替えるプログラムを作りたいのですが、TextBoxを利用したソートの参考になるものが見つからず息詰まっています。どなたかサンプルや参考になるサイトがあれば、教えてください。 ###入力フォーム### 1  あああ あああ 3  ううう ううう 2  いいい いいい 5  おおお おおお 4  えええ えええ ###実際に出したい結果### 1  あああ あああ 2  いいい いいい 3  ううう ううう 4  えええ えええ 5  おおお おおお

  • エクセルの文字列検索で何番目の$の位置?

    たとえば、$A$1:$AG$25とか$AB$100:$AG$2550という文字列から、 1.文字列末尾の数値を取得する関数はあるでしょうか? 2.3番目の$の位置、4番目の$の位置を取得できる関数はあるでしょうか?

  • VB2005の文字列関連の関数について

    VB2005で ある文字列中の特定文字の位置を返す関数はありますか? たとえば "1234567890" という文字列中で"56"という文字列は "5"番めにあるというような。 N88BasicのPOS$のようなイメージです。

  • エクセルのかなり複雑な処理の解決法を教えて下さい!

    エクセルでこのような複雑な作業を組み込むことが可能なのかどうか教えてください。 重複した数値にインデックスされた文字列の昇順に関わる問題です。 任意の文字を並べた列の直下に(※ここでは<0>~<9>)、それぞれ数値を配置しているとします。 <0> <1> <2> <3> <4> <5> <6> <7> <8> <9> 17 , 14 , 15 ,14 , 10 , 16, 17 , 11 ,10 , 17 <0>と17、<5>と16など文字列と数値は上下セットとして考えます。 このセットを、数値の大きい順番に並び替え、さらにその並び替えた先で文字列も自動で一緒に並び替えるというのが目的です。 私なりに少ない頭を使って考えて、LARGE関数とINDEX関数&MATCH関数をなんとか用い、値を昇順させ並び替え、さらに値を呼応させて文字列も並び替えるようにしてみたのですが、 ここでどうしても『数値の重複問題』という壁が出てきてしまいます。。 先の関数を用いるとこのように値が出力されます。 17 , 17 , 17 ,16 , 15 , 14, 14 , 11, 10, 10 <0> <0> <0> <5> <2> <1> <1> <7> <4> <4> 数値がすべて、重複せずに済めば事足りるのですが、数値が重複している場合、『<0> <0> <0> 』のように呼応している文字列も重複してしまいます。。これ以上はこの関数では自動で並び替えることができません。 ここからなのですが、このように数値が重複した場合、さらにここから重複している数値同士の間でさらに昇順を行い、文字列が<0>に近い順(セル上ならより左側にある文字列の順)で並び替えたいと思っています。 17 , 17 , 17 , 16 , 15 , 14, 14, 11, 10 , 10 <0> <6> <9> <5> <2> <1> <3> <7> <4> <8> このような並び替えを自動でさせるにはどうしたら良いでしょうか?そもそも可能なのでしょうか。。 私のエクセルレベルは、関数をネットで調べてきてそこそこいじって組み込む程度のレベルです。 どなたか教えて下さると助かります。 所持しているエクセルは『Excel2010 windows7 版』です。よろしくお願いします。

  • 12(数値)、15(標準)、’16(文字列)のエクセルソート

    12(数値)、15(標準)、’16(文字列)の様に、一見すると全て同じ数値データに見えるようなものが、100件程、羅列しています。ソートうまく出来ません。 (1)書式設定で、全てを「数値」に変えても「’」だけは消えず、「’」を「空欄」にするという置換は、エラー(データ一致しません)で出来ませんでした。今は、一個一個のデータを見て、手作業で「’」を消しています。 どうすれば、標準・数値・文字列の混在したデータをソートできるのでしょうか? どなたか分かる方、お教えください。

専門家に質問してみよう