[[20221206084541]] 『ファイルが壊れる原因がわかりません』(白音) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイルが壊れる原因がわかりません』(白音)

エクセルファイルを保存し、次に開くとエラーが表示されます。
メッセージは以下の通り
「〜の一部の内容に問題が見つかりました。可能な限り〜」

なにがおかしいか調べてみると

  〜
  .Header = xlYes
  〜

この行があるなしでエラーの発生が変わりました。
で、調べてみると、以下のページに回答があるのですが

https://answers.microsoft.com/ja-jp/msoffice/forum/all/%EF%BD%96%EF%BD%82%EF%BD%81%E3%81%A7%E3%82%B7/bc646718-2c22-41c7-8773-0537e305130f?page=2&messageId=9585af14-91df-4e6e-b642-b66a7289386f

ここで
>並べ替えにおいてKeyによる優先順位の列を重複させると、
>この現象が再現することが判明しました。

とあるのですが、Keyは何を指すのでしょうか?
ソートを行う列のセルでしょうか?
優先順位の重複とはどういうことでしょうか?
理解できている人にはわかるのでしょうけど
私にはまったく理解できませんでした。

    :
Dim srowno As Long: srowno = ActiveWindow.SplitRow + 1
    :
With SheetD.Sort

    .SetRange Range("A" & srowno - 1 & ":G" & erowno - 1)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
    :

.Header = xlYes この行を削除すると
エラーは出なくなりますが、
1行目のヘッダー部分が最下行に移動されて
表示してしまいます。

どのように対処すればよいのでしょうか?
上記ページを見たところ一種のバグなので
どうすることもできないとなっていますが
あきらめるしかないのでしょうか?

< 使用 Excel:Excel2016mac、使用 OS:Windows10 >


 見出し行内で見出しが同じものがないだろうか?

 例えば
 科目 科目 金額
 とか。

 もしあれば
 科目1 科目2 金額
 と異なるようにしてみてはどうだろうか?
(ねむねむ) 2022/12/06(火) 09:27:59

ありがとうございます。

1行目が見出しになっていると思うのですが
1行目のセルで同じものはありません。

(白音) 2022/12/06(火) 10:34:15


ソートに関連していそうで以下の行が
上記 With の前にありました。

SheetDetail.Range("A" & srowno & ":G" & erowno - 1).Select
SheetDetail.Sort.SortFields.Clear
SheetDetail.Sort.SortFields.Add Key:=Range("G" & srowno & ":G" & erowno - 1), _

    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

多分ソートのキーとなるのはG列だけだと思います。
(白音) 2022/12/06(火) 10:38:43


 つかぬ事をお聞きしますが、このプログラムの目的は何ですか?

 この文の意味と関連させてご説明いただきたいです。
    ↓
 srowno = ActiveWindow.SplitRow + 1

 あと、SheetDとSheetDetailの2種類のシートがあるようですが、本当ですか?

(半平太) 2022/12/06(火) 11:15:35


最初の SheetDと SheetDetail は厳密には違いますが同じです。
もともとSheetDetail を使っていますが、原因を探るために
デバッグするのにSheetDを作成しました。

説明しにくいのですが
A列はグループの名前が入っています。
A列の順番は現状のままでソートをかけたいので

for文を使用して各グループの
srowno (現在のグループの開始行) erowno(現在のグループの終了行)をもとめて
グループごと(srowno〜erowno)でソートの処理を行っています。

 srowno = ActiveWindow.SplitRow + 1
これはループを回すためのデータの開始位置になります。

(白音) 2022/12/06(火) 11:41:56


 実態がよく分からないでが、
 目的からすると、以下の2箇所を変更、でどうでしょうか?

 >SheetDetail.Sort.SortFields.Add Key:=Range("G" & srowno & ":G" & erowno - 1), _
 >    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  ↓
  SheetD.Sort.SortFields.Add Key:=SheetD.Range("G1"), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

 >With SheetD.Sort
 >    .SetRange Range("A" & srowno - 1 & ":G" & erowno - 1)
 >    .Header = xlYes
  ↓
   With SheetD.Sort
       .SetRange Range("A" & srowno & ":G" & erowno - 1)
       .Header = xlNo

 結果如何に関わらず、私はここまでとします。

(半平太) 2022/12/06(火) 13:11:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.