• 締切済み

EXCEL 「並び替え」の誤動作について

fumufumu_2006の回答

回答No.4

ANo.3さんのにダブりますが、漢字コード順がいいなら一時的に作業行に文字列の漢字コード(16進)を作っては? B列を作業列にして、A列を並び替えます。 Function sjis(k As String) As String Dim res As String Dim i As Integer For i = 1 To Len(k) res = res & Hex(Asc(Mid(k, i, 1))) Next sjis = res End Function Sub test1() Application.ScreenUpdating = False Dim ws As Worksheet Set ws = ActiveSheet Set ws = Sheet1 ws.Range("B1").Formula = "=sjis(A1)" ws.Range("B1").Copy Destination:=ws.Range("B1:B" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row) ws.Cells.Sort Key1:=ws.Range("B1"), Order1:=xlAscending, Header:=xlNo ws.Columns("B").ClearContents Application.ScreenUpdating = True End Sub ただ、これだと小文字の「っ」とかはどうするのかと言うのがあるので、順番テーブルを用意する方法はどうでしょうか? 「ヴ」とかも処理できるように全角カタカナに変換しました。 テーブルに文字がないと文字が無かったと判断します。 256個以上は無いとして、2文字hexにしました。 個人的にはrange("?")よりcells(?,?)の方が好きなので・・・ Const kana = " 123456789" & _ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _ "アァイィウヴゥエェオォ" & _ "カガキギクグケゲコゴ" & _ "サザシジスズセゼソゾ" & _ "タダチヂツヅッテデトド" & _ "ナニヌネノ" & _ "ハバパヒビピフブプヘベペホボポ" & _ "マミムメモ" & _ "ヤャユュヨョ" & _ "ラリルレロ" & _ "ワヲン" & _ "ー().・" Function kanaOrder(ByVal k As String) As String Dim res As String Dim i As Integer Dim p As Integer k = UCase(StrConv(k, vbKatakana)) For i = 1 To Len(k) p = InStr(kana, Mid(k, i, 1)) If p > 0 Then res = res & Right("0" & Hex(p), 2) End If Next kanaOrder = res End Function Sub test2() Application.ScreenUpdating = False Dim ws As Worksheet Set ws = ActiveSheet ws.Cells(1, 2).Formula = "=kanaOrder(A1)" ws.Cells(1, 2).Copy Destination:=ws.Range(ws.Cells(1, 2), ws.Cells(ws.Cells(ws.Rows.Count, 1).End(xlUp).Row, 2)) ws.Cells.Sort Key1:=ws.Cells(1, 2), Order1:=xlAscending, Header:=xlNo ws.Columns(2).ClearContents Application.ScreenUpdating = True End Sub p.s. activesheetを並べ替えてますが、Set ws = sheets("??")とすれば、表示していないシートも並べ替えられます。

Dor_001
質問者

お礼

真っ向からのアルゴリズムですね。 (案1) HEX変換した文字列をSORTする (案2) コレートシーケンスを自作して、 その位置データに変換しsortする いずれも鮮やかですね。 ちなみにExcelのコレートシーケンスは 「ァアィイゥウヴェエォオ・・・」 のようですので、それはそれで、 案1で充分かと思いました。 大変勉強になりました。 貴重な時間をいただきありがとうございました。 今後ともよろしくお願いします。 さてさて、では実際にどんなアルゴリズムにしようか、 ちょっと悩みますね。 でも、最初に戻りますが、 清音=濁音=半濁音 とする、基本思想はなぜ必要になったのでしょうね? しかも、その結果「等価」の場合は、 吃音<清音<濁音<半濁音 とする こんなに複雑なコレートシーケンスはなぜ必要だったのか。 なにか深いわけがありそうですね。 (つぶやきです^^;) いずれにしても皆さんありがとうございました。

関連するQ&A

  • エクセルの関数で

    次のような表があります。 名前 国語 算数 理科 あい 90 80 80 うえ 40 70 89 おか 60 70 90 きく 60 80 80 この中で科目別の最大最小をもとめ、 その点数をだしたのは誰かを求めたいのです。 重複した場合は、最初にヒットしたものでかまいません。 LOOKUPはソートしないとだめだし、 VLOOKUPはソートしなくてもいいのですが範囲の指定が・・ MATCHでは何番目までは取得できたのですが・・ マクロを使わず、この表の並び替えもしないで 出来る方法はありますか? win2k・Excel2000です

  • Excel を使用して運用データを編集する

    目的はODCファイルを開くことですがhttp://office.microsoft.com/ja-jp/excel-help/HA001086488.aspxこのページの「Web からのデータのインポートについて」の[データ] メニューはどこにありますか?

  • Excelの集計方法について(集計KEYが2個ある場合です)

    WinxpでExcel2002を使用しています。 A列  B列   C列 日付  性別  人数 上記の表があります。 SORTで日付(降順)、性別(昇順)に並べ替えを行い、その結果を以下のように人数を集計するには、どうすれば良いでしょうか? 性別計  男 ○人  性別計  女 ×人 日付計   ○+×人 尚、合わせて、日付計で、改ページも行いたいです。 ご教示宜しくお願いします。  

  • エクセルで英数字の文字列から数字を抽出

    エクセルで英数字を含む文字列から数字を抽出く =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1))) 小数点にも対応させるにはどうしたら良いでしょうか。 「AA0.45」→0.45 「0.65BB」→0.65 「CC0.85CC」→0.85 http://office.microsoft.com/ja-jp/excel-help/HA001154901.aspx を参照しました

  • Excel2002でX/数値軸目盛にラインを入れることができますか?

    Excel2002でX/数値軸目盛にラインを入れることができますか? Microsoft Office Excel 2002です。 Excel2002でY/数値軸目盛にラインを入れることはできます。 どうすれば Excel2002でX/数値軸目盛にラインを入れることができますか? または、いつのバージョンのExcelならX/数値軸目盛にラインを入れることができますか? http://office.microsoft.com/ja-jp/excel-help/HA001034643.aspx?CTT=1

  • ExcelVBA:列方向の並び替え Orientation

    いつも大変お世話になります。初心者です。 長文で申し訳ありませんが、私の間違いについてご指導をお願いします。(Excel2003) 並び替えについて訳が分からなくなってしまいました。現状は、 ・A2セル=1月、A3=2月、A4=3月、A5=合計 ・B1セル=札幌、C1=東京、D1=名古屋、E1=大阪 ・B2:E4 は売上金額です。 ・B5 は、SUM(B2:B4) です。C5~E5も同様です。 ※売上合計は多い順に、東京、大阪、名古屋、札幌です。 この表の合計金額を並び替えをしたいと思い、以下を書いてみました。 左から順に、売上合計の多い支社順に、並ばせようとしました。 Cells(1, 1).CurrentRegion.Sort _ key1:=Cells(5, 1), order1:=xlDescending, Orientation:=xlSortColumns, header:=xlYes 【甲】 すると全く意図した形ではない並び替えが実行されてしまいました。 (なぜか行が入れ替わり、列は変わらず。) 【乙】 しかし、上のOrientationを、xlSortRows に変えてやってみると、意図した通りに並び替えられました。 【丙】 また、Order1:=xlAscending, Orientation:=xlSortRows でやってみると、列の並び替えは実施されますが、 月の見出し列(A1~A5)が一番右に移動してしまいます。 -------------------------------------------------------------------------- その後いろいろ調べたり、試行したりしたのですが疑問が山積してしまいました。 基礎的な話かもしれませんが、上記の例で、「列方向に、合計金額を基準に、正しく降順・昇順並び替え」をしたいと思っています。 【質問1】Sortメソッドのヘルプで見ると、Orientation の説明に、xlSortRows,xlSortColumnsの説明がありますが、 行方向、列方向、どうしても実際の動きと逆な気がしてなりません。 私の勘違いでしょうか。 【質問2】マクロの自動記録時に気づいたのですが、Orientation の設定に、xlLeftToRight や、xlTopToBottom というのが使われていました。 これらと xlSortRows, xlSortColumns の違いはありますか。 【質問3】列方向への並び替えの際には、Headerの設定をするのは無意味ですか? 上記(丙)のパターンで、xlGuess でも、xlYes 、xlNo でも全く動きは変わらず、月の見出し列が最右に移動しました。 【質問4】上の(丙)のパターンで正しく動かす為には、Sort の対象となる範囲を、B列以降にする必要があるのでしょうか。 ---------------------------------------------------------------------------- 分かりにくい箇所もあったかと思いますが、ご指摘いただければ補足させていただきます。 なお、「そんな簡単な表だったら、手で作業したら?」ということではなく、後学のために知っておきたいので質問させていただきました。 なにぶん勉強中なため見当外れの質問もあるかもしれませんが、なにとぞご教示よろしくお願いいたします。

  • Excel2007のフィルタ

    職場のPCで、あるPCは可視セルのみをコピーし、あるPCは非表示セルまでコピーをしてしまうのです。(全てExcel2007です。) http://office.microsoft.com/ja-jp/excel/HA102448971041.aspx?pid=CH100648341041 上記URLによると「すべてのセルをコピーするか、可視セルのみをコピーするかを選択できます。」とあるのですが、その方法が分かりません。 ご存知の方、お教え下さい。

  • Excel2002で右と左に違う軸の数値でグラフを出すことができますか

    Excel2002で右と左に違う軸の数値でグラフを出すことができますか? Microsoft Office Excel 2002です。 Excel2002でY/数値軸目盛にラインを入れることはできます。 どうすれば 右と左に違う軸の数値でグラフを出すことができますか? 相関関係がある指標と実際の価格を出して比較するようなときに使いたいのです。 または、いつのバージョンのExcelなら右と左に違う軸の数値でグラフを出すことができますか? http://office.microsoft.com/ja-jp/excel-help/HA001034643.aspx?CTT=1

  • セル結合されていないのに結合のメッセージが出る

    エクセル2010を使っております。 ある表を五十音順に並び替えようと思っているのですが、「この操作には、 同じサイズのセル結合が必要です。」とのメッセージが出てしまいます。 しかし、結合セルをhttp://office.microsoft.com/ja-jp/excel-help/HP010342686.aspx#BMfindmergedcells に記載されたとおりに検索しても見つかりません。 (並び替えようとしている範囲内を目で探しても結合セルは見つかりません) どうすれば、並び替えができるようになるのでしょうか? よろしくお願いします。

  • mos word2007でドキュメント検査

    MOS試験 word2007の試験を受けたいのですが、ドキュメント検査の問題で、メタデータというのがはっきりと分からず、マイクロソフト社のホームページで調べたところ、二通りの解釈が出てきました。 どちらで判断したらいいのか分からず、悩んでいます。どなたか教えてください。 メタデータを情報、プロパティ、隠し文字、コメントなどを言うというホームページが http://support.microsoft.com/kb/223396/ja 情報、プロパティという解釈のホームページが http://office.microsoft.com/ja-jp/excel-help/HA010037593.aspx です。よろしくお願いします。