![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Excelについての質問です。 B2セルの値とB1セルの値を比較し、B2セル値の方が小さかったら5"
Excel(エクセル)
-
Excelについて教えてください
Excel(エクセル)
-
一つのセルに(例えばA1)入力された3桁・4桁の数字を並べ替えて同一行のセルに表示させる。
Excel(エクセル)
-
-
4
Excelで表を作ったところに文字を打ったら下のようになるのですが、どうすれば枠内に文章を続けて行け
Excel(エクセル)
-
5
Excelセルを跨いで合計を出す方法
Excel(エクセル)
-
6
職場の人から聞かれており、こんなことができるか教えて下さい。 vbaとかはできません。。 下記リスト
Excel(エクセル)
-
7
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
8
エクセルの関数について教えてください
Excel(エクセル)
-
9
エクセルでチェックボックスを一列にたくさんつくり、各行にリンク先のセルを設定する場合、どのようにした
Excel(エクセル)
-
10
【マクロ】フォルダからエクセルファイルの名前を取出すためには
Excel(エクセル)
-
11
時間によってファイル名が変わるエクセルをほかのエクセルでデータを参照する方法
Excel(エクセル)
-
12
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
13
エクセルの計算
Excel(エクセル)
-
14
エクセルでの作業計算方法について
Excel(エクセル)
-
15
エクセル共有したが、アクセスできなくかった
Excel(エクセル)
-
16
エクセル:一覧表に存在する文字が含まれているセルを抽出したいです
Excel(エクセル)
-
17
CELL関数のヘルプ文の意味?
Excel(エクセル)
-
18
エクセル②
Excel(エクセル)
-
19
非表示列の再表示に失敗
Excel(エクセル)
-
20
【マクロ】2回実行したら、エラーにならずに、既に実行済みメッセージを出したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
並べ替えについて
-
ファイルの漢数字の順番につい...
-
becky!での表示について質問
-
excel:一番上の行がソートでき...
-
excel マクロでグループ内でソ...
-
レコードの登録順がおかしい
-
ACCESSのクエリで空白以降を別...
-
ファイルメーカーのフィールド...
-
割合(パーセント)を求めるには?
-
ファイルメーカー10で重複デー...
-
SQLです教えてくださいお願いし...
-
Oracleで「文字が無効です」の...
-
count関数の値をwhere句で使用...
-
テーブルの最後(最新)のレコー...
-
【PL/SQL】FROM区に変数を使う方法
-
引数によってwhere句を切り替え...
-
int型フィールドにnullを登録で...
-
count(*)
-
一つのフィールドに複数の情報...
-
select文の実行結果に空白行を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字2桁、3桁交じりの文字列...
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
1の行を固定した上でVBAを用い...
-
テーブルレーコードをソートし...
-
エクセル、並び替え正しくソー...
-
リストボックス内を昇順並べる方法
-
ハイフンの入ったデータの並べ替え
-
SQLで曜日のソートを月火水木金...
-
Selectした時のレコードの取得順
-
アクセスに関して。クエリの並...
-
ファイルメーカーでソート後の...
-
月末日のみソートしたい
-
accessでDISTINCT 句と矛盾
-
becky!での表示について質問
-
ソート(PL/SQL)
-
上から何番目か。
-
文字型の順番がうまく並ばない。
-
excel:一番上の行がソートでき...
おすすめ情報