- ベストアンサー
Excelで検索条件つきで日付順に並べる方法
- Excelで特定の検索条件を設定し、日付順にデータを並べる方法について説明します。
- Excelの特定のシートから、指定した会社の物件を日付順に並べる方法について説明します。
- 関数ではなくマクロを使用する必要がある場合もありますが、Excelで日付順の並べ替えができる方法をご紹介します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Sub 仕分け() Dim 集合 As Sheets Dim 一覧 As Worksheet Dim 会社 As Worksheet Dim 名前 As String Dim 最終 As Long Dim 行 As Long Dim 列 As Long Dim 先 As Long Dim 名 Set 集合 = ThisWorkbook.Worksheets Set 一覧 = 集合("一覧") 最終 = 一覧.Cells(65536, 1).End(xlUp).Row For 行 = 2 To 最終 名 = 一覧.Cells(行, 4) Set 会社 = Nothing On Error Resume Next Set 会社 = 集合(名) On Error GoTo 0 If 会社 Is Nothing Then Set 会社 = 集合.Add(After:=集合(集合.Count)) 会社.Name = 名 End If 名 = 名 & vbTab If InStr(名前, 名) = 0 Then 会社.Cells.Delete 名前 = 名前 & 名 For 列 = 1 To 4 会社.Cells(1, 列) = 一覧.Cells(1, 列) Next End If 先 = 会社.Cells(65536, 1).End(xlUp).Row + 1 For 列 = 1 To 4 会社.Cells(先, 列).Value = 一覧.Cells(行, 列).Value 会社.Cells(先, 列).NumberFormat = 一覧.Cells(行, 列).NumberFormat Next Next For Each 名 In Split(名前, vbTab) If 名 = "" Then Exit For Set 会社 = 集合(名) 先 = 会社.Cells(65536, 1).End(xlUp).Row 会社.Range("A2:D" & CStr(先)).Sort key1:=会社.Cells(2, 1) Next End Sub 本メソッドを該当ブックの標準モジュールにコピペしてください。 この「仕分け」メソッドを実行すると、振り分け+ソートを行います。
その他の回答 (4)
- DOUGLAS_
- ベストアンサー率74% (397/534)
>実際運用するのが、PC初心者 >出来れば関数でやりたかった >運用する方々のPCスペックもそれほど良いものではない とのことでしたら、無条件に >上記以上に「補助列」を設けて、四苦八苦すること になりましょうか。。。 1)[一覧] シート の E2 に =D2 & COUNTIF(D$1:D2,D2)+1 と入力し、これを下方向に オートフィル します。 2)[一覧] シート E列 は非表示にします。 3)[あああ社] シート の E1 に「あああ社」、F1 に「0」と入力します。 4)[あああ社] シート の E2:H2 に、それぞれ =MATCH(E$1&ROW(),一覧!E:E,0) =IF(ISNA(E2),50000,INDEX(一覧!A:A,$E2)) =MATCH(SMALL(F:F,ROW()),F:F,0) =INDEX(E:E,$G2) と入力します。 5)[あああ社] シート の A2 に =IF(ISNA($H2),"",INDEX(一覧!A:A,$H2)) と入力し、B2:D2 に コピー します。 6)[あああ社] シート の A2:H2 を選択し下方向に オートフィル します。 7)[あああ社] シート の E列~H列 を非表示にします。 D列 は不要かと存じますので、全て入力して「あああ社」から引っ張ってこられたことが確認できましたら、後からでも D列 は削除できます。
- n-jun
- ベストアンサー率33% (959/2873)
元の質問はリンクしておいた方がよいかも。 http://okwave.jp/qa/q5778423.html 質問するカテゴリは デジタルライフ > ソフトウェア > MS Office で良いはずですよ。 関数にせよマクロにせよExcelの質問ですから。 本題ですけど、一覧のシートにあるデータを管理会社毎で且つ 日付順に並び替えてコピー(or 移動?)させるという感じなのでしょうか?
お礼
ご回答ありがとうございます。 元の記事へのリンクありがとうございます。 今後このような形での質問があれば、リンクを貼らせていただきたいと思います。 お手数おかけいたしました。 >本題ですけど、一覧のシートにあるデータを管理会社毎で且つ >日付順に並び替えてコピー(or 移動?)させるという感じなのでしょうか? 仰るとおりです。 日次での処理で、全件データベースソフトからエクスポートしており、 日々増えていくものなのでコピーでも移動でもかまいません。 これをなにも知識の無い初心者でも数クリックするだけで処理するのが目標です。
- DOUGLAS_
- ベストアンサー率74% (397/534)
>できれば関数でやりたかったのですが、 >マクロでないと無理だとの事で、 >こちらで質問をするようアドバイスを頂きました。 そんなことはありません。 関数でもできなくはありませんが、[配列数式] という、難解な数式になるだけの話です。 で、その [配列数式] という難解な数式を組み立てる間には、マクロ を書いた方が早いというような意味ではないでしょうか? 例えば、[あああ社] シート の 1)E2 に =SMALL(IF(一覧!$D$2:$D$1000="あああ社",一覧!$A$2:$A$1000 + ROW(一覧!$D$2:$D$1000)/86400,50000),ROW(A1)) と入力して [Shift] + [Ctrl] + [Enter] で確定します。 2)F2 に =TEXT(E2,"h:m:s")*86400 と入力して、こちらは [Enter] で確定します。 3)A2 に =IF($F2=0,"",INDEX(一覧!A:A,$F2)) と入力し、これを B2:D2 に コピー します。 4)A2:F2 を選択し、下方向に必要分以上 オートフィル します。 5)E列・F列を非表示にします。 ちなみに、この方法は、計算量が多くなり、スペック の低い パソコン にはとても負担が掛かりますし、大体、[配列数式] 自体を組み立てるのが一苦労なので、余りお薦めではありませんね。 [配列数式] を使わない方法でしたら、上記以上に「補助列」を設けて、四苦八苦することもできましょうが、普通は、[一覧] シート で (1)[管理会社] 順、(2)[日付] 順に並べ替えたものを、各シート に配って歩くのが簡単でしょうか。
お礼
回答ありがとうございます。 貼り付ける前に日付ソートをすることを前提として、 =OFFSET(一覧!$A$1,1/LARGE(INDEX((一覧!$D$2:$D$1500=$D$2)/ROW(一覧!$D$2:$D$1500),),ROW(一覧!D1))-1,2) という配列数式は自分で組んでみたのですが、 ご提示頂いた方法を使えば事前ソート無しで出来ますね。 非常に勉強になりました。 実際運用するのが私ではなく、PC初心者も多いので複数工程を全員に伝えるのはなかなか難しいうえに 最初の画面でマクロをオフにしてしまう人もいるため出来れば関数でやりたかったのですが、 運用する方々のPCスペックもそれほど良いものではないため (実際やってみたところフリーズはしませんが、計算中画面が数十秒間真っ白になります。) どちらにしようか迷っております。
- ICE_FALCON
- ベストアンサー率56% (63/111)
他のシートにコピーしなくても オートフィルタ使えば簡単ですよ? 表のどこでもいいから選択して、 データ→フィルタ→オートフィルタ を選択すればOK。 どうしても他のシートにコピーしたいなら、 オートフィルタで社名を選択 表を全部選択 可視セルのみコピーして他のシートにペースト という動作をマクロに記録すれば簡単。 マクロの記録じゃなく自分で書くなら↓なんか参考になりそう。 http://www4.ocn.ne.jp/~yy3/Sub47.html
お礼
回答ありがとうございます。 可視セルのみコピーというマクロが組めるのですね。 参考になりました。
お礼
回答ありがとうございます。 ほぼ理解できていませんが、完璧に狙い通りの動作です。 これをAuto_Openにしておいて、最後にメッセージを出し、 少し待ってもメッセージが出なかったら閉じて再度開いて マクロを有効にするよう周知すればどうにかなる気がしてきました。 助かりました。ありがとうございます。 この動作も勉強したいと思います。