• 締切済み

EXCEL 関数で複数の文字列を昇順に並び替える

教えてください 複数のセルに入った文字列を 関数のみで並べ替えさせることは 可能でしょうか? 例えば aaa ygt baa gft bbe ↓ aaa baa bbe gft ygt と、なる感じです。 SMALLやラージ構文は 工夫なしでは並べ替えてくれないように思います 文字列を1文字毎に区切って 文字コード化した上で SMALL構文にかけてみたりもしましたが 文字順が崩れて駄目駄目でした VBAでもオリジナル機能でも どちらでも並べ替えれるのですが 今回は関数でする必要があり 困ってます 無理でしょうか? ご教示お待ちしています。

  • Nouble
  • お礼率91% (1698/1856)

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

質問の趣旨がわかりませんが 例えば マクロ記録で[データ]→[昇順ソート] としたら Sub Macro1() Range("A2").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:A5") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub となりますが

Nouble
質問者

お礼

お心を傾けて頂きありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

作業列を使い、普段使いの関数だけで答えを並べます。 手順: 簡単のためB列に言葉を記入する A1に =COUNTIF(B:B,"<"&B1)+1 と数式を入れ、A5までコピー貼り付ける D1に =VLOOKUP(SMALL(A:A,ROW(D1)),A:B,2,FALSE) と記入し、D5までコピー貼り付ける。 #参考:意味不明で応用できなくても数式だけでやりたいなら A1:A5に元の言葉を記入 =INDEX(A:A,MATCH(SMALL(COUNTIF(A:A,"<"&$A$1:$A$5)+1,ROW(A1)),COUNTIF(A:A,"<"&$A$1:$A$5)+1,0)) と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力、下にコピー。

Nouble
質問者

補足

ありがとうございます まだ理解していないのですが やってみます

