|
>A列 B列 C列 D列 E列 F列 ←列番号
>職務 氏名 社員番号 点数A 点数B 点数C ←見出し
> S ○○ ○○○○ ○ ○ ○
> M ○○ ○○○○ ○ ○ ○
> S ○○ ○○○○ ○ ○ ○
> S ○○ ○○○○ ○ ○ ○
> M ○○ ○○○○ ○ ○ ○
> M ○○ ○○○○
> J ○○ ○○○○
> J ○○ ○○○○
> S ○○ ○○○○
>
>このときワークシート上のコマンドボタンで並べ替えのマクロを起動しようと思ってます。
>職務を並べ替えの基準にするため、ボタンを押すと、S、M、J別にソートされれば良いのですが先頭のSと書いてあるセルがA7なので
>
>Private Sub 整列ボタン_Click()
>
> Range("A7").Sort key1:=Range("A7"), header:=xlNo, sortmethod:=xlPinYin
>
>End Sub
>
>としましたが、「同じサイズの結合セルが必要です」というエラーが出てしまいます。ちなみに7行目以降には結合セルはありません。
>やりたいのは、A列を基準として職務別に並べ替えを行い、行単位で整列させることです。どのようにすればよいのでしょうか?
>ちなみに上図のように点数は未入力のものも存在します。
>よろしくお願いします。
列見だしに結合セルが有るのですか?
セル1つを範囲として、Sortを実行すると
CurrentRegionを同じ様に連接する範囲が整列範囲になる様です
詰まり、「Range("A7").Sort」なので、6行目も整列範囲と見なされる様です
因って、整列範囲を指定して整列を実行して見たら?
Private Sub 整列ボタン_Click()
'Listの列数
Const clngColumns As Long = 6
Dim lngRows As Long
'Listの先頭セル位置を基準とする
With ActiveSheet.Cells(7, "A")
'行数を取得
lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
If lngRows <= 1 Then
Exit Sub
End If
'範囲を整列
.Resize(lngRows, clngColumns).Sort _
Key1:=.Item(1, 1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlCodePage
End With
End Sub
|
|