![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
Sub SortStrings()
Dim inputStr As String
Dim groups() As String
Dim sortedGroups() As String
Dim i As Integer
' 入力文字列
inputStr = "XAA*AB-(**A,*A,B*),XAA*AA-(**B,ACB,AB)"
' グループごとに分割
groups = Split(inputStr, "),")
ReDim sortedGroups(UBound(groups))
For i = 0 To UBound(groups)
' グループ内の文字列を分割してソート
sortedGroups(i) = SortGroup(groups(i))
Next i
' ソートされたグループを連結して出力
Dim result As String
result = Join(sortedGroups, "),") & ")"
' 結果をメッセージボックスで表示
MsgBox result
End Sub
Function SortGroup(groupStr As String) As String
Dim prefix As String
Dim items() As String
Dim sortedItems() As String
' プレフィックスとアイテムに分割
Dim splitPos As Integer
splitPos = InStr(groupStr, "-(")
prefix = Left(groupStr, splitPos + 1)
items = Split(Mid(groupStr, splitPos + 2, Len(groupStr) - splitPos - 2), ",")
' アイテムをソート
sortedItems = SortItems(items)
' ソートされたアイテムを連結
SortGroup = prefix & Join(sortedItems, ",")
End Function
Function SortItems(items() As String) As String()
Dim i As Integer, j As Integer
Dim temp As String
' バブルソートでアイテムをソート
For i = LBound(items) To UBound(items) - 1
For j = i + 1 To UBound(items)
If CompareItems(items(i), items(j)) > 0 Then
temp = items(i)
items(i) = items(j)
items(j) = temp
End If
Next j
Next i
SortItems = items
End Function
Function CompareItems(item1 As String, item2 As String) As Integer
' 比較ルール:
' 1. '*'を優先
' 2. 2文字を優先
' 3. アルファベット順
Dim len1 As Integer, len2 As Integer
len1 = Len(item1)
len2 = Len(item2)
If InStr(item1, "*") > 0 And InStr(item2, "*") = 0 Then
CompareItems = -1
ElseIf InStr(item1, "*") = 0 And InStr(item2, "*") > 0 Then
CompareItems = 1
ElseIf len1 = 2 And len2 <> 2 Then
CompareItems = -1
ElseIf len1 <> 2 And len2 = 2 Then
CompareItems = 1
Else
CompareItems = StrComp(item1, item2, vbTextCompare)
End If
End Function
構文まで作っていただき有難うざいました。
素人なので分からないので質問させてください。
例.XAA*AB-(**A,*A,B*),XAA*AA-(**B,ACB,AB)
上記の並び替える前の文字列はセルのどこに配置すればよいのでしょうか?
また、条件をもとに並び替えられた文字列はどこのセルに表示されるのでしょうか?
宜しくお願い致します。
No.3
- 回答日時:
急いでいます!!
とのアイコンがありますが・・・・。。
まず、急がずに立ち止まって下さい。
一度、落ち着いて考えをまとめて下さい。
他の方も書かれているように、どうしたいのかが全く伝わってきません。
他人に質問する前に、何をしたくて、どうなるのが正解なのか。
あなたのやりたいことが既にまとまっているのであれば、それをどう表現すれば正しく相手に伝わるのかを、よく整理して下さい。
自分で何かを作る時でも、誰かに作ってもらうように依頼する時でも同じですが、やるべき事を正しく定義することが第一です。
なんとなくこんな感じにしたい。という段階でいきなり作り始めようとするから、思い通りにならなくてどうしたらいいか分からなくなるのです。
他人に聞く前に、まず自分の考えを整理しましょう。
No.2
- 回答日時:
こんにちは
ご説明を読んでもルールがさっぱりわかりません。
勝手に想像すると・・
以下の2タイプの文字列が混在する時に
(*はワイルドカード1文字)
タイプ1:XAA*AB-(**A,*A,B*)
タイプ2:XAA*AA-(**B,ACB,AB)
まず、タイプ1が昇順の小さいものと見做される。
(既定のタイプ以外の文字列があった場合の扱いが不明ですけれど・・)
次に、ワイルドカード(=*)の文字部分を比較し、昇順に並べ替えるということなのでしょうか?
>②2文字優先
の意味がわかりませんが、連続している2文字(=*2個)の部分が評価の優先順位が高いものとするということなのかな?
であるなら、その文字を先に持ってくるように組み替えれば良いでしょう。
上記が雰囲気として合っているなら、並べ替えのキー1にタイプの種別を、キー2として比較文字列を参照するようにしておけばよさそうに思います。
(異なる場合でも、ほぼ同様にすれば可能と思います)
>構文が分かれば使える程度です。
タイプを分類するには、正規表現のTestを利用するかLike演算子でも可能でしょう。
正規表現
http://officetanaka.net/excel/vba/tips/tips38.htm
Like演算子
https://learn.microsoft.com/ja-jp/office/vba/lan …
キー2に使う文字列を抜き出すなら、上記同様に正規表現で行うか、あるいはMIDなどの文字列関数で、必要部分を抜き出して質問者様が思う評価の優先順位順に組み合わせれば良いです。
https://learn.microsoft.com/ja-jp/office/vba/lan …
並べ替えの処理は自前で行っても良いですが、エクセルのシート機能に「並べ替え」があるのでそちらを利用する方が簡単だと思います。
https://learn.microsoft.com/ja-jp/office/vba/api …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) Excel 文字列を結合するときに重複をなくしたい 関数・VBA 2 2022/12/12 10:40
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) 別シートに成約をボタン1つで転記したい 4 2023/10/26 16:38
- Excel(エクセル) 列の総当たりチェックの方法 3 2023/10/15 15:19
- Excel(エクセル) エクセルのマクロについて教えてください。 マクロを実行すると コピー先のフォルダ名を検索して、条件に 5 2023/10/17 21:14
- Visual Basic(VBA) クリップボードに貼付している文字列が、マクロで別ブックへ転記すると、消えてしまう 1 2023/10/15 13:36
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
一つのセルに(例えばA1)入力された3桁・4桁の数字を並べ替えて同一行のセルに表示させる。
Excel(エクセル)
-
エクセルの関数について教えてください
Excel(エクセル)
-
エクセルでチェックボックスを一列にたくさんつくり、各行にリンク先のセルを設定する場合、どのようにした
Excel(エクセル)
-
-
4
エクセルでの作業計算方法について
Excel(エクセル)
-
5
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
6
理由を教えてください。
その他(Microsoft Office)
-
7
エクセル関数に詳しい方教えてください
Excel(エクセル)
-
8
Excel vbaのテキストボックスの扱い
Excel(エクセル)
-
9
VBA初心者 Ctrl+での操作、ボタンに登録での操作
Visual Basic(VBA)
-
10
文字列になっている時間をVBAで処理できません。
Excel(エクセル)
-
11
【マクロ】フォルダからエクセルファイルの名前を取出すためには
Excel(エクセル)
-
12
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
13
マクロの記録を使用したマクロの実行について
Visual Basic(VBA)
-
14
CELL関数のヘルプ文の意味?
Excel(エクセル)
-
15
FormulaR1C1の 相対参照式のコピー
Excel(エクセル)
-
16
Excelにてある膨大なデータを管理しています。 そこで、特定の市町村にのみ色を付けたいです。 Ex
Excel(エクセル)
-
17
[オートフィルタ]の適用範囲の確認は可能か?
Excel(エクセル)
-
18
Vba SelStart、SelLen教えてください教えてください
Visual Basic(VBA)
-
19
エクセルの計算
Excel(エクセル)
-
20
VBA レジストリの値の読み方について教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字2桁、3桁交じりの文字列...
-
並べ替えについて
-
レコードの登録順がおかしい
-
コンボボックスのソートについて
-
SQLで曜日のソートを月火水木金...
-
ファイルの漢数字の順番につい...
-
エクセル、並び替え正しくソー...
-
Excelの並び替え(文字数と画数...
-
月末日のみソートしたい
-
ファイルメーカーでソート後の...
-
リストボックス内を昇順並べる方法
-
アクセスで曜日の並び順を変えたい
-
ハイフンの入ったデータの並べ替え
-
都道府県順、北からソートした...
-
EXCELでの住所録の並べ替え
-
WORDの「並べ替え」について
-
ソート(PL/SQL)
-
上から何番目か。
-
アクセスに関して。クエリの並...
-
テーブルレーコードをソートし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字2桁、3桁交じりの文字列...
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
1の行を固定した上でVBAを用い...
-
テーブルレーコードをソートし...
-
エクセル、並び替え正しくソー...
-
リストボックス内を昇順並べる方法
-
ハイフンの入ったデータの並べ替え
-
Selectした時のレコードの取得順
-
SQLで曜日のソートを月火水木金...
-
アクセスに関して。クエリの並...
-
ファイルメーカーでソート後の...
-
月末日のみソートしたい
-
accessでDISTINCT 句と矛盾
-
becky!での表示について質問
-
ソート(PL/SQL)
-
上から何番目か。
-
文字型の順番がうまく並ばない。
-
excel:一番上の行がソートでき...
おすすめ情報