以下のコードを実行しても
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も見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excelのマクロでソートがうまく動かない
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
VBA ソートすると、1、11、2,3になって・・
Excel(エクセル)
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
7
VBAにて 文字と数字が混在してるデータの並び替え
Excel(エクセル)
-
8
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
9
VBAで文字列を数値に変換したい
Excel(エクセル)
-
10
VBA エラーと対策
Excel(エクセル)
-
11
数値に見えるものはすべて数値として並べ替えを行う
Excel(エクセル)
-
12
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
13
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
14
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
15
エクセル 日付による並べ替えのマクロ
Excel(エクセル)
-
16
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
17
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
18
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
19
エクセルのピボットテーブルの書式設定が、データ更新のたびに元に戻る
Excel(エクセル)
-
20
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
白血球が多いとどんな心配があ...
-
リンク先のファイルを開かなく...
-
EXCELで式からグラフを描くには?
-
2つの数値のうち、数値が小さい...
-
エクセルで数式の答えを数値と...
-
小数点以下を繰り上げたものを...
-
エクセル指定した範囲からラン...
-
EXCELで条件付き書式で空白セル...
-
化合物のモル吸光係数データベ...
-
エクセルのラベルの値(文字列...
-
勃起する時って痛いんですか? ...
-
ワードのページ番号をもっと下...
-
【Excelで「正弦波」のグラフを...
-
精液の落とし方を教えてください
-
検便についてです。 便は取れた...
-
excelのIF関数 A,Bの大きいほ...
-
WORDで複数語句を検索するには
-
風俗店へ行く前のご飯
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
精液の落とし方を教えてください
-
勃起する時って痛いんですか? ...
-
2つの数値のうち、数値が小さい...
-
エクセル指定した範囲からラン...
-
エクセルで数式の答えを数値と...
-
これって喉仏ですか? 私は女性...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
EXCELで式からグラフを描くには?
-
イタリアから帰国する際、肉製...
-
エクセルのラベルの値(文字列...
-
Excel 0目標に対して数字があ...
-
ある範囲のセルから任意の値を...
-
風俗店へ行く前のご飯
-
リンク先のファイルを開かなく...
-
甲状腺が腫れているが血液検査...
おすすめ情報
Private Sub worksheet_activate()
の中で記述しています。
試しに同じコードを2回書いても結果は同じでした。