• 締切済み

【至急】VBAについて

現在エクセル2003を使用しています。 VBA初心者です。 -----エクセルの現在の状態----- ・A5からL5までに項目の名称が書いてあります。 (A5に”見積番号” B6に”件名” などと記入されています。) ・データはA6からL5まで記入され下方向にデータは増えて行きます。 (データは見積を完成させるごとに下に増えて行きます。) ・見積番号と件名で検索をかけたいので、一つ組んだものがあります。 Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub これです。所謂Ctrl+Fで使用する検索のコードとほぼ同じかと思われます。 ですが、これでは事足りないと上司に言われ質問致しました。 -----今回出来ない部分に関して----- Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub こちらのコードを使用すると、きちんと検索はされます。 ですが、オートフィルタの様に 例えば件名のところを絞ると データも同じ件名のものだけを抽出し表示さる様にしてほしいとの事でした。 エクセル内にボタンを作成し、クリックすると検索窓を出現させ条件を記入したら そのエクセルのシート内にその条件と合ったデータを抽出したものを作成したいのです… ※簡単に言うと Ctrl + Fの機能とオートフィルタを開くとオートフィルタオプションの検索窓が 出現しますよね。 それをマクロで組みたいと言った方が分かりやすいでしょうか…?? レスポンスはなるべく早く致します。 皆様の知識をお借りできればと思い 質問させて頂きました。 以上、宜しくお願い致します。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です。 補足に >A列も検索をかけたいのです… とありますが、同じ見積番号が複数存在するというコトでしょうか? まぁ~それはさておき、A列が見積番号に限らす。A列とB列で検索を掛ける方法です。 Sub フィルタ2() Dim str1 As String, str2 As String str1 = InputBox("見積番号を入力") str2 = InputBox("件名を入力") With Range("A5") .AutoFilter Field:=1, Criteria1:=str1 .AutoFilter Field:=2, Criteria1:=str2 End With End Sub こんな感じではどうでしょうか?m(_ _)m

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.3

見積もり番号って重複してないものじゃないかと思うのですが・・・。 としたら、前の人のをコピペして直すだけ。 あとボタンをもう一つ増やす(見積もり番号用)。 ((アンド条件で探したかったならごめんなさい)) Sub フィルタ() Dim str As String str = InputBox("見積もり番号を入力") Range("A5").AutoFilter field:=1, Criteria1:=str End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! No.1さんが仰っているように 前半のコードはA列の昇順で並び替えているだけですね! 質問はB列の「件名」でフィルタをかけたい!というコトでしょうか? 手作業でやるのが一番簡単だと思いますが、 >オートフィルタオプションの検索窓が 出現しますよね。 インプットボックスにB列の件名を入力するようにしてみました。 ついでに、フィルタ解除のコードも載せてみます。 ごくごく単純にやってみました。 Sub フィルタ() Dim str As String str = InputBox("検索したい件名を入力") Range("A5").AutoFilter field:=2, Criteria1:=str End Sub Sub フィルタ解除() ActiveSheet.AutoFilterMode = False End Sub ※ 4行目に何らかのデータがA~L列まで入力してある場合5行目の項目行が非表示になってしまいます。 その場合は >Range("A5") の部分を >Rows(5) に変更してみてください。 この程度で良いのでしょうか?m(_ _)m

lisa3876
質問者

お礼

凄い!出来ました!有難う御座います。 分かりにくい文章で本当に申訳ありませんでした…

lisa3876
質問者

補足

ちなみにもう一点だけ質問させて下さい。 A列も検索をかけたいのです… そういう場合はどう組めば良いのでしょうか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

提示されたコードを見ると、検索ではなくA列の昇順での並べ替えをしているだけと思うのですが、ご希望の操作との関係が良くわかりません。 最終的にどのような結果を表示または抽出したいのか、例えば、検索条件がA1セルとB1セルにあり、そのデータを別シートに表示したいなど、もう少し具体的にご希望の操作を例示してください。

lisa3876
質問者

お礼

大変失礼致しました! ご指摘有難う御座いました。

