- 締切済み
エクセルマクロで並び替えが2つのグループになってしまった
マクロでシート1からシート2に別レイアウトを作ってソートしました。 前ゼロ有りの3桁数字なのでセルは文字列です。 ところが500件中30件ほどが文字列扱いされず前半の集団、残りが文字列(左上隅に緑の三角マーク)として後半の集団と泣き別れてしまいました。 もともと文字列のセルから移しているので両者の違いはさっぱりわかりません。 Range("C" & CNT).NumberFormatlocal = @ ’書式変更 Range("C" & CNT) = WorkSheets(1).Range("A" & CNT) ’転送 CNTは処理上のカウンターです。 全行編集後に Range("A1:H" & CNT).Sort Key1:=Range("C1"), Header:=xlGuess おかしな30件は左詰表示ですがF2を押すとなぜか右詰になり エンターキーで初めて左上隅に緑の三角マークが出ます。 手入力で試すと 「標準書式に数値入力」数値が右詰表示 「文字列に書式設定変更」→ 左詰表示に変わるが文字列ではない。 (この状態と同じだと思います。) クリックやF2でアクションを加えてやるとやっと文字列になるというのも同じです。 マクロでは文字列書式にしてから転送しているのにどうして上記と同じ現象になるのでしょうか。 直し方もしくは何らかアクションを加えてやるにはどうしたらよいでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
>30件は左隅に三角マークが無く「左詰表示だが文字列ではない。」 セルの表示形式はどうなってますか? 場合によっては、元シートのA列の書式変更をしてから実行してみては?(表示形式:文字列)
- n-jun
- ベストアンサー率33% (959/2873)
With Range("C" & CNT) .NumberFormatlocal = "@" ’書式変更 .Value = WorkSheets(1).Range("A" & CNT).Value ’転送 .Value = .Value End With とかにしてみるとか?
補足
回答ありがとうございます。 VALUEでの置き換えを試してみましたが変わらずでした。 なお30件と他の違いがわかりました。 転送元のシート1のA列は文字列書式になってましたが 30件は左隅に三角マークが無く「左詰表示だが文字列ではない。」 状態で、そのままシート2に転送されていました。 他は三角マーク付きでした。
お礼
回答ありがとうございます。 >セルの表示形式はどうなってますか? 場合によっては、元シートのA列の書式変更をしてから実行してみては?(表示形式:文字列) 転送元のA列は文字列ですが、その内30件はもともと 左隅に三角マークが無く「左詰表示だがF2を押してみると 右詰に変わる」状態でした。 いくら転送先を文字列にしておいてもその中途半端な状態の ままで転送されるようです。 とりあえずRange("C" & CNT) = "'" & WorkSheets(1).Range("A" & CNT) にしたら明示的に文字列になったので これでやってみます。