エクセルのA列の中にある、数字で始まりアルファベットを含む桁数が一定ではない
1
2
3
1A1
2B30A3
3D
10A1
1A2
のようなデータを
1
1A1
1A2
2
2B30A3
3
3D
10A1
のように、アルファベットの前後の数で並べ替えをしたいのですが、
「データの並べ替え」を使っても
1
2
3
10A1
1A1
1A2
2B30A3
3D
のように並んでしまい困っています。
そこでB列を作業用・並べ替え用のキー列にしたいのですが、
どのような関数、またはマクロを使えば、
上記中段のような並びに出来るでしょうか?
前後に0をつけて桁数を揃えたり、数字とアルファベットを他の記号などに置き換えたりすればよいのかな・・・?
など色々試しているのですが、なかなか思うように行きません。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No2,No4です。
●:数字
△:英字
●●●△△△●●●△△△●●●△△△
という並びに対応させました。
B2:
=IF(NOT(ISNUMBER(MID($A2,2,1)*1)),LEFT($A2,1),IF(NOT(ISNUMBER(MID($A2,3,1)*1)),LEFT($A2,2),IF(NOT(ISNUMBER(MID($A2,4,1)*1)),LEFT($A2,3),A2)))
C2:
=IF(ISNUMBER(MID($A2,2+LEN(B2),1)*1),MID($A2,1+LEN(B2),1),IF(ISNUMBER(MID($A2,3+LEN(B2),1)*1),MID($A2,1+LEN(B2),2),IF(ISNUMBER(MID($A2,4+LEN(B2),1)*1),MID($A2,1+LEN(B2),3),MID($A2,LEN(B2)+1,3))))
D2:
=IF(NOT(ISNUMBER(MID($A2,2+LEN(B2&C2),1)*1)),MID($A2,1+LEN(B2&C2),1),IF(NOT(ISNUMBER(MID($A2,3+LEN(B2&C2),1)*1)),MID($A2,1+LEN(B2&C2),2),IF(NOT(ISNUMBER(MID($A2,4+LEN(B2&C2),1)*1)),MID($A2,1+LEN(B2&C2),3),MID($A2,1+LEN(B2&C2),3))))
E2:
=IF(ISNUMBER(MID($A2,2+LEN(B2&C2&D2),1)*1),MID($A2,1+LEN(B2&C2&D2),1),IF(ISNUMBER(MID($A2,3+LEN(B2&C2&D2),1)*1),MID($A2,1+LEN(B2&C2&D2),2),IF(ISNUMBER(MID($A2,4+LEN(B2&C2&D2),1)*1),MID($A2,1+LEN(B2&C2&D2),3),MID($A2,LEN(B2&C2&D2)+1,3))))
F2:
=IF(NOT(ISNUMBER(MID($A2,2+LEN(B2&C2&D2&E2),1)*1)),MID($A2,1+LEN(B2&C2&D2&E2),1),IF(NOT(ISNUMBER(MID($A2,3+LEN(B2&C2&D2&E2),1)*1)),MID($A2,1+LEN(B2&C2&D2&E2),2),IF(NOT(ISNUMBER(MID($A2,4+LEN(B2&C2&D2&E2),1)*1)),MID($A2,1+LEN(B2&C2&D2&E2),3),MID($A2,1+LEN(B2&C2&D2&E2),3))))
G2:
=IF(ISNUMBER(MID($A2,2+LEN(B2&C2&D2&E2&F2),1)*1),MID($A2,1+LEN(B2&C2&D2&E2&F2),1),IF(ISNUMBER(MID($A2,3+LEN(B2&C2&D2&E2&F2),1)*1),MID($A2,1+LEN(B2&C2&D2&E2&F2),2),IF(ISNUMBER(MID($A2,4+LEN(B2&C2&D2&E2&F2),1)*1),MID($A2,1+LEN(B2&C2&D2&E2&F2),3),MID($A2,LEN(B2&C2&D2&E2&F2)+1,3))))
H2:
=RIGHT("000"&B2,3)&RIGHT("---"&C2,3)&RIGHT("000"&D2,3)&RIGHT("---"&E2,3)&RIGHT("000"&F2,3)&RIGHT("---"&G2,3)
少し式が長くなっていますが、同じことの繰り返しです。
B列~G列に数字、英字の部分を出し、
H列でソート用に3桁に揃えてくっつけています。
今さらですが、数字と英字の間にコンマ(,)とかが入っているデータであれば、
比較的簡単にできる方法もありますけどね。
使用している関数は、それぞれ難しいのはないと思いますが、組み合わせると幅が広がります。
IF関数とISNUMBER関数の組み合わせは理解するのが大変かもしれませんが、
MID関数、LEFT関数、RIGHT関数は覚えておくと応用範囲が広がると思います。
本当にありがとうございました。
おかげで希望通りの並び替えをすることができました!
これを機会に関数を覚え、条件が変わった時でも自力で処理できるようにしたいと思います。
No.4
- 回答日時:
No2です。
>のようにデータを数字とアルファベットに分け、それぞれの列を参照して並べ替えをする、というやり方が良いのだろうか。
>と考えておりますが、この考えの方向はあってますでしょうか?
この考えで合っていると思います。
そして、私の解釈ですが、
1、数字は最大で3文字続く場合がある。
2、アルファベット(英字)は2文字以上続かず、英字と英字の間には必ず数字が入る。
3、数字+英字+数字+英字+数字+英字という並びになり、どこかから以降のデータが無い場合もある。
このような感じでよろしいでしょうか?
実際の方法です。
B列だけでやろうとすると複雑になるので、C列とD列も使用します。
A1~D1のセルに任意の項目名を入力しておきます。
B2セル(前と同じです):
=IF(TYPE(A2)=1,TEXT(A2,"000"),IF(CODE(MID(A2,2,1))>64,"00"&A2,IF(CODE(MID(A2,3,1))>64,"0"&A2,A2)))
C2セル:
=IF(LEN(B2)>3,IF(NOT(ISNUMBER(MID(B2,6,1)*1)),LEFT(B2,4)&"00"&MID(B2,5,99),IF(NOT(ISNUMBER(MID(B2,7,1)*1)),LEFT(B2,4)&"0"&MID(B2,5,99),B2)),B2)
D2セル:
=IF(LEN(C2)>8,IF(NOT(ISNUMBER(MID(C2,10,1)*1)),LEFT(C2,8)&"00"&MID(C2,9,99),IF(NOT(ISNUMBER(MID(C2,11,1)*1)),LEFT(C2,8)&"0"&MID(C2,9,99),C2)),C2)
B2~D2を下方向へコピーし、D列で並び替えれば大丈夫ではないかと思います。
No3のhige_082様の数式も参考にさせて頂きました。
ありがとうございます。
abe_onesel様が挙げられた、データの条件の2番目の前半部を
「アルファベットは最大で3個まで連続する」
とさせて頂ければ、私が並べ替えをしたいデータの定義になります。
(A,AB,BA,DLC,DRC...のようなものです)
再度ご回答いただいた関数を試してみました。
NO,2で教えていただいたものより、より希望に近い並びになりました。
なるほど、このようにアルファベット間の数字の桁を揃えれば、アルファベットと数字が混在する文字列の並び変えが出来るのですね。
私の表現力不足で、データの定義が間違っていたため、下記A列の
データをD列で並べ替えをすると
A列 ,B列 ,C列 ,D列
14AB7,014AB7,014A0B7,014A0B7
14AB8,014AB8,014A0B8,014A0B8
14AB9,014AB9,014A0B9,014A0B9
14AC1,014AC1,014A0C1,014A0C1
14AC2,014AC2,014A0C2,014A0C2
14AC3,014AC3,014A0C3,014A0C3
14AC4,014AC4,014A0C4,014A0C4
14AC5,014AC5,014A0C5,014A0C5
14AC6,014AC6,014A0C6,014A0C6
14AC7,014AC7,014A0C7,014A0C7
14AC8,014AC8,014A0C8,014A0C8
14AC9,014AC9,014A0C9,014A0C9
14AB10,014AB10,014AB10,014AB10
14AB11,014AB11,014AB11,014AB11
14AB12,014AB12,014AB12,014AB12
となります。
14AB9の後に14AB10、14AB11,14AB12,14AC1,14AC2...となればベストです。
こちらの勉強不足からくる言葉足らずのところを、意を酌んでいただき、重ねてのわかり易く丁寧なご回答、本当にありがとうございました。
恥ずかしながら、教えていただいた関数をエクセルのヘルプを見ながら式の意味を参照している段階ですが、回答をお手本にしてケースに応じて自力で関数を使えるように勉強していきます。
ありがとうございました!
No.3
- 回答日時:
一例です
A列にデータがあるとして
B1に
=IF(OR(LEN(A1)=1,NOT(ISNUMBER(MID(A1,2,1)*1))),"0"&A1,A1)
を入力し、下方向にコピー
No.2
- 回答日時:
A1セル、B1セルに任意の項目名があるとして、
A2~A9セルに上記のデータがあるものとします。
B2セルに以下の数式を入力します。
=IF(TYPE(A2)=1,TEXT(A2,"00"),IF(CODE(MID(A2,2,1))>64,"0"&A2,A2))
これをB9セルまでコピーし、B列で並びかえれば大丈夫だと思います。
ただ、例では2桁までの数字しか使用していませんので、
123AB1みたいな3桁の数字が入る場合は、
=IF(TYPE(A2)=1,TEXT(A2,"000"),IF(CODE(MID(A2,2,1))>64,"00"&A2,IF(CODE(MID(A2,3,1))>64,"0"&A2,A2)))
で大丈夫かと思います。
数字が4桁以上になっても少し非効率ですが、
上記2つの式を参考にIF関数を増やし、0を増やしていけばなんとか対応はできます。
アルファベットの前の数字が最高で3桁のデータでしたので、非常に参考になりました。ありがとうございます。
私の質問で挙げた例が曖昧でいけなかったのですが、
データは必ず数字から始まり、整数のみのもの、1~3個のアルファベット(2個以上は必ず連続します)を含み、アルファベットか数字どちらかがデータの終わりに入ります。
一番長いもので12桁ほど、アルファベットの塊は0~3個入ります。
abe_onesel様に教えていただいた方法でやってみましたが、
1
1A10A1
1A1A
1A2A1
2
となり、1と2の間に1の後ろにアルファベットが続くものが入ってきて、非常にリストが見やすくなりました。
しかしアルファベットの後の数字の並べ替えがうまくいきませんでした。
こうなりますと、
1 → 1,
1A10A1 → 1, A,10, A, 1
1A1A → 1, A, 1, A
1A2A1 → 1, A, 2, A, 1
2 → 2,
のようにデータを数字とアルファベットに分け、それぞれの列を参照して並べ替えをする、というやり方が良いのだろうか。
と考えておりますが、この考えの方向はあってますでしょうか?
ともかくお答えを参考にして、以前よりリストの参照が楽になりました
ありがとうございました。
No.1
- 回答日時:
エクセル上では数字よりも文字列が大きいからそのままでは質問の並び替えにはなりません。
B1に
=MID($A1,COLUMN()-1,1)
と入力しD3迄フィル、下方向にフィルして、並び替えをB列、C列、D列の順位で優先順位をつけて並び替えすると
1
10A1
1A1
1A2
2
2B30A3
3
3D
こんな順番に。
目的の並べ替えのためには、文字列の最初のアルファベットまでの文字数を数えて、その文字数の一つ手前までの文字列での並べ替えが必要。
関数だけでの実現は難しいかも。
教えていただいた関数を会社で試してみましたが、おっしゃる通り希望どおりの並べ替えができませんでした。
最初のアルファベットまでの並べ替えは解答番号:no2の方のやり方で
うまくいったのですが、
1A1A1
1A10A1
1A2A1
とアルファベットの次からの並べ替えでつまづいてしまいました。
マクロでの並べ替えを勉強してみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセルで串刺ししたシートの並べ替えをしたいです 4 2023/02/14 11:59
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- その他(教育・科学・学問) 教えてください!!! 1 2022/04/30 17:08
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Excel(エクセル) エクセルでのマクロを使ったデータの並べ替え 3 2022/12/03 18:54
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
エクセルで文字が混じった数字を並べ替えしたいのですが
Excel(エクセル)
-
エクセルのソートで、数字よりもアルファベットを優先したい
Excel(エクセル)
-
Excelで文字+数字のデータの並び替えについて
Excel(エクセル)
-
-
4
【Excel・並べ替え】かな、アルファベット、数字などの順序
Excel(エクセル)
-
5
Excel2017 フィルタ昇順並びがA1、A10、A11、A2、A3となってしまう。
Excel(エクセル)
-
6
VBAにて 文字と数字が混在してるデータの並び替え
Excel(エクセル)
-
7
数値とアルファベットに分ける(エクセル)
Excel(エクセル)
-
8
エクセルのピボットテーブルの書式設定が、データ更新のたびに元に戻る
Excel(エクセル)
-
9
桁の違う数値での並び替え
Excel(エクセル)
-
10
エクセル SMALL の機能を文字列でもできないか
Excel(エクセル)
-
11
桁数が混在する並び替えの方法
PowerPoint(パワーポイント)
-
12
数値に見えるものはすべて数値として並べ替えを行う
Excel(エクセル)
-
13
Excelのテーブルでセルの書式設定が反映されない
Excel(エクセル)
-
14
Wordでこのような三角が出てくるようになってしまったのですがどうやったら消せますか?
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
SUMに含まれる範囲から特定のセ...
-
エクセルでセルの値分の個数の...
-
Excel上でのデータ数字が連番で...
-
列の数字に100をかけたい
-
スペースとスペースの間の文字...
-
別のセルに値が入力されたら、...
-
エクセル:横長の表を改行して...
-
エクセルで合計欄を結合し、左...
-
時間を「昼間」と「夜間」に分...
-
エクセルで小数を含む数値の抽出
-
エクセルで曜日に応じた文字を...
-
エクセルのVLOOKUP関数について
-
EXCELの特定セルを編集不可・コ...
-
Excelのセル内文字の並び替えに...
-
C列にF列の担当者(A〜)を順番...
-
エクセルで1列全部10倍したい
-
エクセルにデータを入力すると...
-
数式が入ったセルを含めて、数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
SUMに含まれる範囲から特定のセ...
-
スペースとスペースの間の文字...
-
Excel上でのデータ数字が連番で...
-
数式が入ったセルを含めて、数...
-
列の数字に100をかけたい
-
エクセルでセルの値分の個数の...
-
エクセルで1列全部10倍したい
-
エクセルで表示されている数字...
-
エクセル:横長の表を改行して...
-
Excelでの検索結果を含む行だけ...
-
エクセル セル内の文字数を超え...
-
「エクセル」特定の行(セル)...
-
エクセルで曜日に応じた文字を...
-
エクセルのsumifでかけ算してか...
-
別のセルに値が入力されたら、...
-
エクセルにデータを入力すると...
-
時間を「昼間」と「夜間」に分...
-
C列にF列の担当者(A〜)を順番...
おすすめ情報