関連するQ&A

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

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

  • Excelで文字列を数式として認識させる関数

    A列に入力された文字列(例:"1+1")を、B列でA列の文字列(数式)の計算結果を算出させたいのですが、そのような関数ありますか? できれば、VBAではなくExcelでやりたいです。 OSはXP、Excel2003です。 よろしくお願いします。

  • エクセル関数

    よろしくお願いいたします。 ○  =SMALL((J44:J48,J50:J53),1)   は範囲を複数個(複数範囲)選択して、その中を小さな順に並べて1番小さな数値が帰ってくると思います。 ○  {=SMALL(IF(J44:J48=3,I44:I48),1)}   はJ列の範囲中の3の時のI列を選択して、その中をを小さな順に並べて1番小さな数値が帰ってくると思います。   行列関数(←そう呼ぶのかな)を利用しています。{}のこと ○では、これら2つを組み合わせることはできないのでしょうか??   {=SMALL((IF(J44:J48=3,I44:I48),IF(J50:J53=3,I50:I53)),1)}   でやってみたのですが、ダメです。 どなたか、エクセルスペシャリスト様、よろしくお願いいたします。

  • 文字列を用いてExcel関数を呼び出したい

    C#にてExcel用のアドインを作成しています。 そのアドインは、独自の関数の挿入画面を表示し、こちらが用意したVBAの関数を呼び出してデータベースにアクセスする動きです。 この独自の関数の挿入画面上で引数にSUM()などのExcel関数を入力された場合、Excel標準の関数の挿入画面と同じように、 入力された関数の計算結果を右側に表示するような作りにしたいのです。 当初は独自の関数の挿入画面で引数に「SUM(B1:B10)+AVERAGE(C1:C5)」と入力されれば、その文字列を解析してどの関数が呼ばれているか抽出し、 Application.WorksheetFunction内のメソッドを呼び出そうかと考えたのですが、 作業量が多い上に自分の技術力が無いのでバグが発生する可能性が高く信頼に値しないということで、断念しました。 受け取った文字列をそのまま用いてWorksheetFunctionのメソッドを呼び出し、結果を受け取るということは可能でしょうか?

  • 表示されている文字列を取得するエクセル関数

    例えば、 A1セル「平成28年1月5日」(シリアル値で入力) A2セル「H28.1.5」(シリアル値で入力) A3セル「12345」(数値) と入っている場合に、 関数を使って、 B1セル「平成28年1月5日」(文字列) B2セル「H28.1.5」(文字列) B3セル「12345」(文字列) と表示させることはできるでしょうか? 形式を選択して貼り付け、とか、VBAでできるのはわかるのですが、 関数だけで(しかも、できれば汎用的な形の関数で) 実現できるのかが知りたいです。

  • Excelの文字列操作について

    Right・Left・Mid関数は何桁目以降表示しなさい、とか何桁目以降何桁分を抽出しなさいという関数ですが、例えば、@AAAA@BBBBB@CC.***のような文字列があり、文字列の右側から何桁目に@が来るか知る関数はありますか?サンプルの文字列でいうと、***.CC@の順になりますので、7桁目と判るようにできますか?どなたかお知恵をお貸し下さい。よろしくお願い致します。

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

    エクセル初心者です。 文字列の抜き出す方法で悩んでいます。 たとえば、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関数を使って できそうな気がするのですが どうも良い方法が思いつきません。 よろしくお願いします。

  • EXCEL2010で同じ文字列のセルの数を数え・・

    EXCEL2010で一つのワークシート上に様々な文字列が散らばっているとします。 この中でたとえばAAAという文字列が何個あるかを抽出してAAA 1、またBBBという文字列が何個あるかを抽出してBBB 3というように表示させたいのですが、方法をご存じの方、よろしくお願いいたします。VBAを使わずに解決して下さると嬉しいです。 ちなみに、COUNTIFなどの関数は、あらかじめ探したい文字列が分かっている場合には使えますが、本件はそうではなく、ワークシート上にどんな文字列があるのか一目ではわからないくらいたくさんあります。 理想は、その文字列が入っている全てのセルを範囲選択しておいて、何か関数で抽出させ、 AAA 3 ABC 19 BBB 21 DCF 3 などといったリストが作成されることです。 よろしくお願いいたします。

  • エクセルの関数をおしえてください。

    ある表がありまして、1列目に日にち、2列目に収支金額が1年間分書いてあります。この表の収支の多い順に5番目まで別の場所に並べて抜き出しているのですが、収支の額はLARGE関数で出せるのですが、その横にそれに対応する日にちも表示したいのですが、どのようにすればよいでしょうか。

  • エクセルで1つのセルから複数のセルへ文字列を切り出す関数

    関数初心者です、教えてください。 OUTLOOK2000からエクスポートしたCSVファイルがあります。 メールはテキスト形式で、本文のところに取り出したい内容が すべて入ってしまっています。 最終的には、Filemakerにこのメールデータをインポートしたいのですが、インポートする前に、セルの内容を複数のセルに取り出したいのです。 質問する点がすでに間違っている可能性もありますが・・。 OUTLOOKでエクスポートする時に何とかすべきものなのか、 CSVじゃなく、TXTにすべきなのか等も分かりかねるのですが・・・。 例: A2セルに、 DATE = 108/4/26 ○:○○:○○ AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) - - - - - - - - - - - - - - - - - - フリガナ = AAA 名前 = BBB BBB 都道府県 = CC 【Q1】種類 = DDD 【Q2】名前 = EEE 【Q3】場所 = FFF submit = 送信 - - - - - - - - - - - - - - - - - - が入っているというような状態です。 これを、 B2(DATE) 108/4/26 ○:○○:○○ C2(フリガナ) AAA D2(名前) BBB BBB ・・・ というように分割したいのです。 メールそれぞれに書き込んである内容量が違うので、 できれば、文字列検索のような感じで、 A2のセル内で、「フリガナ=」を探して返すというような形ができれば いいと思っているのですが、 そういったことは難しいのでしょうか。 以前は、似たようなことを、手作業でコピペして一覧にしていたのですが、 数が多くなってきたのと時間がないために、関数などで処理ができればと思っている次第です。 関数初心者、VBAはさらに分かりません。 そんな者ですが、教えていただけるとありがたいです。 WinXP Office 2000 FilemakerPro 8.5

専門家に質問してみよう