WorksheetFunction.SortBy
でDate型の配列が文字列として扱われるのは、VBAからExcel関数へ配列を渡す際の型変換の仕様によるものです。
ループを使わずに計算負荷を抑えて解決するには、Evaluate メソッドを使用して配列全体を一括でシリアル値(数値)に変換する手法が最も効率的です。
推奨される解決策:Evaluate による一括変換
VBAの Evaluate を使うと、配列内の各要素に対してExcelの演算(例えば「+0」や「*1」)を適用でき、ループなしで高速にシリアル値へ変換できます。
vba
Dim dateArray As Variant
Dim numericArray As Variant
Dim sortedArray As Variant
' 1. Date型の配列(または日付文字列の配列)を準備
dateArray = Array("2026/8/10", "2026/12/9", "2026/1/15")
' 2. Evaluateで一括して数値(シリアル値)に変換
' 変数内の配列を強制的に数値計算させることで、Excelに日付として再認識させます
numericArray = [(index(dateArray, 1, 0)) + 0]
' 3. SortByを実行(基準配列に数値化した配列を指定)
' ここでは例として自分自身を並び替えています
sortedArray = WorksheetFunction.SortBy(dateArray, numericArray, 1)
コードは注意してご使用ください。
この方法が優れている理由
計算の効率化: VBA側で For Each や For ループを回す必要がなく、Excelの内部エンジンで一括処理されるため、データ量が多いほど高速です。
型の強制確定: Excelの日付は内部的にシリアル値(数値)であるため、数値として渡せば辞書順(文字列順)ではなく、必ず時系列順でソートされます。
Excel VBA 質問スレ Part84
■ このスレッドは過去ログ倉庫に格納されています
759デフォルトの名無しさん
2026/03/12(木) 19:27:53.37ID:6EwD2FOl■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 総裁選で小泉氏批評動画 首相秘書から相談と作成者ー共同通信インタビュー ★2 [蚤の市★]
- ■津波注意報■ [ぐれ★]
- 【北海道】「女の子がお腹がすいたと言って1人で来店している」コンビニからの通報で発覚 幼い娘を放置し飲酒 母親と交際相手を逮捕 [ぐれ★]
- 【退職金廃止】若手歓迎も中高年は「狙い撃ちだ」と猛反発 給与などへの配分を新人・若手に厚く中高年に薄く [七波羅探題★]
- 【速報】1-3月期実質GDP 年1.8%増に下方修正 [蚤の市★]
- 「苦手な食べ物でもひと口は食べてみよう」は虐待や不適切保育なのか? 保育現場も困惑する新基準と専門家が指摘する「構造的問題」★2 [ぐれ★]
- 津波注意報 [957955821]
- 津波
- 津波?地震あったんか?
- 日経平均、逝く ★1 [402859164]
- ドンキ.ホーテ本店で万引きした中年アベック、追いかけてきた店員を車のボンネットに乗せ150m走行し振り落とした末に逃走に成功 [597533159]
- (ヽ´ん`)「安倍さんのグッズください」店員「転売防止のために安倍晋三のセリフを言っていただけますか」👈なんて答える [441978185]