
以下のコードを実行しても
With Worksheets("賞味期限管理").Sort
With .SortFields
.Clear
.add Key:=Worksheets("賞味期限管理").Range("D1"), Order:=xlAscending
.add Key:=Worksheets("賞味期限管理").Range("B1"), Order:=xlAscending
.add Key:=Worksheets("賞味期限管理").Range("C1"), Order:=xlAscending
End With
.SetRange Worksheets("賞味期限管理").Range("A5:D" & locate - 1)
.Apply
End With
1回目ではソートが上手くいかず、2回目で正しくソートされます。以降、上手くいかず、正しくソート、を繰り返します。
何が原因かわかりません。
試しに"マクロの記録"でExcel上にてソート設定して実行したものに置き換えて実行してみましたが結果が同じでした。
何卒ご教示願います。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは
>B~D列はA列をKeyにVlookupで持ってきた値なので、その辺が影響してるかもしれません。
どんな式なのか分かりませんけど
単純なVLOOKUPなら Key以外 絶対参照になっていれば、Sortの結果(A列Keyも条件でソートされている)をA列Keyで再計算されるので問題ないのではないでしょう。
Worksheet_Activate内でA列セル値取得マクロは実行されているのでしょうか?
実行されていれば、.SetRange Range("A5:D" & locate - 1) で良いのかも知れませんが、違うなら
Keyのある列で
locate = Cells(Rows.Count, "A").End(xlUp).Row
With Sort
・
・
.SetRange Worksheets("賞味期限管理").Range("A5:D" & locate)
.Apply
ですね。
>1回目ではソートが上手くいかず、2回目で正しくソートされます。
これは、謎のままですけれど。。
Worksheet_Activate内で他のシートを選択などしていたりして、、、
内容が解らないので適当になりますが、
対策として想像できるものすべて処理前と後処理を入れてみては?
例えば、Application.EnableEvents
Sort以外に問題がありそうなので、ウォッチやステップ実行などで確認しながら実行すれば解決出来そうな気がしますね。
根気よく回答いただきありがとうございます。
自分もVLOOKUPの参照Keyも一緒にソートされるので問題ないと思っていたのですが、結果を先に言えば、A列をマクロで引っ張ってくるときに、B~D列も一緒に引っ張ってきて、固定値にしたら解決しました。マクロがわかる人間が自分しかいないため、なるべくExcelの関数でやってほしいと頼まれていた事がネックになりました。
また、B~D列をソートKeyにしている場合A列のみソートするということもできなかったため、思い切って関数取っ払ってマクロで直接値を入れました。
1回目はソートされるが2回目がソートされない原因は解らずじまいでしたが、やはりVLOOKUPのソートに原因があったようです。
本当にありがとうございました!!
No.2
- 回答日時:
>add Key:=Range("D5")~ とすべきですかね?
いいえ、Range("D1")で良いのでは無いかと、、値しだいのところもあるかも、、#1のコードで上手くいかない、、、?
>locateには他の表のデータをループして参照し、
>合致したデータをcaells(locate, 1)に書き込んでいます。書き込んだ後にlocate+1してますので、
このlocate変数 グローバル変数?それともstatic?
範囲を決めるのであれば、D列最終行なのだけれど、、デバッグして値を確かめるべきかと、思います。
End With
debug.print locate '期待する行数(値)ですか?
’又はMsgbox locate
.SetRange Worksheets("賞味期限管理").Range("A5:D" & locate - 1)
.Apply
再度ありがとうございます。
staticですが、試しに”A5:D1000”と固定値でやってみましたが同じでした。(D100までデータが入っていることを確認)
しかしながら少し原因が見えてきました。
A列はマクロで他シートから持ってきた値ですが、B~D列はA列をKeyにVlookupで持ってきた値なので、その辺が影響してるかもしれません。
No.1
- 回答日時:
こんにちは
原因がどこにあるか、、よくわかりませんが、
locateに原因があるのかも、、デバッグして値を調べてみては?
locateって何を指しているのでしょうか?どのように値を代入しているの?
最終行にSUMなどが入っていて、その手前を意味しているのでしょうか。
-1しているので、
locate = Cells(Rows.Count, "D").End(xlUp).Row
これかな?
関係ないかもしれませんが、1行目は何が入っているのでしょう。対象は5行目からのようですが、、
Private Sub worksheet_activate()
Worksheets("賞味期限管理")のモジュールに書いているのですかね
参考になるか分かりませんけど、
Worksheets("賞味期限管理")のモジュールとしてまとめると、、
Private Sub Worksheet_Activate()
Dim locate As Long
locate = Cells(Rows.Count, "D").End(xlUp).Row - 1
With Sort
With .SortFields
.Clear
.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending
.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending
.Add Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending
End With
.SetRange Range("A5:D" & locate)
.Apply
End With
End Sub
Sort Range Cells は ActiveSheetが省略されています。
機能しないと言う事で一応、値でソートしています。
Order:=xlAscendingもデフォルトなので要らない?かな。。
さっそくのご回答ありがとうございます。
賞味期限管理のモジュールに記載しています。
表が5行目から(項目名は4行目)なので対象が5行目からとなっています。
locateには他の表のデータをループして参照し、合致したデータをcaells(locate, 1)に書き込んでいます。書き込んだ後にlocate+1してますので、最終的にlocate-1が最終行になります。(デフォルトは当然5)
データはきちんと記載されているので問題ないかと思います。
add Key:=Range("D5")~ とすべきですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) 複数条件のオートフィルタ(VBA) 2 2022/12/09 15:40
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelのマクロでソートがうまく動かない
Excel(エクセル)
-
VBA ソートすると、1、11、2,3になって・・
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
VBA エラーと対策
Excel(エクセル)
-
7
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
8
VBAで文字列を数値に変換したい
Excel(エクセル)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
Excelで ソートすると同じ項目が全く別の位置に並んでしまうのはなぜ?
Excel(エクセル)
-
11
VBAにて 文字と数字が混在してるデータの並び替え
Excel(エクセル)
-
12
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
13
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
数値に見えるものはすべて数値として並べ替えを行う
Excel(エクセル)
-
16
エクセル マクロ 範囲指定で、データの最終行・最終列を取得したい
Excel(エクセル)
-
17
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
18
エクセルVBA 最終行を選んで並び替え (空白セルを一番上に表示したい)
Excel(エクセル)
-
19
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
精液の落とし方を教えてください
-
イタリアから帰国する際、肉製...
-
精子に血が・・・
-
最近、飲酒すると手のひらが真...
-
勃起する時って痛いんですか? ...
-
エクセルで空白セルを含む列の...
-
【Excelで「正弦波」のグラフを...
-
EXCELで条件付き書式で空白セル...
-
値が入っているときだけ計算結...
-
検便を取ったのですが、棒から...
-
テスターで断線を調べる方法教...
-
EXCELで式からグラフを描くには?
-
「Q.C. PASSED」とは?
-
MIN関数で空白セルを無視したい...
-
エクセルの値を元に図形の色を...
-
アクエリアスが苦く感じる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
尿検査の前日は自慰控えたほう...
-
MIN関数で空白セルを無視したい...
-
小数点以下を繰り上げたものを...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
【Excelで「正弦波」のグラフを...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
ある範囲のセルから任意の値を...
おすすめ情報
Private Sub worksheet_activate()
の中で記述しています。
試しに同じコードを2回書いても結果は同じでした。