- ベストアンサー
エクセルVBAでセルの並び替え方法について教えてください
- エクセルVBAでセルの並び替え方法について教えてください。特に、セルをRangeでくくったり、1行丸ごと並び替えたりする方法について知りたいです。
- セルの並び替えによく使われるForループを使用して、エクセルVBAでセルの並び替えを行う方法について教えてください。
- セルの並び替え処理において、複数の列(A列、B列、C列)を1つとして処理する方法について知りたいです。また、項目が増えていく場合にも対応できる方法があるか教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず作ってみました。 ■前提条件として、A列とB列の値から並び替えキーを作成し、C列以降AZには都市の名前が入るものとしています。 ■データは1行目1列から始まるものとしています。 ■最終行を max_ROW、最終列を max_COLに入れます。 ■データは2次元配列に記憶し、ソートしています。 ■書き出すシートは別シートです。 ----------------------< 以下コード > max_ROW = 7 '最大行数 max_COL = 5 '最大列数 'セル値記憶用 Dim cell_DAT() As String, T_NUM() As Single ReDim cell_DAT(max_ROW, max_COL), T_NUM(max_ROW) 'ソート時退避用 Dim sv_DAT() As String, sv_NUM As Single ReDim sv_DAT(max_ROW, max_COL) 'セル値を記憶しながら、並び替え値を算出 For ii = 1 To max_ROW For kk = 1 To max_COL 'セル値を記憶 cell_DAT(ii, kk) = Cells(ii, kk).Value Next kk 'A列の文字から数値割り当て Select Case Cells(ii, 1).Value Case "ああ": T_NUM(ii) = 10 Case "いい": T_NUM(ii) = 5 Case "うう": T_NUM(ii) = 3 End Select 'B列の文字分の数値加算 T_NUM(ii) = T_NUM(ii) + 5 * Len(Cells(ii, 2).Value) Next ii 'ソート For ii = 1 To max_ROW For kk = ii + 1 To max_ROW If T_NUM(ii) > T_NUM(kk) Then For mm = 1 To max_COL sv_DAT(ii, mm) = cell_DAT(ii, mm) Next mm sv_NUM = T_NUM(ii) For mm = 1 To max_COL cell_DAT(ii, mm) = cell_DAT(kk, mm) Next mm T_NUM(ii) = T_NUM(kk) For mm = 1 To max_COL cell_DAT(kk, mm) = sv_DAT(ii, mm) Next mm T_NUM(kk) = sv_NUM End If Next kk Next ii '別シートに書き出す Worksheets("Sheet2").Select 'Sheet2に書き出す For ii = 1 To max_ROW For kk = 1 To max_COL Cells(ii, kk).Value = cell_DAT(ii, kk) Next kk Cells(ii, max_COL + 1).Value = T_NUM(ii) Next ii
お礼
遅くなりすいません。 度々の回答有難うございます。 うまくいきました。 また宜しくお願いします。