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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
【お題】マッチョ習字
【大喜利】 「精神を鍛えるため」にと、ジムから書初めの宿題を出されたマッチョたちが半紙に書いてきたこと
-
【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
【お題】 ・こんなおせち料理は嫌だ
-
店員も客も斜め上を行くデパートの福袋
シュールを通り越して店員も客も斜め上を行くデパートの福袋に入ってそうなものを教えて下さい。 よかったらレビューもしてください。
-
データチェックを行うエクセルマクロをおしえてほしい
Excel(エクセル)
-
Excelについての質問です。 B2セルの値とB1セルの値を比較し、B2セル値の方が小さかったら5"
Excel(エクセル)
-
再質問です。マクロの修正箇所を教えてください。
Excel(エクセル)
-
-
4
一つのセルに(例えばA1)入力された3桁・4桁の数字を並べ替えて同一行のセルに表示させる。
Excel(エクセル)
-
5
エクセルの関数について教えてください
Excel(エクセル)
-
6
Excelについて教えてください
Excel(エクセル)
-
7
職場の人から聞かれており、こんなことができるか教えて下さい。 vbaとかはできません。。 下記リスト
Excel(エクセル)
-
8
エクセルデーターから必要な項目を抜き出す方法を教えてください
Excel(エクセル)
-
9
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
10
Excelで表を作ったところに文字を打ったら下のようになるのですが、どうすれば枠内に文章を続けて行け
Excel(エクセル)
-
11
Excelセルを跨いで合計を出す方法
Excel(エクセル)
-
12
【マクロ】フォルダからエクセルファイルの名前を取出すためには
Excel(エクセル)
-
13
エクセル共有したが、アクセスできなくかった
Excel(エクセル)
-
14
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
15
非表示列の再表示に失敗
Excel(エクセル)
-
16
CELL関数のヘルプ文の意味?
Excel(エクセル)
-
17
エクセルで 自動的に◯や数字を表示させることできます? 例えばなんですが 日付 山田 1 ◯ みたい
Excel(エクセル)
-
18
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
19
2列に入っているデータを1列で表示する関数について
Excel(エクセル)
-
20
時間によってファイル名が変わるエクセルをほかのエクセルでデータを参照する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルレーコードをソートし...
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
リストボックス内を昇順並べる方法
-
エクセル、並び替え正しくソー...
-
Selectした時のレコードの取得順
-
accessでDISTINCT 句と矛盾
-
上から何番目か。
-
並べ替えについて
-
1の行を固定した上でVBAを用い...
-
SQLのORDERBY句について質問です。
-
excel:一番上の行がソートでき...
-
都道府県順、北からソートした...
-
Accessでのクエリ・レポートの...
-
Excelのオートフィルタでソート...
-
becky!での表示について質問
-
入力された複数の検索キーワー...
-
文字型の順番がうまく並ばない。
-
select * from の負荷。
-
MySQLで保存できる限界行数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
レコードの登録順がおかしい
-
エクセル、並び替え正しくソー...
-
テーブルレーコードをソートし...
-
1の行を固定した上でVBAを用い...
-
accessでDISTINCT 句と矛盾
-
上から何番目か。
-
リストボックス内を昇順並べる方法
-
月末日のみソートしたい
-
Selectした時のレコードの取得順
-
SQLデータベースの処理
-
ハイフンの入ったデータの並べ替え
-
文字型の順番がうまく並ばない。
-
都道府県順、北からソートした...
-
アクセスに関して。クエリの並...
-
Windowsでファイル名でソートさ...
-
ソート。内容の一部を置換して...
-
タイトル行を固定してソートしたい
-
ファイルメーカーでソート後の...
おすすめ情報