質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

4375閲覧

VBA

yhayashi

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/02/08 07:27

VBAで、文字列と数値が混合した文字列のソートを実現させたいのですが、
なにか良いアイデアは無いでしょうか。

例えば、
CV3.5sq-3C
CV3.5sq-30C
CV20sq-2C
CV325sq-4C
CV5.5sq-2C

というような値をソートした場合、

CV20sq-2C
CV3.5sq-30C
CV3.5sq-3C
CV325sq-4C
CV5.5sq-2C

という並びになるのですが、
--sqを第一優先、--Cを第二優先として

CV3.5sq-3C
CV3.5sq-30C
CV5.5sq-2C
CV20sq-2C
CV325sq-4C

という風に並び替えたいです。
どうかアドバイスお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

数字と文字列が混在していて、更に数字の桁数や小数点以下の有無や桁数も様々なので、そのままではソートできませんね。
でも、数字と文字列を分離し、数字の部分をTEXT関数を用いて書式を揃えてやれば、ソートできる文字列に変換できます。

質問の例で、元の値が A1 セルに入っているとすると、変換する式(ワークシート関数)は以下のようになります。
この式をB1セルに入れて、B1セルをコピーして、B2-B5セルにペースト。そしてA1:B5の範囲をB1:B5で昇順にソートすれば、A1:A5に所望のデータが得られます。

Excel

1="CV" & TEXT(VALUE(MID(A1,3,FIND("sq-",A1)-3)),"0000.00") & "sq-" & TEXT(VALUE(MID(A1,FIND("sq-",A1)+3,LEN(A1)-FIND("sq-",A1)-4)),"0000.00")& "C"

<関数の説明>
FIND関数で"sq-"が何文字目なのかを調べて、数字の部分の位置や文字数を算出しています。
そして、そうした数値を使ってMID関数で数字の部分の文字列を取り出しています。
取り出した文字列(数字の部分)は、VALUE関数で数値に変換し、TEXT関数で書式(整数部が4桁(値が1なら0001と表現する)、小数点以下が2桁)を揃えた文字列に変換しています。
そして、CVなどの文字列、数値の文字列を &演算子でつないでいます。

TEXT関数の第2引数が書式の設定で、ここでは数値が整数部は4桁以内、小数点以下は2桁以内と想定して"0000.00"としてあります。もし、もっと大きな桁の数が使われるなら合うように修正してください。

投稿2016/02/08 09:55

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yhayashi

2016/02/08 23:23

ありがとうございますm(__)m いろいろな方法があるのですね。。。 ためになります!
guest

0

ベストアンサー

こんにちは。

単純ソートできる部分(数字)のみを切り出してからソートしたらどうでしょうか。
右側をソートすれば想定通りになるかと思います。

【例】
CV3.5sq-3C → 3503
CV3.5sq-30C → 3530
CV20sq-2C → 20002
CV325sq-4C → 32504
CV5.5sq-2C → 5502

右の数字の出し方は、
『--sq』を*10(整数化)
『--C』はMAX桁数の0埋め
それぞれを文字列として結合して数値化したものです。

投稿2016/02/08 07:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yhayashi

2016/02/08 08:17

素晴らしいです。おかげ様でどうにかなりそうです(/_;) ありがとうございましたm(__)m
guest

0

投稿2016/02/08 07:54

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yhayashi

2016/02/08 08:14

すみません。そのページに私の求めている回答はありませんでした。 ですが、回答いただきありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問