

いつも大変お世話になります。初心者です。
長文で申し訳ありませんが、私の間違いについてご指導をお願いします。(Excel2003)
並び替えについて訳が分からなくなってしまいました。現状は、
・A2セル=1月、A3=2月、A4=3月、A5=合計
・B1セル=札幌、C1=東京、D1=名古屋、E1=大阪
・B2:E4 は売上金額です。
・B5 は、SUM(B2:B4) です。C5~E5も同様です。
※売上合計は多い順に、東京、大阪、名古屋、札幌です。
この表の合計金額を並び替えをしたいと思い、以下を書いてみました。
左から順に、売上合計の多い支社順に、並ばせようとしました。
Cells(1, 1).CurrentRegion.Sort _
key1:=Cells(5, 1), order1:=xlDescending, Orientation:=xlSortColumns, header:=xlYes
【甲】 すると全く意図した形ではない並び替えが実行されてしまいました。
(なぜか行が入れ替わり、列は変わらず。)
【乙】 しかし、上のOrientationを、xlSortRows に変えてやってみると、意図した通りに並び替えられました。
【丙】 また、Order1:=xlAscending, Orientation:=xlSortRows でやってみると、列の並び替えは実施されますが、
月の見出し列(A1~A5)が一番右に移動してしまいます。
--------------------------------------------------------------------------
その後いろいろ調べたり、試行したりしたのですが疑問が山積してしまいました。
基礎的な話かもしれませんが、上記の例で、「列方向に、合計金額を基準に、正しく降順・昇順並び替え」をしたいと思っています。
【質問1】Sortメソッドのヘルプで見ると、Orientation の説明に、xlSortRows,xlSortColumnsの説明がありますが、
行方向、列方向、どうしても実際の動きと逆な気がしてなりません。
私の勘違いでしょうか。
【質問2】マクロの自動記録時に気づいたのですが、Orientation の設定に、xlLeftToRight や、xlTopToBottom というのが使われていました。
これらと xlSortRows, xlSortColumns の違いはありますか。
【質問3】列方向への並び替えの際には、Headerの設定をするのは無意味ですか?
上記(丙)のパターンで、xlGuess でも、xlYes 、xlNo でも全く動きは変わらず、月の見出し列が最右に移動しました。
【質問4】上の(丙)のパターンで正しく動かす為には、Sort の対象となる範囲を、B列以降にする必要があるのでしょうか。
----------------------------------------------------------------------------
分かりにくい箇所もあったかと思いますが、ご指摘いただければ補足させていただきます。
なお、「そんな簡単な表だったら、手で作業したら?」ということではなく、後学のために知っておきたいので質問させていただきました。
なにぶん勉強中なため見当外れの質問もあるかもしれませんが、なにとぞご教示よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
こんにちは。
今、追って調べてみました。
英文も調べてみましたが、英文の元も同様になっているようで、列挙型で指定してみましたが、それでも違うようです。どうやら、Helpの内容自体が間違っているようですね。
#4で
# 違う言語範囲の中に、別の組み込み定数があるから、このように出るのだと思います。
と、書いたように、データ型を列挙型で指定してみますと、
このように指定します。
Dim xlSortOrder1 As XlSortOrder
Dim xlSortOrientation1 As XlSortOrientation
xlSortOrder1 = xlAscending
xlSortOrientation1 = xlSortRows
これでマクロを実行してみると、違っています。
VS 2005のヘルプの英文側に、
名前空間: Microsoft.Office.Tools.Excel
アセンブリ: Microsoft.Office.Tools.Excel (microsoft.office.tools.excel.dll 内)
Member name Description
xlSortColumns Sorts by column.
xlSortRows default. Sorts by row.
となっています。この列挙型の定数は C++,C#, J# とは、整合性は合うようですが、どうやら、Excel内部で縦横が入れ違うようです。
私は、Excel 2002 を持ちませんが、他は、以下のようになっていました。
オブジェクト・ブラウザ で見ると、xlSortRows, xlSortColumns は、単に Constant になっていましたから、Excel独自に存在しているようです。
Help の内容です。
Excel 2003
: Orientation 省略可能です。バリアント型 ( Variant ) の値を使用します。
: xlSortRows (既定値) 行単位で並べ替えます。
: xlSortColumns 列単位で並べ替えます。
Excel2000
: Orientation 省略可能です。バリアント型 ( Variant ) の値を使用します。
xlSortRows を指定すると、上から下に並べ替えます (行の並べ替え)。
xlSortColumn を指定すると、左から右に並べ替えます (列の並べ替え)。
-------------------------------
Excel 97
Orientation 省略可能です。バリアント型 (Variant) の値を指定します。
xlTopToBottom を指定すると、上から下へ並べ替えます (行の並べ替え)。
xlLeftToRight を指定すると、左から右へ並べ替えます (列の並べ替え)。
Excel 5
orientation 省略可能です。
xlTopToBottom を指定するか指定を省略すると、上から下に並べ替えます (行の並べ替え)。xlLeftToRight を指定すると、左から右へ並べ替えます (列の並べ替え)。
ただ、実際に、行と列を両方行うようなコードの場合は、以下のように、数値で行うか、定数を改めて作るかのほうが安全かもしれません。
可読性ではなく、誤読性になってしまいますからね。(^^;
Dim flg As Integer
flg = 2 '降順 =2 '昇順 =1
再々度のご回答本当に有難うございます。
また非常にたくさんお調べいただきまして申し訳ありません。
>どうやら、Helpの内容自体が間違っているようですね。
すっきりいたしました。ずっと悩んでいましたので。
6番でのご回答内容は、大変恐縮ながら、初心者の私には全て理解できたわけではないのですが、一連のご回答は大変勉強となりました。
まだまだ知らない事だらけではありますが勉強を続けて行きたいと思います。
大変お世話になり有難うございました!
No.5
- 回答日時:
#3です。
ヘルプの説明はあっていませんね。
下記のようになるべきですね。
xlSortRows 列単位で並べ替えます。
xlSortColumns (既定値) 行単位で並べ替えます。
>xlSortRows は、xlLeftToRight に。 xlSortColumns は、xlTopToBottom に対応するようなのです。
xlSortColumns=1,xlTopToBottom=1
xlSortRows=2,xlLeftToRight=2
だから、ご指摘のとおりです。
すみませんでした。
再度のご回答まことに有難うございます。
>ヘルプの説明はあっていませんね。
安心しました。何度考えても、逆ではないか、と悶々としていましたので(笑)。
勉強になりました。そしてすっきりしました。
有難うございます!
No.4
- 回答日時:
こんにちは。
#2の回答者です。
>【質問2】マクロの自動記録時に気づいたのですが、Orientation の設定に、>xlLeftToRight や、xlTopToBottom というのが使われていました。
>これらと xlSortRows, xlSortColumns の違いはありますか。
今、調べてみましたが、記録マクロに出てくるその組み込み定数は、定数の内部の数値は変わりませんが、たぶん、この食い違いは、開発途中か、違う言語範囲の中に、別の組み込み定数があるから、このように出るのだと思います。今の段階では、Sort メソッドではなく、SortSpecial メソッド側の組み込み定数のものようです。こういう入れ違いはいくつかあるようです。
なお、前言の
# XL2000と共有しない部分のみです。
ということで調べると、以下が共有しない部分でした。
DataOption1:=xlSortNormal
ただ、理屈はともかくとして、こういうものは、記録マクロを越えることはないと思いますね。単に、並べ替えの範囲を取る技術さえ押さえておけばよろしいかと思います。
再度のご回答まことに有難うございます。
XL2000と共有しない部分、について、調べても分からなかったので助かりました。
いずれにしても、省略はだめですね。
今回は範囲を指定しなおすことが分かり、役立ちました。
有難うございました。
No.3
- 回答日時:
まず、行単位の並べ替えと列単位の並べ替えではいくらか操作が違います。
Excelでは行単位の並べ替えが基準のようになっています。列単位の並べ替えで指定できるのは、手動で並べ替えるときと同じで、header行などは決めてくれませんから、データ範囲だけを指定することになります。わたしは混乱したことがないのですが・・・。
【質問1】
ヘルプの説明です。
xlSortRows (既定値) 行単位で並べ替えます。
xlSortColumns 列単位で並べ替えます。
「行単位」ということは、行でまとまってということで、1つの行の中のセルはばらばらにならないということです。それで並べ替えるのだから、行単位で入れ替わって上から下に並び変わるのです。
「列単位」も同様です。
【質問2】
特にいうことはありませんが、違いはないと思います。
【質問3】
無意味のようです。列単位の並べ替えのとき、headerの指定はできません。データ範囲を選択します。
もし、行単位の並べ替えのようにしたいなら、1度行列を入れ替えて並べ替え、もう1度行列を入れ替えるしかないようです。
【質問4】
【質問3】が答えです。
ご回答有難うございます。
私も仰るとおりの理解でした。「行単位」というのは、上から下へ。
「列単位」は左から右へ。
でも、やはり、どうもあべこべのようなのです。
以下URLにも、その記述がありました。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
-----------------------------------------------------------
xlSortColumns 列単位で並び替え ←行方向の並び替えになります
xlSortRows 行単位で並び替え ←列方向の並び替えになります
日本語では逆のような気がします(分かりづらい)
---------------------------------------------------------
といった記述です。私が感じたのも上記のことでした。
したがって、
xlSortRows は、xlLeftToRight に。 xlSortColumns は、xlTopToBottom に対応するようなのです。
私も最初信じがたかったのですがどうもそのようです。
もしお手すきでしたら一度簡単な例でお試しになってみてください。
どうもありがとうございました。
No.2
- 回答日時:
こんばんは。
基本的なことですが、記録マクロで取ったにしろ、そういう自分流はダメなのです。もっとも入門者から初心者に入った段階で、省略したらよいとか書かれてあるので、そういうように書いて、うまく行かなくなるケースが多いのです。省略する意味を良く理解してください。Sort メソッドで省略してよいのは、XL2000と共有しない部分のみです。これは、Findメソッドも同様です。
質問1と質問2 の場合は、コードのオプションが抜けてしまっています。
質問3と質問4は、コードを参照してください。直接範囲を指定しますので、タイトル行は xlNo です。
Sample は、標準モジュールが良いです。
Sub TestMacro1()
'列の合計欄で並べ替える
Dim rng As Range
Dim flg As Integer
flg = 2 '降順 =2 '昇順 =1
'左端上のセルを指定する --A1
With Range("A1").CurrentRegion
Set rng = .Offset(, 1).Resize(, .Columns.Count - 1)
End With
With rng
.Sort Key1:=.Range("A5"), _
Order1:=flg, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlLeftToRight, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
End With
Set rng = Nothing
End Sub
ご回答有難うございます。
大変勉強になりました。
Sortメソッドのヘルプにもきちんと書いてありました。
「省略も可能だが、省略した場合は前回の設定をそのまま引き継ぐ」と。
だから、間違いをなくす為にも明示しなければならないのですね。
ご指摘の通り、Findメソッドや、Replaceメソッドでもそのようですね。
また、Sampleも大変参考となりました。範囲を取り直すようにします。
有難うございました。
No.1
- 回答日時:
Orientation:=xlSortColumns
を
Orientation:=xlLeftToRight
にしたらどうでしょうか?
これはマクロの記録で、手動で列方向に並べ替えた場合の値です。
なぜxlSortColumnsとxlSortRowsでおかしくなるのか?
探したら、「バグだ」という話がありました。
http://www.keep-on.com/excelyou/2000lng4/200007/ …
ご回答有難うございます。
そうですね、混同の無いようにこれからは、xlLeftToRight と、xlTopToBottomを活用したいと思います。
それにしても、xlSortColumns と xlSortRows のヘルプはおかしいと思うんですよね・・・。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルvba 一つ上の行を指定...
-
エクセルで一部除外した数字を...
-
EXCEL 指定した曜日に番号を振...
-
桁数が混在する並び替えの方法
-
エクセルで列内の同じIDの商品...
-
エクセルで同じ名前ごとの合計...
-
エクセルマクロでA欄に値があ...
-
エクセル マクロで列を連続し...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルVBA Unionはなぜ遅い?
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
たくさん作った同じ設定のグラ...
-
エクセルでグラフタイトルが折...
-
日付が1年以内になると他のセル...
-
エクセルにおける、グラフの指...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルVBA Unionはなぜ遅い?
-
エクセルで一部除外した数字を...
-
エクセルvba 一つ上の行を指定...
-
ExcelVBA:列方向の並び替え O...
-
エクセルの関数SUBSTITUTEを、...
-
エクセルで2列を検索し2列とも...
-
エクセル VLOOKUPが反映されない
-
エクセルで列内の同じIDの商品...
-
エクセル マクロで列を連続し...
-
Excelで自動的に並べ替えなんて...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで同じ名前ごとの合計...
-
ビンゴ用抽選番号を作りたいのです
-
EXCEL 指定した曜日に番号を振...
-
VBAでFormula関数を使ってVlook...
-
エクセル 並び替え
-
エクセルマクロでA欄に値があ...
-
EXCELである列を上から順にチェ...
おすすめ情報