- ベストアンサー
VBAで文字を入力したら並べ替えがおかしくなった
VBAでエクセルの表に文字を入力したらその入力した列での並べ替えがおかしくなってしまいました。入力する前は、文字の読みの順に並べられたのに、入力した後は、カタカナが先になって、漢字が後になってしまいました。並べ替えのしくみってどうなっているのでしょうか?エクセルに手入力した文字と、VBAを使って入力した文字とどこが違うのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAで文字の入力とはどのようにされたのでしょうか? マクロの自動記録で漢字を入力すると以下のようにフリガナ情報が付与されます。(3行目) Range("A1").Select ActiveCell.FormulaR1C1 = "東京都" ActiveCell.Characters(1, 1).PhoneticCharacters = "トウキョウト" 例えば Range("A1").Value = "東京都" のようにした場合、文字列にフリガナ情報が付いていない場合があります。(漢字の場合) フリガナ情報があるかどうかは PHONETIC関数で確認してください。 フリガナ情報をつける方法は↓こちらを参考にしてください。色々詳しく説明されています。 http://www.relief.jp/itnote/archives/001453.php ただ、VBAで自動的にフリガナを設定すると地名や人名は不適切なフリガナ情報が付与される場合も多いので確認・修正の必要があると思います。 並べ替えのルールに関して以前他の回答で説明しています(簡単にですが)。参考までに。 http://okwave.jp/kotaeru.php3?q=1997475
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
F1に東京 F2に静岡 と手入力で入れました。 その後下記を実行しました。 Sub test01() s = Array("", "東京", "静岡", "名古屋", "岐阜", "京都") For i = 1 To 5 Cells(i + 2, "F") = s(i) Next End Sub G1に=PHONETIC(F1)と入れてG7まで式を複写しました。 結果は 東京 トウキョウ 静岡 シズオカ 東京 東京 静岡 静岡 名古屋 名古屋 岐阜 岐阜 京都 京都 でVBAで値をセットしたセルはフリガナが出てません。 (1)他ソフトの値をコピーしたり (2)他ソフトからインポートしたり (3)VBAで値をセットしたり した場合はフリガナ情報は引き継がれないようです。ただし (A)エクセルのセルのコピーの場合は引き継ぐ (B)=A1は値しか引き継がない。 したがって、エクセルでソートしたとき エクセルのフリガナを使ってソートすると、フリガナが使えて、フリガナがソートキーになる行と、フリガナがなく漢字のままの行とが混じって、コンピュターのソートの基本ルール〔注)によって並べ替えられることになります。 〔注)文字のメモリ上のビット列で、比較2文字の左端ビットからの大小によるルール。 こういうことで回答として良いでしょうか。 フリガナは、キーボードから仮名漢字変換で漢字を入力したときに限り、その機会を捉えて、エクセルのセルに対応する所定の記憶域に 蓄えられるカナ情報のようです。 エクセルやIMEの根源的仕組みまでは勉強してないので、推定もありますのでよろしく。
お礼
回答ありがとうございました。takiboさんの回答で解決しました。 imogasiさんの回答も勉強させていただきました。
- Wendy02
- ベストアンサー率57% (3570/6232)
#1のWendy02です。読み違えました。 Phonetic 関数で、フリガナが取れないなら、既に回答が出ているようですが、このようにします。Alt + Shift +↑と同じ働きです。 Phonetic データは、MS-WordやRich Text やインターネットで、フリガナ情報を持った文字でしか、フリガナデータが確保されていません。VBAで、どのように入れたのかわかりませんが、そのデータが入っていないからでしょう。 Value プロパティだけでの転記では、データがありません。Rangeオブジェクトを渡すのでしたら、可能です。以下は、必要なお使いになるのがよいのですが、そうでない場合は、元のマクロから考えたほうが良いような気がします。 'フリガナ復活のマクロ Sub FriganaRecover() Dim c As Range Dim rng As Range Set rng = Selection 'マウスで選択 For Each c In rng If VarType(c) = vbString Then If c.Characters.PhoneticCharacters = "" Then c.SetPhonetic End If End If Next c Set rng = Nothing End Sub ただし、IME98(MS-Word 97のパッチ当て) 以上です。これは、IMEの辞書の登録してある順序の第1番目を出すという仕組みです。2番目以降も出せますが、VBAでは、キメウチにしか出来ませんので、修正が必要ということです。
お礼
ありがとうございました、takiboさんの回答で解決されました。wendy02さんの回答も参考にさせていただきました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 それは、単に、Sortメソッドのオプションが抜けているだけのことだと思います。 記録マクロで作って、そこに出てきたオプションを写したらどうですか?
お礼
的確な回答でした、ありがとうございました。並べ替えのルールもよくわかりました。