[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの並び替え』(みな)
Excel2003を使用してます。
D列のデータによって並び替えをしたいと思っています。
下記のようなコードを書き データの並べ替えはできるのですが
新しい行を書き込む度にマクロの実行を押して並べ替えをするという感じになります。
Sub prcSort()
Range("A5:L17").Sort _ Key1:=Range("D1") _ , Order1:=xlAscending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End Sub
これを新しい行を追加で記入する度に勝手に並び替えするようには
できませんでしょうか?
よろしくお願いします。
D列のデータ行(6行目以降)に値が入力されればいかが自動的に動く。 (追加のみならず、既存のD列のどこかが変更されても動く)
このシートのシートモジュール(シートタブを右クリックしてコードの表示を選ぶと出てくるところ)に 以下をコピペ。
Private Sub Worksheet_Change(ByVal Target As Range) Dim z As Long
If Target.Row > 5 Then If Not Intersect(Target, Columns("D")) Is Nothing Then Application.EnableEvents = False z = Me.UsedRange.Cells(Me.UsedRange.Cells.Count).Row '最大行番号 Range("A5:L" & z).Sort _ Key1:=Columns("D") _ , Order1:=xlAscending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin Application.EnableEvents = True End If End If
End Sub
(ぶらっと)
↑ 留意点
要求されたテーマのコードとしては上記のとおりだけど、使いづらいかもね。 たとえば今、10行目に追加しているとする。A10->B10->C10 といれて、D10 に入れた瞬間に 並び替えが発生する。で、今、入力していた行は、D列の値に応じて、しかるべきところに 移動する。でも、入力としては、そのあと E列にもF列にも入れるんだよね? 何もしなければ、D10列の入力の後、カーソルは E10 にあり、そこに値を入力するわけだけど 入れようとしている行は、どこかに移動して、カーソルは【新しい10行目】のE列にある。
どこかの領域から、行全体をコピペして追加すれば、操作上問題ないだろうけど。
それから、たとえば、最終行への入力を、別のマクロでやったとする。 そのマクロは最終行が10行目ということを認識して、A10,B10,C10,D10,E10,F10・・・ に値を入れるとする。 そうすると、D10 まではいいんだけど、E10以降、【別の行】に転記されることになる。
なので、【勝手に】というのは、どうなんだろうね? 行に値を入れ終わったら、さぁ、並び替え というように、マクロを走らせたほうがよくない? もちろん、コードは、【いつ、行に値が入れ終わるか】は判断できないので、入れ終わった時点で そちらからのアップ済みのようなコード(最終行は動的に与える必要はあるけど)をボタンなんかに 登録して、それをクリックしたほうが無難だと思うよ。
(ぶらっと)
教えていただいたコードでできた〜と思ったのですが
留意点を読ませていただいて
私一人が使うのではなくみんなで共有なので
D列以後の行が飛んでしまうのでは使いにくいと思い
教えていただいたとおり 1行全部入力後
ボタンにて並び替えが出来るように作成し完成しました。
本当にありがとうございました。
先日教えていただいたとおり ボタンを作成し並べ替えができるようになったのですが、
1シートではうまく動いたのですが 2シート別々の並び替えがしたく
同じようにボタンを作成し マクロを登録すると
「実行時エラー "1004"
この操作には 同じサイズの結合セルが必要です」となり
Range("A26:R37").Sort _ Key1:=Range("M1") _ , Order1:=xlDescending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin
または
Range("A26:R37").Sort _ Key1:=Range("M1") _ , Order1:=xlDescending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin
がすべてエラーになってしまいます。
シート1でボタンのマクロを 標準モジュール Module1に
Sub オートシェイプ5_Click()
Range("A5:L17").Sort _ Key1:=Range("D1") _ , Order1:=xlAscending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin
End Sub
シート2でボタンのマクロを 標準モジュール Module2に
Sub オートシェイプ3_Click()
Range("A26:R37").Sort _ Key1:=Range("M1") _ , Order1:=xlDescending _ , Header:=xlYes _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin
End Sub
と登録しました。
結合セルが必要とはどのようにすればいいのでしょうか?
シート3、シート4でも並び替えが必要なデータがあり
同じように ボタンにて並び替えをさせたいと思ってます。
お手数おかけしますが なにとぞ よろしくお願いします。
老眼が進んだのか
Range("A26:R37").Sort _ ' ' または
Range("A26:R37").Sort _ ' '
とあるところ、どうみても「または」ではなく、おなじに見えるけど。
まぁ、それはさておき、
この操作には 同じサイズの結合セルが必要です
これを検索ワードにしてネット検索するとどっさりとでてくるのでいくつか目を通しておいてほしい。 マクロではなく、エラーのあったシートで、操作で、マクロが並び替えようとしているセル領域を選択して 手作業で並び替えを実行してみるとどうなるかな? もし、こうした場合にはエラーなく並び替えが実行できるなら、あれこれ悩んで調べてみるけど 操作でやっても同じエラーになるはず。
並べ替えをしようとしているセル領域の行は、すべてが結合されていないセルか、あるいは 結合されているセルを結合状態の1列だけで並び替えることはできるけど、それ以外はだめ。
ところで、シートごとの実行プロシジャを標準モジュールをわけて記述しても、もちろんいいけど 1つの標準モジュールにすべて書いてもいいんだよ。プロシジャ名は、もちろん、変えなきゃいけないけど。
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.