• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで)

エクセルVBAでセルの並び替え方法について教えてください

このQ&Aのポイント
  • エクセルVBAでセルの並び替え方法について教えてください。特に、セルをRangeでくくったり、1行丸ごと並び替えたりする方法について知りたいです。
  • セルの並び替えによく使われるForループを使用して、エクセルVBAでセルの並び替えを行う方法について教えてください。
  • セルの並び替え処理において、複数の列(A列、B列、C列)を1つとして処理する方法について知りたいです。また、項目が増えていく場合にも対応できる方法があるか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hogehage
  • ベストアンサー率50% (54/107)
回答No.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

keiri2002
質問者

お礼

遅くなりすいません。 度々の回答有難うございます。 うまくいきました。 また宜しくお願いします。