関連するQ&A

  • 記述を簡略化させたい

    お世話になります。 下記の記述をスマートにさせたいのですが、ご教示お願いします。         記 Sub 優先順位() Range("A16:Y25").Select Selection.Sort Key1:=Range("Y16"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A43:Y52").Select Selection.Sort Key1:=Range("Y43"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A70:Y79").Select Selection.Sort Key1:=Range("Y70"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A97:Y106").Select Selection.Sort Key1:=Range("Y97"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A16").Select End Sub

  • 【至急】VBAについて

    現在エクセル2003を使用しています。 VBA初心者です。 -----エクセルの現在の状態----- ・A5からL5までに項目の名称が書いてあります。 (A5に”見積番号” B6に”件名” などと記入されています。) ・データはA6からL5まで記入され下方向にデータは増えて行きます。 (データは見積を完成させるごとに下に増えて行きます。) ・見積番号と件名で検索をかけたいので、一つ組んだものがあります。 Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub これです。所謂Ctrl+Fで使用する検索のコードとほぼ同じかと思われます。 ですが、これでは事足りないと上司に言われ質問致しました。 -----今回出来ない部分に関して----- Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub こちらのコードを使用すると、きちんと検索はされます。 ですが、オートフィルタの様に 例えば件名のところを絞ると データも同じ件名のものだけを抽出し表示さる様にしてほしいとの事でした。 エクセル内にボタンを作成し、クリックすると検索窓を出現させ条件を記入したら そのエクセルのシート内にその条件と合ったデータを抽出したものを作成したいのです… ※簡単に言うと Ctrl + Fの機能とオートフィルタの機能の いいとこどりしてほしいって事なんですよね…笑 レスポンスはなるべく早く致します。 皆様の知識をお借りできればと思い 質問させて頂きました。 以上、宜しくお願い致します。

  • エクセル VBA 集計方法

    各シート毎に下記の内容にて集計をしたいのですが、A2のセルにデータがない場合集計をしない方法がわからないのでご存じの方宜しくお願い致します。 Sheets("Sheet1").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet2").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet3").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True End Sub

  • 下記のマクロの説明(意味)を教えてくださ。

    Range("A4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlStroke, DataOption1:=xlSortNormal

  • EXCEL VBA ソートにおいて

    EXCEL 2003 のVBAのsortにおいて、解決できなくて困って おります。 名前,色,産地,品質,味,値段,重さ, りんご,赤,青森,10,10,500,100 みかん,黄,和歌山,10,10,300,50 すいか,緑,群馬,10,8,2000,1000 メロン,黄緑,青森,10,8,2500,500 いちじく,赤,鹿児島,8,8,200,100 名前、品質、値段の順に並びかえたいと思い、 excelのVBAの記録でオートフィルタ後に 並び替えを行ったところ下記のコードが記録されました。 Sub Macro28() Cells.Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal end sub ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い たいように訂正)みると作動しません。 Private Sub CommandButton1_Click() worksheets(1).Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub watch 式では 3行目までは worksheets(1).Select = TRUE ですし Selection.AutoFilter = TRUE となっているのですが、 sortの反応が分からない状況です。 Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal この部分が問題なのかと考えております。 ネットで調べて worksheets(1).RANGE("A1:G6").Select Selection.sort…… とか worksheets(1).RANGE("A1:G6").sort とかも試してみたのですが、だめでした。 sort を使用するときにselectionとの相性や、 rangeとの兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

  • エクセルVBA 繰り返し

    エクセルVBAで   ABCD       ABCD          1 54 1      1 145   2 24 3     2 234 3   1      3 1 上記の左のようなデータを右ように 各行ごとに並び替えをしたいのですが、 どのようにしたらいいのでしょうか。 Range("A1:D1").Select Application.CutCopyMode = False Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal 1行だとこんなんがでてきました。 これをどうしたら、3行4行と増やしていけますか? 50行ほどくりかえしたいです。 どなたか分かる方 お願いします。

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • Excel 2000 のVBAにおけるソートについて教えて下さい。

    Excel2002のVBAで、並び替えをマクロ記録させると、Excel2000ではなかったものがあるのですが、これはどんな意味なのですか? 2002で記録されたマクロは、 Selection.Sort Key1:=Range("E2"), Order1:=xlDescending, Header:= xlGuess,OrderCustom:=1, MatchCase:=False,Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal です。このうち2000のマクロ記録では最後の DataOption1:=xlSortNormal がないのです。この2002以降(?)で記録されるこの部分はどのような働きをするのですか? また2000では同じような働きをさせるにはどのようにマクロを記述すればいいのですか? よろしくお願いします

  • VBAで並び替え・・・

    VBAで並び替えをしたいのですが、変な範囲が選択されます。 一覧表のA5:BF5に項目が入っています。 マクロの登録でA5をクリックして、shift+ctrl+end(→)で項目を選択し、shift+ctrl+PgDn(↓)で範囲選択して ツールの並び替えで並び替え項目はA5です。 下記のコードができました。 しかしながら、エラーがでます。 よろしくお願い致します。 エクセルのバージョンは2002です。 Sheets("一覧").Select Range("A5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("A5").Select Sheets("現場登録検索").Select Range("C2:D2").Select

  • Excelのソート方法(タイトルと合計行の間)について

    支払予定を作成しております。 タイトル行と合計行の間のデータを日付順にソートしております。 (マクロにて) 行を挿入した場合、下記の場合範囲を固定している為全データを ソート出来ません。 データ範囲の指定方法を教え下さい。 よろしくお願い致します。 Sub 並べ替え2() Range("A3:D18").Select Selection.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A2").Select End Sub

専門家に質問してみよう