Sub ArryNumberSort1()
Dim c As Long
'Variant型配列に適当な並び順の数値を入れる
Dim lArry1() As Variant
lArry1 = Array(2, 1, 5, 7, 9, 8, 4, 6, 3)
Debug.Print "元の配列は: " & UBound(lArry1) + 1 & " 件です"
For c = LBound(lArry1) To UBound(lArry1)
Debug.Print lArry1(c);
Next
Debug.Print vbNewLine
'Long型配列にVariant型配列の数値を昇順で入れ直す
Dim lArry2() As Long
For c = LBound(lArry1) To UBound(lArry1)
ReDim Preserve lArry2(c)
lArry2(c) = Application.WorksheetFunction.Small(lArry1, c + 1)
Next
Debug.Print "昇順配列は: " & UBound(lArry2) + 1 & " 件です"
For c = LBound(lArry2) To UBound(lArry2)
Debug.Print lArry2(c);
Next
Debug.Print vbNewLine
End Sub
桜井さんの投稿
(投稿ID: 4476)
GWに巣ごもりでオンライン講座受講、配列をマスターしたら業務の汎用性が高く実務落とし込みに気合を入れております。
配列に格納したデータをシートに記入する際、
格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。
宜しくお願いいたします。
小川慶一さんのコメント
(コメントID: 6171)
こんにちは。
配列は、理解できないうちはハテ何のことやら?という感じですが、使いこなせるようになると強力ですね。
> 配列に格納したデータをシートに記入する際、
> 格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。
VBAでは、「配列の中身を並べ替える」といった機能のプログラムは、特に用意されていません。
「配列の値をエクセルシートに出力し、出力した値を並べ替える」というのが、単純かつ高速です。
田中 宏明さんのコメント
(コメントID: 6172)
こんにちは。
私もこの動画で動的配列を知ったとき、大変感激しました。
配列の並べ替えは、小川先生が回答された「配列の値をエクセルシートに出力し、出力した値を並べ替える」がVBAの正攻法です。
せっかくなので、いろいろ調べてみたら、配列の値が全て数値という条件付でVBAからエクセル自体の関数Smallを呼び出し、配列を昇順に並べ替える方法が見つかりました。
以下にサンプルコードを示しますので、参考にしてみてください。
(配列に数値でないものが含まれる場合、エラーとなります。)
> 配列に格納したデータをシートに記入する際、
> 格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。
小川慶一さんのコメント
(コメントID: 6174)
VBのショボいところのひとつは、配列や配列内の要素を扱うためのメソッドが貧弱なことです。
シート上で並べ替えするにしても、たとえば以下のコードのような感じです。
別言語だと、たとえば、pythonならこんな感じ↓です。
桜井さんのコメント
(コメントID: 6175)
田中宏明さん
ご教示ありがとうございます。
会社から持ち帰った予算作成ファイルに習った配列を是が非でも組み込みたく、他の内容で(祝日の名前を入れるコードを応用し、2つの会計システムの勘定科目を隣に付す作業)今朝方マスターし、配列の一歩になりました。配列を使っていない今はVLOOKUPです。使いこなせば式を壊してしまうことがなくなりますね。
しかし、情報のインプットにくらべ仕事へのアウトプットがなんと困難なことか、、まだ腹落ちしていないため質問だにできないものがごろごろありますが、お教えいただいた配列の昇順での並べ替えも今後の作業で試させていただきます。
小川慶一さんのコメント
(コメントID: 6176)
成果につながるとよいですね。
ところで、コメント読む限りだと、配列は関係ないんじゃないか?と感じられます。
VLookUP関数を置き換えるというだけでしたら、以下の動画に示した方法で対処できそうです。
○複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?
https://forum.pc5bai.com/lesson/page/153/
これに並べ替えが加わるなら、導入編でも発展編1の伝票作成マクロでも解説したとおり、処理の前に表を並べ替えします。
そこのところ、どうでしょうか。
> しかし、情報のインプットにくらべ仕事へのアウトプットがなんと困難なことか、、まだ腹落ちしていないため質問だにできないものがごろごろありますが、お教えいただいた配列の昇順での並べ替えも今後の作業で試させていただきます。
「腹落ちしていない」とおっしゃるより前の講座にも、必要な情報ゴロゴロ転がっているものと思いますよ!
桜井さんのコメント
(コメントID: 6177)
はい、きっと下記の業務は配列ではないかもしれないのですが、どうにかこれまでやったことのなかった配列VBAを使ってみたいというチャレンジをそれでなしえた、と言ったところになります。今日は会社で「Dictionaryを使ってデータから取引先をListにしSumを出力」を応用することに成功しました!Sampleコーディングで色んなものを用意していただいて助かっております。自分のやりたいものに近いSampleをみつけて、コードのイメージ作りのヒントにさせていただいています。