• ベストアンサー

エクセル ボタンでソートしたい

教えてください エクセル表で各列でソートしたい 列毎のマクロを書くのは大変なので、ボタンを表示しておき、その列のセルをクリックしてactive にしてから、ボタンをクリックしたらソートできるようにしたい。 Dim retuban retuban = XXXXXX strkey1 = retuban Selection.Sort Key1:=Cells(3, strkey1), のようにやればいいと思うのですが XXXXXの列名(AAなど)を取得するマクロがうまくいきません よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

リスト形式になっているとします。 第1行に見出しが入っていて、第2行からデータが入っている形式。 データ範囲外をアクチブにしているときは、選択が信用できないとして、エラーにしている。 Private Sub CommandButton1_Click() cl = ActiveCell.Column MsgBox Cells(1, cl) & "列を選択" Set kyoutu = Application.Intersect(ActiveCell, Range("a1").CurrentRegion) If kyoutu Is Nothing Then MsgBox "列選択エラー" Exit Sub Else Range("A1").CurrentRegion.Offset(1, 0).Select Selection.Sort Key1:=Cells(1, cl) End If End Sub 実際データが第2行からでないときは、Offset(1, 0).の1を修正してみてください。

oldhisa
質問者

お礼

回答有難うございます。とても参考になります。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 >列名(AAなど) マクロを作るときにために、R1C1 <-> A1 方式の切り替えボタンを作って、ツールバーに入れておくと便利です。 >Selection.Sort Key1:=Cells(3, strkey1), Selection で取れるのですが、もう少し、考えたほうがよいですね。 それは、Cells(3, strkey1) の「3」は、本当に3でよいのか、ということです。 私は、相対参照方式で考えてみました。 Sub TestSort() Dim RetuBan As Integer '列の番号 Dim AreaRow As Long '行の番号  With ActiveCell.CurrentRegion  '並べ替えの範囲を取る   '違ったところでボタンを押したら、マクロを抜ける   If .Cells.Count < 2 Or .Cells.Rows.Count < 3 Then Exit Sub   RetuBan = ActiveCell.Column   AreaRow = .Cells(2, 1).Row 'その並べ替えの範囲の2行目の行番号を探す     '昇順並べ替え 'タイトルのあるなしは、不明(xlGuess)   .Sort Key1:=Cells(AreaRow, RetuBan), _      Order1:=xlAscending, _      Header:=xlGuess, _      OrderCustom:=1, _      MatchCase:=False, _      Orientation:=xlTopToBottom  End With End Sub

oldhisa
質問者

お礼

回答有難うございます。応用のきくやり方ですね。感謝!

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。すみません。質問を早とちりしました。 セルを選択してボタンクリックでマクロを起動するなら#02さんの回答で列番号が取得できます。 VBのグリッドコントロールのように表頭のボタンをクリックするだけで並べ替えを行う場合の方法について書きました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

retuban = ActiveCell.Column でいけるのではないでしょうか。

oldhisa
質問者

お礼

回答有難うございます。 ActiveCell.Column ですと列番号を取得するようで、列名にならないのですが、列番号でソートするマクロがわかりません。

oldhisa
質問者

補足

勘違いしてました。これでいいんですね。有難うございました。うまくいきました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

各列の先頭にボタンを配置して、ボタンが押された列をキーとして並び替えを行いたいということでしょうか? ActiveSheet.Shapes(Application.Caller).TopLeftCell.column で押されたボタンのカラム番号が取得できますよ。 (私もここで教えていただきました)

oldhisa
質問者

お礼

早速ありがとうございました。

関連するQ&A

専門家に質問してみよう