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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
データチェックを行うエクセルマクロをおしえてほしい
Excel(エクセル)
-
Excelについての質問です。 B2セルの値とB1セルの値を比較し、B2セル値の方が小さかったら5"
Excel(エクセル)
-
再質問です。マクロの修正箇所を教えてください。
Excel(エクセル)
-
-
4
一つのセルに(例えばA1)入力された3桁・4桁の数字を並べ替えて同一行のセルに表示させる。
Excel(エクセル)
-
5
Excelについて教えてください
Excel(エクセル)
-
6
エクセルの関数について教えてください
Excel(エクセル)
-
7
職場の人から聞かれており、こんなことができるか教えて下さい。 vbaとかはできません。。 下記リスト
Excel(エクセル)
-
8
Excelセルを跨いで合計を出す方法
Excel(エクセル)
-
9
Excelで表を作ったところに文字を打ったら下のようになるのですが、どうすれば枠内に文章を続けて行け
Excel(エクセル)
-
10
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
11
エクセルでチェックボックスを一列にたくさんつくり、各行にリンク先のセルを設定する場合、どのようにした
Excel(エクセル)
-
12
【マクロ】フォルダからエクセルファイルの名前を取出すためには
Excel(エクセル)
-
13
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
14
エクセルの計算
Excel(エクセル)
-
15
エクセル共有したが、アクセスできなくかった
Excel(エクセル)
-
16
時間によってファイル名が変わるエクセルをほかのエクセルでデータを参照する方法
Excel(エクセル)
-
17
エクセルでの作業計算方法について
Excel(エクセル)
-
18
エクセル:一覧表に存在する文字が含まれているセルを抽出したいです
Excel(エクセル)
-
19
エクセル②
Excel(エクセル)
-
20
非表示列の再表示に失敗
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル、並び替え正しくソー...
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
テーブルレーコードをソートし...
-
コンボボックスのソートについて
-
OracleとAccessの出力順の違い
-
accessでDISTINCT 句と矛盾
-
エクセルのソート機能について
-
月末日のみソートしたい
-
SQLのORDERBY句について質問です。
-
becky!での表示について質問
-
Excelの並び替え(文字数と画数...
-
Excel2007 ソートがうま...
-
ハイフンの入ったデータの並べ替え
-
タイトル行を固定してソートしたい
-
1の行を固定した上でVBAを用い...
-
ソート方法が分からない
-
ソートのアルゴリズム等はいつ...
-
エクセルの並べ替えがうまくい...
-
ソート(PL/SQL)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
レコードの登録順がおかしい
-
1の行を固定した上でVBAを用い...
-
テーブルレーコードをソートし...
-
リストボックス内を昇順並べる方法
-
エクセル、並び替え正しくソー...
-
コンボボックスのソートについて
-
月末日のみソートしたい
-
ハイフンの入ったデータの並べ替え
-
accessでDISTINCT 句と矛盾
-
アクセスに関して。クエリの並...
-
都道府県順、北からソートした...
-
SQLで曜日のソートを月火水木金...
-
数字と漢字が混じった日付デー...
-
Excelのオートフィルタでソート...
-
Selectした時のレコードの取得順
-
ファイルメーカーでソート後の...
-
excel:一番上の行がソートでき...
-
OracleとAccessの出力順の違い
おすすめ情報