
以下のコードを実行しても
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(エクセル)
-
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
エクセル マクロ 範囲指定で、データの最終行・最終列を取得したい
Excel(エクセル)
-
8
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
9
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
10
VBAで文字列を数値に変換したい
Excel(エクセル)
-
11
VBAにて 文字と数字が混在してるデータの並び替え
Excel(エクセル)
-
12
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
15
数値に見えるものはすべて数値として並べ替えを行う
Excel(エクセル)
-
16
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
17
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
18
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
19
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
20
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
2つの数値のうち、数値が小さい...
-
エクセルで数式の答えを数値と...
-
エクセル指定した範囲からラン...
-
VLOOKUP関数を使用時、検索する...
-
一番多く表示のある値(文字列...
-
値が入っているときだけ計算結...
-
MIN関数で空白セルを無視したい...
-
ある範囲のセルから任意の値を...
-
エクセルで空白セルを含む列の...
-
エクセルのラベルの値(文字列...
-
爪が紫色?
-
健否~書類の書き方~
-
EXCELで条件付き書式で空白セル...
-
彼女のことが好きすぎて彼女の...
-
納豆食べた後の尿の納豆臭は何故?
-
エクセルでエラーが出て困って...
-
ワードのページ番号をもっと下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
EXCELで条件付き書式で空白セル...
-
爪が紫色?
-
ワードのページ番号をもっと下...
-
エクセル指定した範囲からラン...
-
VLOOKUP関数を使用時、検索する...
-
2つの数値のうち、数値が小さい...
-
小数点以下を繰り上げたものを...
-
EXCELで式からグラフを描くには?
-
風俗店へ行く前のご飯
-
リンク先のファイルを開かなく...
-
エクセルで数式の答えを数値と...
-
勃起する時って痛いんですか? ...
-
値が入っているときだけ計算結...
-
MIN関数で空白セルを無視したい...
-
精子に血が・・・
-
一番多く表示のある値(文字列...
-
エクセルのラベルの値(文字列...
-
白血球が多いとどんな心配があ...
おすすめ情報
Private Sub worksheet_activate()
の中で記述しています。
試しに同じコードを2回書いても結果は同じでした。