• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:For Eachを使った並び替えについて)

For Eachを使った並び替えについて

OtenkiAmeの回答

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.2

こんにちは。 > 1点目は、この動作を組2、組3、組4においても繰り返したいのです > が、4回繰り返して書く方法以外に、簡潔な書き方があれば教えてくだ > さい。  前回も書きましたが、質問者さんだけが分かる情報を持っていて、回答 者側が分からない状態では、回答しようがありません。  一般的には、共通する処理をサブルーチン化して呼び出すような処理にするか、 Sub Hogehoge()  Call Hogehoge2("組1")  Call Hogehoge2("組2")  Call Hogehoge2("組3")  Call Hogehoge2("組4") End Sub Sub Hogehoge2(ByVal NameRange As String)  Dim a As Range  For Each a In Sheets("組合せ").Range(NameRange)    処理  Next a End Sub For Each .. In .. Nextを使うことになると思います。 Sub Hogehoge() Dim XXX As Variant Dim a As Range For Each XXX In Array("組1","組2","組3","組4")   For Each a In Sheets("組合せ").Range(XXX)     処理   Next a Next XXX End Sub のような書き方ができると思います。  質問者さんが「簡潔な書き方」を何を指しておっしゃっているのか分か りませんが、同じような処理を4回繰り返して書かないことが「簡潔な書 き方」だとすれば、まず、4回繰り返して処理を書いて、共通できる処理 とそうでない処理を割り出すことから始めたら如何でしょうか。 > 2点目は、………のRange("B2")の値が、4組の中で繰り返し出てこない > ようにしたいのです。 コピー範囲と、貼付済み範囲のデータが同じかどうか総当たりで調べ、同 じにならなくなるまでコピー範囲の並べ替えを繰り返してから、貼付すれ ばいいのではないでしょうか。

関連する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

  • ボタンを押して実行するマクロの編集について

    キャンプの班分けで、いったん班分けという全員の名簿のワークシートから班毎に別々のワークシートに名簿を作成するというマクロです。 ボタンを押して実行します。 班の数が例年18班だったのが、20班に増えてしまいました。 そこでマクロをコピーして数字を変えて19班、20班の分も作りたいと考えています。   19班を作ったのですが、うまくいかず、教えていただければ助かります! Sub Macro1_19() ' ' Macro1_10 Macro ' マクロ記録日 : 2007/7/1 ユーザー名 : kkk' ' Sheets("班分け").Select Selection.AutoFilter Field:=2, Criteria1:="19" Range("C6:Q187").Select ActiveWindow.ScrollRow = 23 ActiveWindow.ScrollRow = 1 Selection.Copy Sheets("19班").Select Range("C8").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Selection.Sort Key1:=Range("G8"), Order1:=xlDescending, Key2:=Range("I8") _ , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal Sheets("班分け").Select Selection.AutoFilter Field:=2 Sheets("19班").Select 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

  • 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

  • エクセル 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

  • 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

  • エクセルのマクロ

    現在エクセルにてデーターの分析などをおこなっています。 そこで1つ質問ですがオートフィルターをした後のベスト10のデーターをコピーできないでしょうか? Sheets("シート名").Select Range("J5").Select Selection.AutoFilter Field:=10, Criteria1:=">=500", Operator:=xlAnd Range("A5:R2384").Sort Key1:=Range("Q5"), Order1:=xlDescending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal ActiveWindow.SmallScroll ToRight:=-4 Range("B5:R15").Select Application.CutCopyMode = False Selection.Copy Sheets("データーシート3").Select Range("B5").Select ActiveSheet.Paste この様にやっているのですが Criteria1:=">=500"の部分が変動する為に、表示されるデーター数がバラバラです。 たえずどんな条件でオートフィルターをかけても10件コピーできる方法はないでしょうか?

  • エクセル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行ほどくりかえしたいです。 どなたか分かる方 お願いします。

  • 並べ替えのマクロで対象行の範囲を行を増やした分だけ可変にして増やしたい。

    マクロ超初心者です。エクセル2003においての質問です。 作成した〔日付順〕のボタンを押すことで並べ替えをしたいと思い,以下のマクロを「記録」から作成したのですが, 9行~153行の間に行を挿入した場合,並べ替えの対象となる行も同じように増えてほしいのですが,常に9行~153行のままで増えてくれません。 可能なら9行より前に行を挿入した場合も同じように可変して欲しいです。 全くのマクロ初心者でどう変えればいいのか分かりません。 また,「記録」から作成したマクロには操作内容が全て存在するようなのですが, 消してもいい不要な部分も分からないので教えて頂ければありがたいです。 よろしくお願いします。 (出来れば以下を書き直して全て貼り付けて頂けるとかなり助かります。) sub 日付順()    Rows("9:153").Select    Selection.Sort Key1:=Range("I9"),Order1:=xlAscending,Key2:=Range("J9") _       ,Order2:=xlDescending,Header:=xlGuess,OrderCustom:=1,MatchCase:= _       False,Orientation:=xlTopToBottom,SortMethod:=xlPinYin,DataOption1:= _       xlSortNormal,DataOption2:=lxSortNormal    Selection.Sort Key1:=Range("H9"),Order1:=xlAscending,Key2:=Range("B9") _       ,Order2:=xlDescending,Key3:=Range("M9"),Order3:=xlAscending,Header _       :=xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom _       ,SortMethod:=xlPinYin,DataOption1:=xlSortNormal,DataOption2:= _       xlSortNormal,DataOption3:=lxSortNormal End Sub

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub