• ベストアンサー

VBAで文字を入力したら並べ替えがおかしくなった

VBAでエクセルの表に文字を入力したらその入力した列での並べ替えがおかしくなってしまいました。入力する前は、文字の読みの順に並べられたのに、入力した後は、カタカナが先になって、漢字が後になってしまいました。並べ替えのしくみってどうなっているのでしょうか?エクセルに手入力した文字と、VBAを使って入力した文字とどこが違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • takibo
  • ベストアンサー率57% (116/200)
回答No.2

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

rantarou
質問者

お礼

的確な回答でした、ありがとうございました。並べ替えのルールもよくわかりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

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の根源的仕組みまでは勉強してないので、推定もありますのでよろしく。

rantarou
質問者

お礼

回答ありがとうございました。takiboさんの回答で解決しました。 imogasiさんの回答も勉強させていただきました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#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では、キメウチにしか出来ませんので、修正が必要ということです。

rantarou
質問者

お礼

ありがとうございました、takiboさんの回答で解決されました。wendy02さんの回答も参考にさせていただきました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 それは、単に、Sortメソッドのオプションが抜けているだけのことだと思います。 記録マクロで作って、そこに出てきたオプションを写したらどうですか?

関連するQ&A

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • エクセルの並び替え

    エクセルで表中にひらがな、カタカナ、漢字を含んだ文字列を50音順にならびかえるのはどうすればいいでしょうか?(ひらがなだけ先にまとめられてしまいます・・・)

  • エクセル 並べ替え

    貼付のような表があります。 1列目は2行が結合されている状態で、カタカナで名前が入力してあります。 1列目を基準にして表全体を昇順で並べ替えをしたいのですが、通常通り行うと「同じサイズの結合セルが必要」とメッセージが出て、行えません。 並べ替えを行う方法はありますでしょうか?

  • Excel2007VBAで列ごとにランダム並べ替え

    Excel(エクセル)2007VBAを使った、 コマンドボタンを押すたびに「ある一列のデータをランダムに並べ替える」VBAソースが知りたいです。 (Google検索をかなりしたのですが、この条件を満たすVBAソースが見つかりませんでした。) ----------------------------------- たとえば、 【A列】に A1:えんぴつ A2:消しゴム A3:定規 A4:コンパス A5:赤ペン A6:下敷き A7:ノート A8:クリアファイル A9:クリップ A10:色鉛筆 と入力したとします。 そして、コマンドボタンを一回押します。   ↓↓↓ 【A列】が A1:下敷き A2:ノート A3:クリップ A4:コンパス A5:定規 A6:色鉛筆 A7:えんぴつ A8:赤ペン A9:消しゴム A10:クリアファイル ↑のように、 【A列】にある「えんぴつ」「消しゴム」「定規」「コンパス」「赤ペン」「下敷き」「ノート」「クリアファイル」「クリップ」「色鉛筆」の文字が、【ランダムで並べ替え】されるようにしたいです。 【補足】 ※1回限定のランダム並べ替えではなく、コマンドボタンを押すたびに【何度でも】ランダム並べ替えできるようにしたいです(回数無制限のランダム並べ替えがしたいです)。 ※上記の【A列】に並べた文字はあくまで例です。実際は、【A列】に自由に文字を入力できる応用の利く仕様にしたいです(Excelの【A列】に、どんな言葉や数字を直接入力してもランダム並べ替えできる、という意味です)。 ※上記の【A列】が10行というのもあくまで例です。実際は、【A列】が何行にでも対応できる仕様にしたいです(具体的には【A列】が、時間がかかってでも5000行くらいまで対応できるのが理想です)。 実際はVBAを使わなくてもランダム並べ替えはできるのですが、その方法は効率が悪いと分かったので効率のため、コマンドボタンひと押しでランダムに並べ替えられる【VBAソース】が知りたいです。 上記の条件を満たすVBAソースがわかる方がいましたら、どうかご教授ください。 よろしくおねがいします。

  • EXCEL入力中の文字表示について

    EXCELで名簿を作りたいと思います。 列Aにひらがなで読みを、列Bに漢字名を入力するとします。 始め列Bにをすべて漢字名を入力して、その字を見ながら列Aに かな文字を入力することにしました。 その時の列A入力中のことなのですが、入力中の文字が列Bに重なった 時点で列Bの内容が見えなくなってしまいます。 列Aに「折り返して全体を表示する」をチェックしておけば、入力中の 文字が重なっても下方向に折れて表示されるのでいいのですが、 できれば「折り返し~」のチェックは入れないでこのような表示形式に したいです。 他の表でこのような入力法になってるものもあるので どこかの設定で再現可能なのはわかっているのですが、 それがどこかわかりません。 もしおわかりの方がいましたらご回答のほうお願いします。

  • Excel2010文字の並べ替えでカタカタ優先

    Excel2010にて、文字の並べ替えで昇順を行うと、カタカナが優先されて上位にきてしまう。 通常はあいうえお順なのでカタカナであっても関係ないですよね。 どなたか、ご教授をお願いいたします。

  • エクセルでの文字列の並び替え方法?

    エクセルでカラオケの一覧表を作っています いったん全部入力して、並び替えをしようと思ったんですが・・ 曲名の50音順で並び替えたら、『アルファベット』『かな/カナ』『漢字の読みの50音順』になってしまいます 先頭に『アルファベット』が来るのはいいんですが、『かな/カナ』→『漢字』の順番がいやなんです なんとか日本語の読みで50音順に並べる方法はないでしょうか? 並び替えように、曲名を全部半角カタカナで入力して、それをキーにして並び替えをするのも、一つのやり方かなっと思いますが、いまさら、また全部入力しなおすのも面倒なので、簡単にできる方法があれば教えてください よろしく

  • ブックマークでのタイトルの並べ替えは正確ではない?

    firefoxを利用しています。 ブックマークの並べ替えについての質問です。 「すべてのブックマークを表示」における、それぞれのフォルダの「名前」では降順または昇順で並べ替えできますが、これは厳密な並べ替えではないですよね? 各リンク先のHPのタイトルや記事の名前の冒頭は、かな(あいうえお)、漢字、アルファベット、文字など様々です。漢字はまず「かな」読みして並べ替えているのかなと思ったのですがそうではなく、漢字だけのタイトルを並べ替えしてみましたが、支離滅裂でした。 どうにかして「かな」順、つまり五十音順で並べ替えしたいのですができますか?やっているという方、ぜひ方法を教えてください。 また同タスクでは「タグ」という機能もあります。この機能の目的は何でしょうか?

  • エクセルVBAでテキストの漢字の読みを入手するには?

    テキストファイルを読み込むエクセルVBAを作りました。 テキストデータ内の漢字をカタカナに変換したいのですが どのようなVBAにしたら良いのでしょうか? セルに入力された漢字の読みを入手する方法は分かっていますが、 テキストの漢字から入手する方法が分かりません。 よろしくお願いもうしあげます。

専門家に質問してみよう