
Excel VBAについて
Sub mysort降順()
Dim mykey As Range
Dim myrug As Range
Set myrug = Range("C2:E17")
Set mykey = myrug.Columns(3)
Set myrug = 並べ替え(myrug, mykey)
End Sub
Function 並べ替え降順(myrug As Range, mykey As Range) As Range
Dim sorttest As Worksheet ' ソート対象のオブジェクトを指定
Set sorttest = ActiveSheet
With sorttest.Sort
.SortFields.Clear
.SortFields.Add Key:=mykey, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.SetRange myrug
.Apply ' ソート実行
End With
End Function
このコードを利用して、降順でソートをかけたいのです。
昇順はできます。
↓のように変更しました。
Function 並べ替え降順(myrug As Range, mykey As Range) As Range
Dim sorttest As Worksheet ' ソート対象のオブジェクトを指定
Set sorttest = ActiveSheet
With sorttest.Sort
.SortFields.Clear
.SortFields.Add Key:=mykey, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.SetRange myrug
.Apply ' ソート実行
End With
End Function
降順になりません。
降順のコードは、どこに仕込むのか、お手数ですがご、教示をお願いします。
No.2ベストアンサー
- 回答日時:
現在のコードには、関数並べ替え降順がありますが、サブルーチンmysort降順でそれを呼び出す必要があります。
以下は、修正したコードです。
vbnet
Copy code
Sub mysort降順()
Dim mykey As Range
Dim myrug As Range
Set myrug = Range("C2:E17")
Set mykey = myrug.Columns(3)
' 降順の関数を呼び出す
Set myrug = 並べ替え降順(myrug, mykey)
End Sub
Function 並べ替え降順(myrug As Range, mykey As Range) As Range
Dim sorttest As Worksheet ' ソート対象のオブジェクトを指定
Set sorttest = ActiveSheet
With sorttest.Sort
.SortFields.Clear
.SortFields.Add Key:=mykey, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.SetRange myrug
.Apply ' ソート実行
End With
' 並び替えた範囲を返す
Set 並べ替え降順 = myrug
End Function
修正したコードでは、サブルーチン 'mysort降順myrugに代入しています。また、関数並べ替え降順の最後で、並び替えた範囲を返しています。
No.3
- 回答日時:
こんにちは
Sortメソッドの昇順、降順は引数のOrder1 * で行います
https://learn.microsoft.com/ja-jp/office/vba/api …
Functionを昇順、降順用に2つ用意する事も考えられますが
Functionの引数を増やす事でも対応できると思います
xlDescendingの実態(値は2です)
https://learn.microsoft.com/ja-jp/office/vba/api …
少し変なサンプルかも知れませんが・・
Sub mySort()
Dim mykey As Range
Dim myrug As Range
Set myrug = Range("C2:E17")
Set mykey = myrug.Columns(3)
Dim mySortOrder As Integer
Dim rc As VbMsgBoxResult
rc = MsgBox("Sortを実行します" & vbCrLf _
& "昇順は「はい」を" & vbCrLf _
& "降順は「いいえ」を" & vbCrLf _
& "押してください", vbYesNo + vbQuestion)
If rc = vbYes Then mySortOrder = 1 Else mySortOrder = 2
Set myrug = 並べ替え(ActiveSheet, myrug, mykey, mySortOrder)
MsgBox "C2セルの値は " & myrug.Item(1, 1) & " です"
End Sub
Function 並べ替え(sorttest As Worksheet, myrug As Range, _
mykey As Range, mySortOrder As Integer) As Range
With sorttest.Sort
.SortFields.Clear
.SortFields.Add Key:=mykey, _
SortOn:=xlSortOnValues, _
Order:=mySortOrder, _
DataOption:=xlSortNormal
.SetRange myrug
.Apply ' ソート実行
End With
Set 並べ替え = myrug
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DirectoryInfo型配列ソート(C#)
-
VB2005 符号を踏まえた降順ソ...
-
バブルソートとセレクションソ...
-
C言語について
-
Excelですべての組合せ(重複組...
-
excel VBA の条件をつけての列...
-
10個の整数を入力して小さい順...
-
VBScriptで重複レコードを削除...
-
線形リストのソートについて
-
EXCEL VBAのソートについて
-
挿入ソートとマージソートを比...
-
構造体のリストをソートしたい。
-
GridViewで列のソートを無効に...
-
DataGridViewでのソート制御
-
ファイル名「1.jpg ~10.jpg~...
-
VBA基本構文の作り方 2列の...
-
ostringstreamではまりました
-
aspでユーザー定義の構造体を作...
-
セグメントエラー
-
nullと""、\\0とEOFの違いにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
VBA基本構文の作り方 2列の...
-
リスト構造のソートで悩んでま...
-
あるディレクトリ内のファイル...
-
C言語・要素除去
-
構造体のリストをソートしたい。
-
n番目に大きい数を求めるアル...
-
datagridviewの並べ替え
-
(VBA) Dir 関数で取得するファ...
-
DataGridViewの複数列を連動し...
-
GridViewで列のソートを無効に...
-
DataGridViewソート時に先頭行...
-
C# DataTable ソートについて
-
昇順と降順
-
クイックソートしながら重複要...
-
2次元配列を複数項目でソートし...
-
Excelですべての組合せ(重複組...
おすすめ情報