
いつもお世話になっております。
先日、下記にて質問をさせて頂きましたが私の質問の仕方がわかりづらく
申し訳ございませんでした。
↓
https://oshiete.goo.ne.jp/qa/11124818.html
自分なりにいろいろと調べ、下記までたどり着いたのですが
このマクロを希望条件に変更する為の知識がなく、再度質問させて頂きました。
●シート1のB5からP61の範囲でO列をキーとして降順に並べ替えをしたい。
Sub SortTest()
Worksheets("sheet1").Activate
Worksheets("sheet1").Range("B5:P61") _
.Sort Key1:=Range("O5"), order1:=xlDescending
End Sub
上記のマクロを下記希望条件で並べ替えができるように変更したいです。
どのように修正すればよろしいでしょうか?
*希望条件
sheet1~sheet3の複数シートを対象とし
B5からO61のO列をキー、Q5~AE5のAD列をキー、AF5~AU5のAT列をキーとして降順に並べ替えをしたいです。
※対象列数は不規則です。
詳しい方、何卒ご教授願います。
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
No1,No2です
大分検証していただいた後のようなので、遅まきながら感はありますが・・・
Sortの方法の件ですが、最初のご質問文に挙げられているのはSortメソッド、No5のお礼に挙げられているのはSortオブジェクトを利用した方法になっていますね。
No1の回答は、元のご質問文に合わせて前者の回答になっていますが、ご質問文のコードであれば動作しているのですよね?
(MSDNのメソッドにもあるので、現状のExcelならほぼ使えるメソッドだと思いますが)
いろいろ試行なさっていると思いますが、エラー内容は毎回最初のエラー、
『並べ替えの参照が正しくありません。参照が並べ替えるデータ内にあることと[最優先されるキー]ボックスが空白でないことを確認してください。』
が、続いている状態なのでしょうか?
このエラーだと、キーを含め範囲指定がおかしいとしか思えませんが、単独で
Sub TEST()
Worksheets("Sheet1").Range("B5:P61").Sort _
Key1:=Worksheets("Sheet1").Range("O5"), order1:=xlDescending
End Sub
を実行してもエラーになりますか?
あるいはエラーはでないが降順にならない?
(シート名、セル範囲は実際に存在する内容にしてください)
どちらでもない場合は、コードの問題よりも最初にデータとして与えている、「シート名」及び「セル範囲の指定」におかしな内容が混ざっていないかを確認してみてください。
もしも上記のTEST()が実行できない場合は、基本的な構文が通じていない(?)という可能性がありますので、考え方を変える必要があるのかも知れません。
お世話になっております。
返信が遅くなり、申し訳ありません。
>Sortの方法の件ですが、最初のご質問文に挙げられているのはSortメソッド、No5のお礼に挙げられているのはSortオブジェクトを利用した方法になっていますね。
>No1の回答は、元のご質問文に合わせて前者の回答になっていますが、ご質問文のコード>であれば動作しているのですよね?
>(MSDNのメソッドにもあるので、現状のExcelならほぼ使えるメソッドだと思いますが)
>いろいろ試行なさっていると思いますが、エラー内容は毎回最初のエラー、
>『並べ替えの参照が正しくありません。参照が並べ替えるデータ内にあることと[最優先されるキー]ボックスが空白でないことを確認してください。』
>が、続いている状態なのでしょうか?
→動作はしております。
[最優先されるキー]~のエラーは出ておりませんが、並び替えが降順にならずバラバラな並び順になってしまいます。
>このエラーだと、キーを含め範囲指定がおかしいとしか思えませんが、単独で
>Sub TEST()
>Worksheets("Sheet1").Range("B5:P61").Sort _
>Key1:=Worksheets("Sheet1").Range("O5"), order1:=xlDescending
>End Sub
>を実行してもエラーになりますか?
>あるいはエラーはでないが降順にならない?
>(シート名、セル範囲は実際に存在する内容にしてください)
→上記単独のマクロであれば、降順に正しく並び替えられます。
それを複数シート、複数列を選択して一括で並び替えするにはどうすればよいでしょうか?
何度も申し訳ございませんが、ご教授頂けますと幸いです。
No.7
- 回答日時:
No.6です。
>シートですが、まとまっています。
>どのように修正すれば良いか…。
まず『ブック全てのシートが対象』ではなく『ある部分にまとまっているシートのみが対象』と考えた場合、その『ある部分』がどこなのかが重要ですね。
シートインデックスNoは一番左を 1 として右にカウントしていきます。
なので、
・1~〇
・△~最後のシート
・□~◇(途中の任意のシートNo.)
によってループさせる範囲が変わりますから、その情報は必要です。
ただ私の方では古い手段で書ける部分は何とかいけるかもですが、SORTオブジェクトについては作成・検証ができませんしね。
あとは並び替えようとしている範囲においてまだデータが存在してないシートもあるのでは?
その判定をどこでとるのか、それとも年度末(データ入力が全て完了した後)に実行予定なのでしょうか?
確かに一気に並べ替える訳ですから毎月等でやる必要はないでしょうけど、年度途中での纏めなどしないのかな?って。
お世話になっております。
返信が遅くなり、申し訳ありまえせん。
親身にご教授頂きましてありがとうございます。
条件等、再度見直してみたいと思います。
よろしくお願いいたします。
No.6
- 回答日時:
No.5です。
No.4に記載しておけば良かったですね。
マクロの自動記録で出来上がったマクロを実行させたらどうなるかと言う検証はされてましたかね。
仮にそちらで問題なければSORTメソッドではなく新しいSORTオブジェクトで作成した方が良いのかもですけど、
私の所持しているバージョンでは検証が出来ないのですよ。
理由は掴めないままではありますが。
あと別の確認ですが並び替えるシートはそのブック内の全てのシートですか?
それとも左から何枚目まで(1~20:実際のシート数は25でも)とか、後ろの何枚とか纏まってはいませんか?
もし纏まっているならシート名を指定せずインデックスNoを使ったループで出来るのですが。。。
こんばんは。
マクロの自動記録度は問題ありませんでした。
シートですが、まとまっています。
>インデックスNo.を使ったループ
→知識不足で申し訳ありません。
どのように修正すれば良いか…。
何度も申し訳ありません。
No.5
- 回答日時:
No.4です。
No.3のお礼についてです
こちらは自作PCでMicrosoftOfficeの新しいのは随分と購入してないんですよね。(主にvisualstudioなどの言語勉強とネットが目的なので)
昔やってた事から回答をしてはみましたが、最近の物がどう変わっているのかもわからないです。
ググると2007以降でSORTメソッドからSORTオブジェクトになってるみたいですし、うちに放置されているのは2003までですから実際に検証とかは無理かな。
>O列の数字の降順に並べ替えができません。。。
では昇順に並び変わるの?
それともデタラメになるの?
まず最初の範囲を手作業で並び替えたらどうなるのか?
同じように変になるのか、逆にちゃんと並び変わるのか?
ちゃんと並ぶなら
『マクロの自動記録』(名称変わっている?)
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
を使ってどのような作業コードが出来ているか?
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
で最近のバージョンをお持ちの方ならわかるかも。
もしデタラメであるなら前回の質問では数値にカンマが入ってましたけど、あれ自体はセルの書式設定と思ってますが当たってますか?
お世話になっております。
お忙しいところ何度もお手数をおかけして申し訳ございません。
>では昇順に並び変わるの?
>それともデタラメになるの?
→デタラメになります。
>まず最初の範囲を手作業で並び替えたらどうなるのか?
>同じように変になるのか、逆にちゃんと並び変わるのか?
→B5~O63選択し、「データ」→列 最優先されるキー「O列」→大きい順では降順に並べ変えられます。
>ちゃんと並ぶなら
>『マクロの自動記録』(名称変わっている?)
>http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
>を使ってどのような作業コードが出来ているか?~
※以下、省略いたします。
→記録したものが下記となります。
Sub Macro1()
Macro1 Macro
Range("B5:O63").Select
ActiveWorkbook.Worksheets("sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("sheet1").Sort.SortFields.Add2 Key:=Range _
("O5:O63"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("sheet1").Sort
.SetRange Range("B5:O63")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
>もしデタラメであるなら前回の質問では数値にカンマが入ってましたけど、あれ自体はセルの書式設定と思ってますが当たってますか?
→仰る通りはい、数字のカンマは書式設定です。
No.4
- 回答日時:
No.3です。
補足について回答します。
コードについては作成していないので推測での回答にもなりかねませんが、
>cellRange = Array("B5:P61,O61")
並べ替える基準セルって
>➁B5:P61,O5
セルO5ではないでしょうか?
なので、
cellRange = Array("B5:P61,O5")
このようになると思いますよ。
と言うよりも最初からこの部分はこうなっているのですよね?
>Q5:AE5,AD5、AF5:AU5,AT5
を Q5:AEx,AD5 AF5:AUy,AT5
xやyはその範囲での最終行に書き換えてください。(或いは全てのグループが同じ最終行になるのですかね?)
こんにちわ。
ご返信が遅れてしまい、申し訳ありません。
>>並べ替える基準セルって
>>➁B5:P61,O5
>セルO5ではないでしょうか?
>なので、
>>cellRange = Array("B5:P61,O5")
>このようになると思いますよ。
>と言うよりも最初からこの部分はこうなっているのですよね?
→仰る通り、そのようになっております。
ですが、それで検証してもO列の数字の降順に並べ替えができません。。。
他に何か原因がかんがえられますでしょうか?
本来、高木さんWIN様にお尋ねすることではないかと存じますが
もし何かアドバイスございましたらご教授頂けますと幸いです。
No.3
- 回答日時:
横入りをお許しください。
補足にあるセル範囲について実際のシートと見比べて頂ければわかるかもですが、
>➁B5:P61,O5、Q5:AE5,AD5、AF5:AU5,AT5、~
最初の並べ替えの範囲は5行目から61行目なのに対し、それ以降列は複数の範囲になってますがそもそも5行目だけしか指定していません。
推測ですけど並べ替えたいデータ範囲毎に最終行を取得する必要があるのではないでしょうか?
確かにそれとエラー内容とが一致するかは検証しきれてはいませんが、少なくとも1行を並べ替えるって点が気になるものでしたので。
試しに3グループ程実際のデータ最終行で指定し検証されてみるとか如何でしょう。
はじめまして。
ご指摘頂きましてありがとうございます。
>>➁B5:P61,O5、Q5:AE5,AD5、AF5:AU5,AT5、~
→ご指摘の通りですね。初歩的な間違い、大変失礼いたしました。
一度その部分を修正し、再度検証してみたいと思います。
No.2
- 回答日時:
No1です
>下記、エラーが出てしまいました。
>実行時エラー’1004’
>並べ替えの参照が正しくありません。参照が並べ替えるデータ内にあるこ>とと[最優先されるキー]ボックスが空白でないことを確認してください。
意味は、メッセージの通りでしょうから、
・指定したキーとする列が、指定範囲の外にある
・指定したキー列の値が空白である
などに該当するような、不合理な設定をなさっているものと推測されます。
データが空白である可能性が存在するなどであるなら、並べ替え前に、可能な範囲でチェックを行うようにしておく方が良いかも知れませんね。
補足で挙げられている②のデータは、最初のひとつ以外は意味をなしていませんけれど・・・???
何度もご教授頂きましてありがとうございます。
エラーについては再度、確認してみます。
>データが空白である可能性が存在するなどであるなら、並べ替え前に、可能な範囲でチェックを行うようにしておく方が良いかも知れませんね。
→アドバイス頂きましてありがとうございます。
>補足で挙げられている②のデータは、最初のひとつ以外は意味をなしていませんけれど・・・???
→「B5:P61,O5」のみ有効ということでしょうか?
>sheet1~sheet3の複数シートを対象とし
>B5からP61のO列をキー、Q5~AE5のAD列をキー、AF5~AU5のAT列をキーとして降順>に並べ替えをしたいです。
→私の説明不足で申し訳ありません。
上記質問で、出したい結果が下記としたいのです。
B5からP61のO列をキーで並べ替え(O列が数量の達成額なのでその降順並べ替え)
Q5~AE5のAD列をキーで並べ替え(AD列が売上の達成額なのでその降順で並べ替え)
AF5~AU5のAT列をキーで並べ替え(AT列が粗利の達成額なのでその降順で並べ替え)
なので、それぞれで並べ替えが必要になってきます。
こういった条件では並び替えは難しいでしょうか?
知識不足で申し訳ございません。
No.1
- 回答日時:
こんにちは
何となく規則性がありそうだけれど、はっきりとはしないので、配列に定義しておいて、それを参照しながらループする方法での例です。
また、ご質問文中の
>Q5~AE5のAD列をキー、AF5~AU5のAT列をキー
部分は、間違えだとは思いますが、ひとまずそのままにしてあります。
Sub Sample()
Dim shts, cellRange
Dim sh As Long, rg As Long, ary
shts = Array("Sheet1", "Sheet2", "Sheet3")
cellRange = Array("B5:O61,O5", "Q5:AE5,AD5", "AF5:AU5,AT5")
For sh = LBound(shts) To UBound(shts)
For rg = LBound(cellRange) To UBound(cellRange)
ary = Split(cellRange(rg), ",")
Worksheets(shts(sh)).Range(ary(0)).Sort _
Key1:=Worksheets(shts(sh)).Range(ary(1)), order1:=xlDescending
Next rg
Next sh
End Sub
こんにちわ。
今回もご教授頂きましてありがとうございます。
>>Q5~AE5のAD列をキー、AF5~AU5のAT列をキー
>部分は、間違えだとは思いますが、ひとまずそのままにしてあります。
→大変失礼いたしました。
本来、対象範囲の1列前をキーとしたい為、「B5からO61のO列をキー」が誤っており
正しくは「B5からP61のO列をキー」となります。
記載間違い、ご指摘頂きましてありがとうございます。
ただ、その条件ではない対象範囲(対象列数が不規則な為)もある為
ご教授頂きましたマクロを私の環境に当てはめて、修正しました。
そのマクロで実行しましたところ下記、エラーが出てしまいました。
実行時エラー’1004’
並べ替えの参照が正しくありません。参照が並べ替えるデータ内にあることと[最優先されるキー]ボックスが空白でないことを確認してください。
文字数制限がある為、修正しましたモジュールは補足に記載させて頂きます。
恐れ入りますが、再度ご教授頂けますと幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelでの並べ替えを全シートまとめて処理したい
Excel(エクセル)
-
【マクロ】複数シートのデータを自動で並び替えしたい
Excel(エクセル)
-
マクロで並べ替えを複数のシートそれぞれに行う方法を教えてください
Excel(エクセル)
-
-
4
マクロを複数シートに実行するには?
Excel(エクセル)
-
5
VBAの初心者なのですが、「並び替え」ができません。どなかご指導をお願いします。
Visual Basic(VBA)
-
6
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
7
エクセルの複数のワークシートを名前順で並べ替えたい
Excel(エクセル)
-
8
エクセルの2つのシートを並び替えで連動させる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel、複数シート同セルを別シ...
-
【再質問】【マクロ】複数シー...
-
Excelにて、ユーザーフォームで...
-
エクセルで文字が白くなる
-
エクセルで長い行を5行ごとに1...
-
エクセルの主軸と第2軸の0を合...
-
エクセルで円グラフに引き出し...
-
エクセル条件付書式で指定の時...
-
エクセルで文字を含む式に、カ...
-
フィルタをしても最下行を常に...
-
同一セルに日時があるものを日...
-
Excelで、空白を表示したい
-
excelのマクロで該当処理できな...
-
EXCELの散布図で日付が1900年に...
-
アクセスで#エラーを表示させ...
-
特定の文字を含むシートだけマ...
-
エクセルのグラフ作成時に、折...
-
【エクセル】区切り文字が含ま...
-
【マクロ】並び替えの範囲が、...
-
エクセルで、時間 0:00を表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelにて、ユーザーフォームで...
-
Excel、複数シート同セルを別シ...
-
indirect 関数を使った複数シー...
-
【再質問】【マクロ】複数シー...
-
Openoffice calc で複雑な入力...
-
別シートに毎回異なるデータを...
-
エクセルの関数について : CHOO...
-
vba SUMIF関数で合計を出す
-
エクセルの関数で
-
エクセル VBA ユーザフォーム ...
-
複数のシートのデータを1つの条...
-
エクセルで三つの条件での参照...
-
excelの表を複数条件でカウント...
-
Excelの操作方法
-
excel
-
エクセルで条件に一致した別の...
-
エクセルで文字を含む式に、カ...
-
エクセルで円グラフに引き出し...
-
エクセルで文字が白くなる
-
エクセルで長い行を5行ごとに1...
おすすめ情報
シートと参照先を増やしてしまったことが原因でしょうか?
下記にて修正したモジュールを記載いたします。
↓
ご教授頂きましたモジュール
①shts = Array~以降
➁cellRange = Array~以降
①2018.10月~2019.9月、第一四半期、第二四半期、第三四半期、第四四半期、上四半期、下四半期、年間
➁B5:P61,O5、Q5:AE5,AD5、AF5:AU5,AT5、AV5:BJ5,BI5、BK5:BZ5,BY5、CA5:CO5,CN5
CP5:DE5,DO5、DF5:DM5,DM5、DN5:EC5,EB5、ED5:ES5,ER5、ET5:FI5,FH5
FJ5:FY5,FX5、FZ5:GO5,GN5、GP5:HD5,HC5"、HE5:HT5,HS5、AF5:AU5,AT5
知識不足で申し訳ございませんが
何卒、ご教授願います。
ご教授頂きましてありがとうございました。
ご教授頂きました内容ですが、私の解釈が間違っていたら申し訳ありません。
下記に修正という認識でしたが、修正マクロを実行したのですが
並び順がとびとびになってしまい、降順で並べ替えになりませんでした。。。
何が原因でしょうか?
★修正後マクロ
cellRange = Array("B5:P61,O61")
何度も申し訳ございませんが、何卒ご教授願います。