こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのソートがうまく出来ません。

マンション名+部屋番号のデータを部屋番号順にソートしたいのですが、
下記の様な状態になってしまってうまく並び替えが出来ません。

○○マンション1007
○○マンション1010
○○マンション105
○○マンション109
○○マンション1101
○○マンション1104
○○マンション1112
○○マンション112
○○マンション1204
○○マンション1208
○○マンション1212
○○マンション1213
○○マンション1304
○○マンション1313
○○マンション1508
○○マンション1510
○○マンション1511
○○マンション202
○○マンション210
○○マンション212
○○マンション215
○○マンション216
○○マンション301
□□マンション1101
□□マンション1201
□□マンション1301
□□マンション1402
□□マンション1501
□□マンション1505
□□マンション1506
□□マンション1601
□□マンション1702
□□マンション1802
□□マンション204
□□マンション2103
□□マンション503
□□マンション602
□□マンション805
□□マンション903
△△マンション1004
△△マンション102
△△マンション103
△△マンション1109
△△マンション1307
△△マンション1404
△△マンション205
△△マンション303
△△マンション407
△△マンション710
△△マンション804


誰か上手く並び替える方法分かる方いましたら教えて下さい。

投稿日時 - 2012-01-23 12:30:16

QNo.7261594

すぐに回答ほしいです

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

データが必ずマンション名+部屋番号になっている事と
部屋番号の前が必ず数字以外である(スペースでもかまいません)事が前提ですが
マンション名に数字が入っていても下記のコードで対応できると思います。

Sub Macro2()
COL1 = 1
COL2 = 2
COL3 = 3
For i = 1 To Cells(Rows.Count, COL1).End(xlUp).Row
For J = Len(Cells(i, COL1)) To 1 Step -1
S2 = Mid(Cells(i, COL1), J, 1)
If IsNumeric(S2) = False Then
Exit For
End If
Next J
Room = Right(Cells(i, COL1), Len(Cells(i, COL1)) - J)
MSname = Trim(Left(Cells(i, COL1), J))
Cells(i, COL2) = MSname
Cells(i, COL3) = Room
Next i
End Sub

投稿日時 - 2012-01-24 22:39:24

お礼

ありがとうございます!
完璧でした!
すばらしすぎです!

今回は事細かに親切に教えて頂きありがとうございました。
また何かありましたら是非お願い致します。

本当に本当に本当にありがとうございました!

投稿日時 - 2012-01-25 11:37:02

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

貼り付ける部分は
Sub Macro1()

End Sub
で合っています。
R_No. = Mid(Cells(i, COL1), J, S1 - S3)
Cells(i, COL3) = R_No.
が赤くなっているという事なのですが、こちらでは何のエラーも無く動作しているので原因がわからないのですが、
他の部分でも変数COL1、COL3を使っているのでR_No.という変数名が原因?かもしれません。
R_No.の部分をRoomにしてみて下さい。

投稿日時 - 2012-01-24 18:55:44

お礼

ありがとうございます。
上記の方法で上手く出来ました!

マンション名に数字があるとそこから切り離されてしまいますが、、、。
流石にそれは無理ですよね。。。

それにしてもめちゃくちゃ助かりました。
そして切り離された時は感動は最高でした。

本当に本当にありがとうございました。

投稿日時 - 2012-01-24 21:19:48

ANo.5

データが入力されているシートのシート名のところで右クリックしてコードの表示を選択して下さい。
VBE画面が出てきますのでコードをコピーして貼り付けて下さい。
VBE画面を閉じてExcelの画面に戻ったらAltキー+F8キーを押すと
マクロを選択する画面がでてきますので実行ボタンをクリックして下さい。(マクロは1つしかないので選択された状態で出てきます。)
マクロが実行されます。

投稿日時 - 2012-01-23 21:46:41

補足

ご丁寧な回答ありがとうございます。

上記、下記の通りの訂正もして手順を行いましたが下記の様なエラーが出てしまい上手く出来ませんでした。

コンパイルエラー
構文エラー

なお参考になればと思うのですが、下記の部分が赤字になっていました。

R_No. = Mid(Cells(i, COL1), J, S1 - S3)
Cells(i, COL3) = R_No.

ちなみに貼付部分は

Sub Macro1()

End Sub

の部分を全て貼付けでよろしかったでしょうか?

投稿日時 - 2012-01-24 12:15:02

ANo.4

ANo.3です。
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Rowのところを
For i = 1 To Cells(Rows.Count, COL1).End(xlUp).Rowに訂正してください。

投稿日時 - 2012-01-23 21:34:42

ANo.3

'マンション名と部屋番号を分離するマクロです。
Sub Macro1()
COL1 = 1 '(1) A列 データが入力されている列
COL2 = 2 '(2) B列 マンション名が書き出される
COL3 = 3 '(3) C列 部屋番号が書き出される
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For J = 1 To Len(Cells(i, COL1))
S1 = Len(Cells(i, COL1))
S2 = Mid(Cells(i, COL1), J, 1)
If IsNumeric(S2) = True Then
R_No. = Mid(Cells(i, COL1), J, S1 - S3)
Cells(i, COL3) = R_No.
Exit For
End If
Next J
MSname = Trim(Left(Cells(i, COL1), J - 1))
Cells(i, COL2) = MSname
Next i
End Sub
'(1)~(3)は空白列に適宜変更して下さい。

投稿日時 - 2012-01-23 21:01:51

補足

回答ありがとうございます。

もしお手数でなければ、マクロの利用方法も教えて頂けると助かります・・・。

無知なもので、、、すみません。

投稿日時 - 2012-01-23 21:25:58

ANo.2

>うまく並び替えが出来ません。
 ⇒文字列の並び替えでは左文字から1文字ずつ評価される為です。
  一例です。
 (1)データ列(仮にA列)の右列に空列を用意(無い場合B列を選択→右クリック→挿入)
 (2)データ列を選択→編集→置換→ションをション/にすべて置換
 (3)データ→区切り位置→「カンマやタブなど~」を選択→次ぐへ→区切り文字欄で「その他」
    を選択→右枠に/(前項で置換した文字列と同じもの)を入力→完了
 この状態でAB列範囲を並び替え(最優先列はA列、次優先列はB列を指定)してみて下さい。

因みにA列データを壊したくない場合、他の列に貼り付けてから上記と同様の操作をして下さい。 

投稿日時 - 2012-01-23 14:01:44

補足

早速の回答ありがとうございます。
説明不足で申し訳ございません。

補足としてマンション名はいろんなタイプがあります。
○○マンション、○○コープ、マンション□□、ハイツ△△etc

よろしくお願い致します。

投稿日時 - 2012-01-23 14:33:32

ANo.1

A列にマンション名+部屋番号のデータがあるとして、B列のセルに以下の式を記入して、下にドラッグコピーしてから、並べ替えてみて下さい。
=VALUE(MID(A1,FIND("マンション",A1,1)+6,100))

投稿日時 - 2012-01-23 12:36:07

補足

上記の通り試したのですが上手く出来ませんでした・・・。

補足としてマンション名はいろんなタイプがあります。
○○マンション、○○コープ、マンション□□、ハイツ△△etc

説明不足で申し訳ございませんでした。

投稿日時 - 2012-01-23 14:04:30

あなたにオススメの質問