
No.3ベストアンサー
- 回答日時:
すいません。
コーディングがまずいですね。
最下のVBAコードを使用してください。
testプロシージャの
Debug.Print "パターン(1)"
myAry = Array("2", "1", "本屋", "9", "赤", "33")
Debug.Print "パターン(2)"
myAry = Array("2", "1", "33", "9", "赤", "本屋")
Debug.Print "パターン(3)"
myAry = Array("2", "1", "33", "9", "赤", "本屋")
として結果(イミディウィンド出力)は以下のようになります
パターン(1)
1
2
9
33
本屋
赤
パターン(2)
1
2
9
33
本屋
赤
パターン(3)
1
2
9
33
本屋
赤
■VBAコード
Sub test()
Dim myAry() As Variant
Debug.Print "パターン(1)"
myAry = Array("2", "1", "本屋", "9", "赤", "33")
GoSub srt
Debug.Print "パターン(2)"
myAry = Array("2", "1", "33", "9", "赤", "本屋")
GoSub srt
Debug.Print "パターン(3)"
myAry = Array("2", "1", "33", "9", "赤", "本屋")
GoSub srt
Exit Sub
srt:
Call QuickSort1(myAry, LBound(myAry), UBound(myAry))
For i = 0 To UBound(myAry)
Debug.Print myAry(i)
Next i
Return
End Sub
Sub QuickSort1(ByRef argAry() As Variant, ByVal lngMin As Long, ByVal lngMax As Long)
Dim i As Long
Dim j As Long
Dim vBase As Variant
Dim vSwap As Variant
Dim tmp(2) As Variant
vBase = argAry(Int((lngMin + lngMax) / 2))
i = lngMin
j = lngMax
Do
'比較
Do
'型変換
If IsNumeric(argAry(i)) Then tmp(0) = CDbl(argAry(i)) Else tmp(0) = CStr(argAry(i))
If IsNumeric(vBase) Then tmp(2) = CDbl(vBase) Else tmp(2) = CStr(vBase)
'判定
If tmp(0) >= tmp(2) Then Exit Do
i = i + 1
Loop
Do
'型変換
If IsNumeric(argAry(j)) Then tmp(1) = CDbl(argAry(j)) Else tmp(1) = CStr(argAry(j))
If IsNumeric(vBase) Then tmp(2) = CDbl(vBase) Else tmp(2) = CStr(vBase)
'判定
If tmp(1) <= tmp(2) Then Exit Do
j = j - 1
Loop
If i >= j Then Exit Do
vSwap = argAry(i)
argAry(i) = argAry(j)
argAry(j) = vSwap
i = i + 1
j = j - 1
Loop
If (lngMin < i - 1) Then
Call QuickSort1(argAry, lngMin, i - 1)
End If
If (lngMax > j + 1) Then
Call QuickSort1(argAry, j + 1, lngMax)
End If
End Sub
No.2
- 回答日時:
表示をオフにして新規シートを作成してセルに書き出し、
エクセルの並び替え機能をVBAで並び替えてから配列へ戻してシートを削除・・・・
が高速でシンプルにすみますが。
コード内で処理を行いたいのであれば配列ののクイックソートをどうぞ。
「test」を実行してください。
以下のサイトのクイックソートをベースにしています。
http://excel-ubara.com/excelvba5/EXCELVBA229.html
上記サイトのものですと文字列比較ですので1,2,33,9・・・となりますが、
数値と判定出来るものは数値として比較するようにすれば以下のような結果になります。
1
2
9
33
本屋
赤
1次元配列にしか対応していませんので、
2次元配列の場合は上記サイトを参考に同様に変更してみてください。
■VBAコード
Sub test()
Dim myAry() As Variant
myAry = Array("2", "1", "本屋", "9", "赤", "33")
Call QuickSort1(myAry, LBound(myAry), UBound(myAry))
For i = 0 To UBound(myAry)
Debug.Print myAry(i)
Next i
End Sub
Sub QuickSort1(ByRef argAry() As Variant, ByVal lngMin As Long, ByVal lngMax As Long)
Dim i As Long
Dim j As Long
Dim vBase As Variant
Dim vSwap As Variant
vBase = argAry(Int((lngMin + lngMax) / 2))
'数値なら数値型へ変更
If IsNumeric(vBase) Then vBase = CDbl(vBase)
i = lngMin
j = lngMax
Do
'数値なら数値で比較
If IsNumeric(vBase) Then
Do While CDbl(argAry(i)) < vBase
i = i + 1
Loop
Do While CDbl(argAry(j)) > vBase
j = j - 1
Loop
'文字で比較
Else
Do While argAry(i) < vBase
i = i + 1
Loop
Do While argAry(j) > vBase
j = j - 1
Loop
End If
If i >= j Then Exit Do
vSwap = argAry(i)
argAry(i) = argAry(j)
argAry(j) = vSwap
i = i + 1
j = j - 1
Loop
If (lngMin < i - 1) Then
Call QuickSort1(argAry, lngMin, i - 1)
End If
If (lngMax > j + 1) Then
Call QuickSort1(argAry, j + 1, lngMax)
End If
End Sub
この回答への補足
回答ありがとうございます。
myAry = Array("2", "1", "33", "9", "赤", "本屋")
このように、本屋と33を入れ替えて実行しますと、次のようなエラーが出てしまいました。
'数値なら数値で比較
If IsNumeric(vBase) Then
Do While CDbl(argAry(i)) < vBase
i = i + 1
Loop
Do While CDbl(argAry(j)) > vBase ←エラー 型が一致しません
j = j - 1
Loop
myAry = Array("2", "1", "本屋", "9", "赤", "33")
また、このように"33"を全角"33"にすると、33が数字の小さい順として並びませんでした。
1
2
9
本屋
赤
33
改善できるようでしたら、よろしくお願いいたします。
数字と文字の判定方法および数字を数値に変える方法が分かりましたので、大変参考になりました。
No.1
- 回答日時:
こんにちは!
一例です。
データはA1セルからあるとします。
Sub 並び替え()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
Range("A:A").Insert
With Range(Cells(1, "A"), Cells(lastRow, "A"))
.Formula = "=ASC(B1)"
.Value = .Value
End With
Range("A1").CurrentRegion.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo
Range("A:A").Delete
Application.ScreenUpdating = True
End Sub
こんな感じではどうでしょうか?m(_ _)m
この回答への補足
回答ありがとうございます。
質問が悪く申し訳ないのですが、
シート上で並べ替えるのではなく、
配列に格納されたデータを並べ替えたかったのです。
どうもすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) 列の最終行までのセルと1つ隣のセルの合計を別の列に表示 2 2022/07/12 19:50
- その他(IT・Webサービス) パスワードの組み合わせについて 2 2023/07/05 00:01
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
- Excel(エクセル) エクセルのマイナス表示 3 2022/03/28 16:35
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
VBA ソートすると、1、11、2,3になって・・
Excel(エクセル)
-
エクセルで文字が混じった数字を並べ替えしたいのですが
Excel(エクセル)
-
数値に見えるものはすべて数値として並べ替えを行う
Excel(エクセル)
-
-
4
Excelで文字+数字のデータの並び替えについて
Excel(エクセル)
-
5
エクセルのソートで、数字よりもアルファベットを優先したい
Excel(エクセル)
-
6
Excel VBAにてソートが上手くいかない
その他(Microsoft Office)
-
7
アルファベットを含む数をエクセルでうまく並べ替えをしたい。
Excel(エクセル)
-
8
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
9
桁数が混在する並び替えの方法
PowerPoint(パワーポイント)
-
10
Excel2017 フィルタ昇順並びがA1、A10、A11、A2、A3となってしまう。
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
VBAで文字列を数値に変換したい
Excel(エクセル)
-
17
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
18
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
19
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
20
vba フィルター 複数条件 3つ以上 完全一致除外
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 偶数月の15日(土日祝...
-
Excelの数式について教えてくだ...
-
Excelのメニューについて
-
VLOOKUP FALSEのこと
-
エクセル内に読み込んが画像の...
-
【マクロ】1回目の実行後、2...
-
勤務外時間を出す表が作りたい
-
Excelで作成した出欠表から日付...
-
エクセルの数式について教えて...
-
【マクロ】参照渡しとモジュー...
-
Excelの条件付書式について教え...
-
【マクロ】シート追加時に同じ...
-
マクロを実行すると、セル範囲...
-
【マクロ】参照渡しについて。...
-
Excel 日付の表示が直せません...
-
エクセルで、数字の下4桁の0を...
-
【マクロ】Call関数で呼び出し...
-
別のシートの指定列の最終行を...
-
Excelのデーターバーについて
-
Excelでの文字入力について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにて 文字と数字が混在して...
-
中学生なのですが、学校の帰り...
-
ブックカバーまで有料化!紀伊...
-
便意・・本屋だけじゃなく
-
TomoCardって・・・
-
仕事後、あなたはまっすぐ家に...
-
エロ本やエロいDVDって、どこで...
-
高1女子です。BL本を買いたいの...
-
あなたが好きな本屋さんを教え...
-
名古屋駅地下街で夜遅くまでや...
-
本屋でのクレジットカード利用...
-
古本を買ったら千円札が挟まっ...
-
欲しい本が買えません
-
おもちゃのあおきで働きたいけ...
-
BOOKOFFにぬりえは?
-
クオカードで本は買えますか?
-
京都市内の本屋
-
バイト 暇な時間の過ごし方。
-
中学生がプリキュア好きなのは...
-
書店にある椅子には座って読ん...
おすすめ情報