アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております
下記のコードを実行すると昇順に並び替えることができるのですが、
降順にするにはどうしたらよいのですか。
DataList.Count To 1 逆にしましたがおなじです 
また、条件を増やすことは可能でしょうか。
A列は昇順にB列は降順というように


Dim DataList As Object
Dim x, i As Long
Set DataList = CreateObject("System.Collections.SortedList")

x = Range("B2:d10").Value
For i = LBound(x) To UBound(x)
If DataList.Contains(x(i, 1)) = False Then
DataList.Add x(i, 1), x(i, 2)
End If
Next i
For i = 0 To DataList.Count - 1
Cells(i + 2, 5).Value = DataList.GetKey(i)
Cells(i + 2, 6).Value = DataList.GetByIndex(i)
Next i

Set DataList = Nothing

「System.Collections.S」の質問画像

A 回答 (3件)

基本的にキー・値を追加していく毎に内部でキーを基準に並び替えをするので、書き出す際に逆から取り出す以外にはないでしょうね。


要素数を For .Count -1 To 0 Step -1 を用いて。

>また、条件を増やすことは可能でしょうか。
>A列は昇順にB列は降順というように

これが出来てしまうと本来追加していく際の『対のデータ』が無視されるのでダメでしょ。
VBやC#なら可能かもですし、VBAでやるなら一度それぞれを別の配列に入れて目的通り並び替え改めて作成するって無駄な作業になると思いますよ。
    • good
    • 0
この回答へのお礼

いつ有難うございます。
今まで通りSortでやります。
CreateObject("System.Collections.ArrayList")
で検索したら CreateObject("System.Collections.SortedList")
もヒットしたらなぜかこれもいいなと思いました。
ありがとうございました

お礼日時:2020/04/15 15:33

No.1です。



使う場面ではSortedListも悪くはないですよ。
降順でキーを揃えるならDictionaryオブジェクトとキー値を格納したArrayListを用い、key はDictionaryオブジェクトではなくSortメソッドを2回かけたArrayListから順次取得してDictionaryオブジェクトに与えてItemを得ますね。
    • good
    • 0
この回答へのお礼

どうやるのでしょぅか

お礼日時:2020/04/15 19:01

こんにちは



カテゴリがVBAなので、エクセルVBAってことでしょうか?

目的的に考えれば、シート上で並び替えをなさりたいのならRange.Sortメソッドを利用する方がはるかに簡単だと思いますけれど・・・?
https://docs.microsoft.com/ja-jp/office/vba/api/ …

昇順・降順、第二キーなどの設定が可能です。
どうしても、System.Collections.SortedListを使わなければならない理由でもあるのなら別ですけれど・・・
    • good
    • 0
この回答へのお礼

有難うございます。
System.Collections.SortedListではなく
System.Collections.ArrayListでサンプルコード
探していました。なぜか、System.Collections.SortedList
ヒットしました。
興味がでてしまい、つかえるのかな と思い
質問してしまいました。
有難うございます。

お礼日時:2020/04/15 15:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!