プロが教える店舗&オフィスのセキュリティ対策術

画像のように1~2行目に「日付」などの項目が入った表があります。
この表は手袋をした作業社が現場でタブレット端末で使っています。

そのため画面にマクロのボタンを作成し、
ボタンを押したら「確定納期」を昇順で並べるボタンを
作成しようと思っております。

いろいろやってみたのですが「日付」などの項目を除外して、
3行目以下のデータだけ並べ替えるための範囲の指定方法がわかりません。

素人の感覚からすると、

------------
Sub test3()
ActiveSheet.Cells("A3"):("H3.End(xlDown))" _
.Sort Key1:=Range("H3"), order1:=xlAscending
End Sub
------------

でなんとかかるような気がするのですが、
実際には構文エラーで動作しません。

頑張って調べてみたのですが空白があるとか、
ないとかの条件もあるらしく複雑でわかりませんでした。

すいませんが、今回のように1~2行目に何か項目があり、
データが3行目以下にある表を昇順に並べ替える
マクロを作成する場合、範囲指定はどうすればいいのでしょうか?

すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
お手数ですが教えて下さい。よろしくお願いします。

※今回はkey1になるH列に空白はありません。

「昇順に並べるボタンをマクロで作りたい」の質問画像

A 回答 (4件)

>>やってみたんだけど、動作しませんでした。


>>これでいいんですよね?
1,2行目のセルを結合してませんか? していたら以下。
H列最終行を取得する関数はRange("H3").End(xlDown).Rowとする。


Sub Sample1()
Dim lastRow As Long
With ActiveSheet
ActiveSheet.Range("A3:H" & ActiveSheet.Range("H3").End(xlDown).Row).Sort Key1:=Range("H3"), order1:=xlAscending
End With
End Sub
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。
動きました。

動作してたのですが、No.1さんのマクロの後にテストしてたので、
画面の変化がないため勘違いしていました。
「xlAscending」を「xlDescending 」に入れ替えてみて、初めて気が付きました。

こちらの早とちりですいませんでした。
今回はありがとうございました。

機会がありましたら、またお願いします。

お礼日時:2016/07/22 00:04

ゴメン3行目からだった。


方法は色々あります。以下はほんの1例

ActiveSheet.Range("A3:H" & ActiveSheet.Range("H1").End(xlDown).Row).Sort Key1:=Range("H3"), order1:=xlAscending
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。
やってみたんだけど、動作しませんでした。
これでいいんですよね?


Sub Sample1()
Dim lastRow As Long
With ActiveSheet
ActiveSheet.Range("A3:H" & ActiveSheet.Range("H1").End(xlDown).Row).Sort Key1:=Range("H3"), order1:=xlAscending
End With
End Sub

質問はしばらく開けておきます。
何か気が付くことがあれば教えてください。

ご解答ありがとうございます。

お礼日時:2016/07/21 22:04

方法は色々あります。

以下はほんの1例

ActiveSheet.Range("A2:H" & ActiveSheet.Range("H1").End(xlDown).Row).Sort Key1:=Range("H2"), order1:=xlAscending
    • good
    • 0

こんにちは!


2行目までが項目行で実データは3行目以降にあるのですね?

Sub Sample1()
Dim lastRow As Long
With ActiveSheet
lastRow = .Cells(Rows.Count, "H").End(xlUp).Row
Range(.Cells(3, "A"), .Cells(lastRow, "H")).Sort key1:=.Range("H3"), order1:=xlAscending, Header:=xlNo
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。
こんなに複雑だと思いませんでした。

「Range(.Cells(3, "A"), .Cells(lastRow, "H")).」
この書き方わかりやすいです。
いつもありがとうございます。

お礼日時:2016/07/21 21:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!