『乗り物の運航管理において終了したスケジュールを表の最後になるように自動で並び替えの方法』(mach) 乗り物の運航管理をexcelで行っています。 他の部署でAというbookに出発、到着時間を入力しています。 私の部署でAを参照して表示させるためにBというBookを使用しています。 乗り物は12台です。 種類は複数あり、同型もあり、それぞれ識別番号があります 最も関連するところだけを書き出せば BのBookの A列にはA2〜A13に1〜12の番号を入れてあります(見るためだけですが) B1(運航状況)、C1(車種)、D1(識別番号)、E1(出発予定)、F1(到着時間)と名前を入れてあり、A Bookに入力されるとB BookでC列からF列を読み込みB列に運航状況を表示する仕組みです。 ここまでは正常に動いているのですが、到着時間が予定通りにならないために未着の車両と到着済みの車両が入り乱れてしまいます。 そこで、到着時間をトリガーにして並び替えをマクロで記録してボタンで押せば所望の結果にはなるのですが、あくまでモニターでの状況表示用なのでその都度マクロを実行させるボタンを押すことができません。 参考までに マクロは Sub Macro3() ' ' Macro3 Macro ' Range("B1:F13").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("F2:F13") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C13") _ , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="A,Z,N", _ DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D2:D13") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("B1:F13") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWorkbook.Save End Sub ただし、これを手動で行うと 「ドキュメント検索機能では削除できない個人情報が含まれることがあるのでご注意ください」とメッセージボックスが出てしまいます。 これも出さないようにしたいです。 マクロにこだわっていませんが、うまく並び替えを自動でできる方法をご教授いただけたら幸いです。 よろしくお願いいたします。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- 車種はユーザー設定リストで並び替えを指定しています。 (mach) 2020/02/20(木) 16:43 ---- これですかね? (注、↓リンクされないませんでした。urlをエクセルに張り付けてクリックすると楽?) http://かとう.com/msgdel-667 http://かとう.com/excel-nodocriyu-746 私はこれ見て、「ファイルを保存するときにファイルのプロパティから個人情報を削除する」の チェックをはずしました。人それぞれですかね? その他、 「ドキュメント検索機能では削除できない個人情報が含まれることがあるのでご注意ください」 で、web検索すると色々ありました。 (BJ) 2020/02/20(木) 18:10 ---- んと、 他部署で出発、到着時間を入力するブックを「入力用ブック」とします。 私の部署でAを表示させるためのブックを「表示用ブック」とします。 たまにAとかBとかで表現される方が居ますけど、 何がAで何がBか解らなくなるので、役割で表現していただけると助かります。 入力用ブックで変更を入力するたびにCSVファイル形式で保存   ↓ 表示用ブックでテキストファイルのインポートでCSVファイルをインポートする。 というような運用をすると、分単位で更新の設定ができるので、 変更を自動で反映できそうです。 そうすると、マクロは値が更新されたときに、 並べ替えの範囲の再設定と、 並べ替えの再実行だけでよさそうです。(見やすくするため、セルの書式設定もしてもよい) こうすると元のブックには影響がなく、 自動で変更を反映しつつ、 見る側で好きに編集して見ることが可能かと。 Private Sub Worksheet_Change(ByVal Target As Range) With Me.Sort .SetRange .Rng.CurrentRegion .Apply End With End Sub 並べ替えの部分だけ言及すると、 手動で並べ替えをしようと、並べ替えダイアログボックスを表示すると、 前回設定した設定が残ってますよね? なので1回設定したことは何度もマクロで実行する必要はありません。 そして、 ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear などと、設定をクリアする必要もないわけです。 マクロの記録をすると、さまざまなコードが記録されるわけですが、 1行1行をよく読み、それがどんなことを命令しているか理解し、 今回のマクロに必要な命令なのかよく考えてみてください。 そして、やりたいことの手順に沿ったコードを書いて下さい。 例えば、「見るだけ」のブックなので、 ActiveWorkbook.Save などと毎度毎度上書き保存をする必要もないわけです。 (してもいいけど意味がない) つまり、 接続の設定と、 並べ替えの設定と、 並べ替え等を自動で実行するマクロ が揃って(その情報が保存されて)いれば、 表示用のブックとしては用が足りるということです。 こういった方針でアプリの開発を進めて行ってはいかがでしょうか? ※僕もこういった運用は経験がなく、探り探り書いてます。(2〜3時間かかったかな?) もっと便利なエクセルの使い方があるかも知れません。 他の方の意見も参考にしつつ、まずは全体の構想を固めてみたらいいと思います。 マクロのコードも重要ですが、エクセルの機能を知ることは、もっと重要だと思います。 (まっつわん) 2020/02/20(木) 20:36 ---- (BJ) さん コメントありがとうございます。 ご指摘の「ファイルを保存するときにファイルのプロパティから個人情報を削除する」の チェックは外してあったのですが、たまたま違う端末で作業中に発生していたので、前回チェックは外したのに何故かなと思い質問させて いただきました。 サーバーにある同じファイルを触っていたのですが、端末毎にチェックを外さなくてはいけないのかなと現在は思っています。 (まっつわん)さん いつもありがとうございます 入力用BOOKは触れない環境なので悩んでいました。 csvファイル経由は今度、自分の環境で試してみたいと思います。 様々な端末で開いた時に並び替えが必要担っていたので、並び替え後に保存してあげないとそれぞれの端末で同じ操作が必要になっていたので保存の手順をいれました。 煮詰まって解決できなかった時に質問させていただいております。 今後ともよろしくお願いいたします。 なお、本日自己解決できました。 私の方法は This Workbookに以下を挿入しました。 時刻指定で並び替えです。時刻は一例ですが Private Sub Workbook_Open() Application.OnTime EarliestTime:=TimeValue("16:00:00"), Procedure:="Macro3" Application.OnTime EarliestTime:=TimeValue("16:03:00"), Procedure:="Macro3" End Sub このように並び替えしたい時間指定にはなりますが、思惑通りに動いてくれています。 ありがとうございました。 来週はMacro3の中身をもう少しスリム化したいと思っています (mach) 2020/02/21(金) 19:54 ---- 同じブックをみんなで開いたり閉じたりするってことですか。。。? thisworkbookモジュールに以下でよいのでは? Private Sub Workbook_Open() Me.Worksheets(1).Sort.Apply End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Save End Sub (まっつわん) 2020/02/22(土) 08:28 ---- (まっつわん)さん B=表示用BOOKは複数の端末から見に行きます。 Sort.Applyは初めて見ましたが、調べたところとなるほどです。 試してみたいと思います ありがとうございます (mach) 2020/02/22(土) 09:15