仕事上Excelでデータ管理をしています。
以前から気になっていたのですが、ある行についてソートを行った際、
たまに同じ値のはずなのに全く違う位置に並んでしまったりすることがあります。

具体的には…

ABCABCABCABCABC
 ↓昇順でソート
AAAAABBBBBCCCCC 期待される結果はこうですが、
AAAABBBBCCCCABC 実際にはこう並んだりします。

一応自分なりの解決策として、ソートする行をコピーし、新しいシートへ
形式を(値)に選択して貼り付けしてからソートすると、期待通りの結果が
得られる事は見つけました。問題は、「なぜそうなるのか」なのです。

もしご存知の方がいらっしゃれば、宜しくお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (10件)

今晩は、帰りの電車の中で寝ながら考えました。


このままだと夜眠れそうにないんで(さっき寝たって言ったが~)
それはさて置き本題です。結論から言いますとbin-chanさんの意見で正しいです。
では対策です
シート2
   a      b
1  県名     県番   
2 東京都      1
3 神奈川県     2
4 埼玉県      3


シート1
   a      b       c
1  県番     県名    県ふりがな名
2        東京都    とうきょうと
3        神奈川県   かながわけん
4        埼玉県    さいたまけん
5        東京都    ひがしきょうと
6        神奈川県   しんなせんけん
7        埼玉県    さいたまけん 

注1)c2は計算式PHONETIC(B2)
注2)a2は=VLOOKUP(B2,Sheet2!$A$2:$B$4,2,FALSE)
解説
phonetic関数は、前回答者の通りに振り仮名(入力した通り)を振ります
漢字のエリアのソートは入力した通りにソートするようです
vlookup関数はテーブル検索です
第一パラメータは、入力データです
第二パラメータは、テーブルを指定します
 例:seet2のa2からb4までをテーブルとしています
   $a$2の$はコピーした時に値がずれないようにしています
第三パラメータは、出力データでテーブルの左から何番目のデータを使用するか
第四パラメータは、テーブルの値が順番に並んでいなくても良いという指定です

最後に並び替えを行うときは、AZ↓キーを使わず
データ→並び替え→優先されるキーをAに指定して下さい。

こんなもんでどうでしょうか?(^.^)
これで眠れる(さっき寝たって言ったが~)オヤスミナサイ
    • good
    • 0
この回答へのお礼

k_ebaさん、丁寧に考えていただきながら
返事が遅れて申し訳ありません・・・

ううむ、色々関数が出てきて勉強になると思ったのですが
僕の頭が追いつきません…
でも何となくですが、書いてある通りで思ったような
並び替えができそうな気がするので、試してみます。
ありがとうございます。

お礼日時:2001/10/01 13:09

まだソート出来ませんか?


なにか有ると思いますので
状況の補足をお願いします。
    • good
    • 0

No.8の方に補足です。


Excelは、Excelで「入力したもの」の
読み情報で、ソートします。

ですので、たとえば、Wordから、
コピー&貼り付けした場合などにも、
ただしい読み情報が入っていないので、
ソートすると、希望どおりにならない場合があります。
(WordからExcelに適当なデータをコピーして、
フリガナ表示すると、ふりがな入ってないのが、わかりますよ。
また、Excelのバージョンが違って、
貼り付けた場合も、フリガナ情報は、コピーされていません。)

たとえば、人様のお名前で難しい名前を、
別の読みで入力することもよくあるとおもいますが、
そのExcelで、入力した読みでソートされます。

例:「洋子」ってお名前を、ヨウコと、ヒロコで入力して
「洋子」に両方、漢字変換して、
ソートしてみてください。
同じ漢字であっても、
昇順であれば、ヒロコさんが、
降順であれば、ヨウコさんが先にくるはずです。

Excelの読み情報での、ソートの意味がわかるはずです。

なので、漢字が入っている列を、直接ソートするのではなく、
Phonetic関数で、ふりがな表示させてから、ソートするのが、
一番いいとおもわれます。
列の非表示などはできますので。
    • good
    • 0

フリガナのデータは必ずついているとは限らない。



これが、正解です。

というのは、Excelでデータを作成したタイミングや、データのコピーの仕方によっては、フリガナを持ったまま貼り付けることができないケースがあるのです。

簡単な具体例をあげると、

1.セルA1に「ほっかいどう」と打って「北海道」と入力します。
2.セルA1をコピーしてセルB1にデータを貼り付ける際に、右クリックして、形式を選択して貼り付けを選び、ダイアログボックスが開いたときに、「貼り付け」のなかの「値」にチェックマークをいれて「OK」ボタンを押します。
3.セルA1とセルB1を選択して、「書式」メニューから「ふりがな」→「表示・非表示」を選択します。

結果としてセルA1はふりがながついていますがB1はふりがながついてません。

ふりがながある場合は、ふりがなを基準にソートしますが、ふりがながない場合は、文字フォントのコード順に並びます。
通常の並び替えのときもふりがなを無視してコード順に並べるオプションがちゃんとついていて、「データ」→「並び替え」→「オプション」のなかに、ふりがなを使うか使わないかが選択できます。

データを並び替える際は、そういったExcelの癖を踏まえた上で、ふりがなをすべてにちゃんと振ってあるか、または、ふりがなをすべて取っているか、を確認した上でソートしなければなりません。

用途に応じて、ふりかなの管理もしなければならないのですよ。面倒くさいですが、ちゃんとしていれば、それなりに便利に使えます。

ふりがなの編集もできるので、こだわるのならお勧めですよ。
    • good
    • 1

あまり大きい表だと上手く動作しないみたいですね


私は、メールのアドレス帖をcsvに変換しエクセルで開いて
一番左端でソートかけましたが上手く行く時と
ほんとにソートした??と思える動作をしました
やはりエクセルだと限界かなと思いました
そこで対策
 1)このまま我慢して使用する
 2)アクセスでソートする
  エクセルはそのまま
  アクセスを作成、空のデータベース
  ファイル→外部データの取り込み→テーブルのリンク
  ファイルの種類をエクセル
  アクセスでデータが使えます
どちらにしても、逃げだ~(ーー;)あせあせ

がんばって下さい。時間が来ました。土、日の両日で考えときます。

この回答への補足

> あまり大きい表だと上手く動作しないみたいですね

うん、僕も始めはそういう印象をもっていました。
人に聞いても「Excelの限界ちゃうか」という意見は確かにあり、
なんとなく僕もそんな気になってました。

Accessですか、やっぱり使わないといけないかな~
興味はあるのですが覚える時間が無くて…
んで、結局、対象の行などをコピー→新しいシートに値として貼り付け
してからソートという原始的なことをしてます。

はあ、時間が欲しい。。。

補足日時:2001/09/14 18:13
    • good
    • 0

すみません。

関数名を誤ってました。

ただしくは「PHONETIC」です。
    • good
    • 0

全角のデータ入力時に「ふりがな」を自動的に保存しているからです。



[データ]-[並べ替え]のダイアログに[オプション]ボタンがあるので
これをクリックすると「方法」ふりがなを使う、がデフォルトのはずです。
これを・・・使わないにする。

中身を見たい場合は全角の値のセルを別のセルから=photonic("セル番号")と
すると「どうやって日本語入力したか」が見えると思います。
    • good
    • 0
この回答へのお礼

うおおっ、こんな関数知りませんでした!
試してみると、同じ北海道でも「ホッカイドウ」と「北海道」がある!!
なるほど、これでソートしてたからこうなっていたのか…
bin-chanさん、ありがとうございます!!

しかし、先程から皆さんが「ふりがな」と言っていたのはこの事だったのですね、
不勉強ですいません、全くわかってませんでした…

さて、残る問題はなぜ「ホッカイドウ」と「北海道」になっているかですね。
web上でのプルダウンによる選択記入項目なので、
違いが発生するように思えないのですが…

お礼日時:2001/09/14 18:12

そうですか


 後考えられる所をあげます
  メモリーが足りなく途中で止めてしまう(考えにくいか?)
  当初のソートの範囲にデータが入っていない
 一回並びが変なものの内一つか二つ入力し直して実施してみるのはいかがですか

かんばって下さい。なんの回答にもなってない~(・・;)あせあせ
    • good
    • 0
この回答へのお礼

> メモリーが足りなく途中で止めてしまう(考えにくいか?)

これは辛うじて大丈夫です。(笑)

> 当初のソートの範囲にデータが入っていない

これもちゃんと指定しています。
範囲指定が出来ていなければ、指定から外れている個所については
ソートされませんよね?具体例のケースでは、全てソートされた上で
ああなってしまうのです…

> 一回並びが変なものの内一つか二つ入力し直して実施してみるのはいかがですか

解決策としては、これも有効だと思います。
実際に行った例としては、
AAAABBBBCCCCABC となっている内、最後の方にあるAを入力し直して
再ソートをかけると、ちゃんと AAAAABBBBCCCCBC となった事もありますし、
逆に始めのAAAAを再入力してソートすると BBBBCCCCAAAAABC と
なったりします。もう何が何だか…

一応、自分なりには各Aの入力コードが違うからこうなるんじゃないか、とは
思っているのですが、真相はどうなのでしょう?

> かんばって下さい。なんの回答にもなってない~(・・;)あせあせ

いえいえ、Methylnさんもk_ebaさんも、お答え頂くだけで感謝です!

お礼日時:2001/09/14 16:53

もしかして漢字をソート対象にしていませんか?



漢字の文字コードは、あいうえお順に正確に並んでいるという訳では
ないようですので、ソート用に"ひらがな"か何かのキーを作って、
それをソート対象にしてはいかがでしょう?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ソートの対象は確かに漢字です。ただ、ソート順とかは
あまり問題とは感じておりませんので、かなをソート対象に
する必要もないと思います。(折角お答え頂いたのにすいません)

お聞きしたいのは、具体例に示したように「なぜ同じAなのに上や下に
分かれてしまうか」なのです。言葉足らずで、質問したい事が
うまく表現できてなかったかもしれません。すいません…

お礼日時:2001/09/14 16:39

良くあるパターン


 全角と半角
 書式で文字、数値
などで並び替えが美味くいかないことがあります
いろんな人が入力したり、違う日に入力したりするとなります

解決策として漢字のみとか数字だけとかプロテクトするといいと思います

がんばって下さい
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。

全半角は、全角で統一されています。
と言いますか、都道府県の選択入力(漢字のみ)なので、
バラバラになる事はないと思うのですが…

プロテクト…ですか?試した事ないですがやってみます。

お礼日時:2001/09/14 15:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QタイトルセルをWクリックする度にソート方法を昇順、降順切り替えてソートしたいのですが・・・

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
以下のマクロは、セル$B$14がWクリックされたら、 $B$14の左1文字を判断して
ソートするマクロです

gooの皆さんに教えていただいたマクロを一部改良しています
例 $B$14の左1文字は↓or↑で ↓タイトル のようになっています

このマクロを次のように手直ししたいのですが、どなたか教えてください

1、↓タイトル の時にWクリックしたら タイトルが ↑タイトル になって降順でソートする
2、↑タイトル の時にWクリックしたら タイトルが ↓タイトル になって昇順でソートする

1と2をWクリックする度に切り替えるということはフラッグ(スイッチ?)を使うのでしょうか
であれば、どこか、特定のセルをひとつ使って、そのセルに現在のフラッグ(スイッチ?)を
書き込むのでしょうか?
マクロをどう手直しすればよいでしょうか?
どなたか教えてください

以下が現状のソートマクロです

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$B$14" Then
'Cancel = True
    'Cancel=True を加えると、オリジナルの動作(セル内編集)をキャンセル
'以後はマクロが終了してもダブルクリックで編集モードに入ることは不可
Dim Skey As Integer
Dim SortArea As String 'ソート範囲

SortArea = "B15:CT50" 'ソート範囲

Select Case Left(Target.Value, 1)
Case "↓"
Skey = 1
Case "↑"
Skey = 2
Case Else
Exit Sub
End Select

Range(SortArea).Sort _
Key1:=Range("B15"), _
Order1:=Skey, _
Header:=xlNo, _
Orientation:=xlTopToBottom
Cancel = True
'xlAscendingまたは1  昇順
'xlDescendingまたは2 降順
'1や2の数値でもどっちでもよい
'xlTopToBottom 省略可能
End If
End Sub

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
以下のマクロは、セル$B$14がWクリックされたら、 $B$14の左1文字を判断して
ソートするマクロです

gooの皆さんに教えていただいたマクロを一部改良しています
例 $B$14の左1文字は↓or↑で ↓タイトル のようになっています

このマクロを次のように手直ししたいのですが、どなたか教えてください

1、↓タイトル の時にWクリックしたら タイトルが ↑タイトル になって降順でソートする
2、↑タイトル の時にW...続きを読む

Aベストアンサー

こんばんは!

他の方がお考えになったコードに手を加えるのは本意でないので、
当方なりにやってみました。
今回の場合はフラグは考えなくて良いと思います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim str As String, myArea As Range
With Target
If .Address = "$B$14" Then
Cancel = True
str = Left(.Value, 1)
Set myArea = Range("B15:CT50")
If str = "↑" Then
myArea.Sort key1:=Range("B15"), order1:=xlAscending, Header:=xlNo
.Value = Replace(.Value, str, "↓")
Else
myArea.Sort key1:=Range("B15"), order1:=xlDescending, Header:=xlNo
.Value = Replace(.Value, str, "↑")
End If
End If
End With
End Sub

こんな感じでよいのでしょうか?m(_ _)m

こんばんは!

他の方がお考えになったコードに手を加えるのは本意でないので、
当方なりにやってみました。
今回の場合はフラグは考えなくて良いと思います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim str As String, myArea As Range
With Target
If .Address = "$B$14" Then
Cancel = True
str = Left(.Value, 1)
Set myArea = Range("B15:CT50")
If str = "↑" Then
myArea...続きを読む

QExcelで2行以上の昇順並び替え

社員旅行の写真の申込みを振分けるのに、Excelで注文番号を整理しています。注文番号を昇順に並び替えたいと思いますが、下記Aさんの様に1行の並び替えは出来たのですが、Bさんの様に2行以上の並び替えで、
1行目左端→1行目右端→2行目左端…→最終行右端(枚数によっては右端までいかない)というようにするにはどの様にしたらよいのでしょうか?

Aさん  12 15 21 18 30

Bさん  14 27  7 31 16
      6  35 19 41  2

Aベストアンサー

かなり限定的な機能のヤツですが、マクロを作成してみました。
数値の入っているセルを矩形で選択して実行
Public Sub sort() 'ソートモドキ
Dim x As Range, i, wk
Dim NumList, max
Set NumList = CreateObject("Scripting.Dictionary")
max = 0 '0以下の数字はない
For Each x In Selection
If Not NumList.Exists(x.Value) Then '重複チェック
NumList.Add x.Value, x.Value
If max < x.Value Then max = x.Value '空白は0扱い
End If
Next
i = 1
Selection.ClearContents
For Each x In Selection
Do Until NumList.Exists(i)
i = i + 1
If i > max Then Exit Sub
Loop
x.Value = NumList.Item(i)
i = i + 1
Next
End Sub

かなり限定的な機能のヤツですが、マクロを作成してみました。
数値の入っているセルを矩形で選択して実行
Public Sub sort() 'ソートモドキ
Dim x As Range, i, wk
Dim NumList, max
Set NumList = CreateObject("Scripting.Dictionary")
max = 0 '0以下の数字はない
For Each x In Selection
If Not NumList.Exists(x.Value) Then '重複チェック
NumList.Add x.Value, x.Value
If max < x.Value Then max = x.Value '空白は0扱い
End If
Next
i = 1
Selection.ClearCont...続きを読む

Qエクセルで昇順データから検査値以上の最小の値の位置を取得するには

検査範囲(A1:A10)のデータが、昇順に並んでいます。
検査値(B1)以下の最大の値および検査値以上の最小の値の両方を検索したいのです。
=MATCH(B1,A1:A31,1)で、検査値(B1)以下の最大の値の位置は取得できますが、=MATCH(B1,A1:A31,-1)で検査値以上の最小の値の位置を取得するには検査範囲のデータは、降順に並べ替えておく必要があります。

データの並び順をいじらず、両方を取得するワークシート関数はないのでしょうか?

Aベストアンサー

細かい条件がわかりませんが、
=MATCH(B1,A1:A31,1)+IF(COUNTIF(A1:A31,B1),0,1)
とするのではダメでしょうか。

Qエクセルの「昇順で並び替え」について

会社名別のリストを作成したのですが、会社名の前後に(株)や(有)を入れたことにより「昇順で並び替え」を実行すると、(株)や(有)を優先して並び替えが行われてしまうのです。
そこで、(株)や(有)はセル上にそのまま表示させておき、なおかつ純粋に会社名のみの並び替えを行いたいのですが、どなたかご存知でしたら教えて下さい。
宜しくお願いします。

Aベストアンサー

少し面倒ですが、(株)や(有)を表示形式で表示するように変更すれば、可能と思います。

以下はその操作例です。

1) 先頭に(株)が付いたすべてのセルを選択し、「書式」→「セル」→「表示形式」タブを開き、「分類」の「ユーザー定義」で、「@」選び、「"(株)"@」に編集して「OK」を押します。

2) 社名が「(株)(株)あいう」のように表示されますので、「編集」→「置換」で、「検索する文字列」に「(株)」と入力し、「すべて置換」を押しますと、社名が「(株)あいう」と表示されますが、数式バーで確認すると(株)が削除された「あいう」となります。

3) (有)についても同様に操作します。

Q昇順に並びかえるには。。

あるシートに、データがランダムに並んでいます。
それを、ひとつボタンを押すだけで昇順に並びかえたり…
そういう事はできるのでしょうか。

データ→並びかえでやればいいと思うのですが、毎回の作業なので、
その手間を短縮できればと思いまして。。

Aベストアンサー

>ボタンを押すだけで
というところに、既にVBAを使わないとならない(出来ない)ことを含んでいる。VBAの経験ありますか。
データー並べ替えの操作をマクロの記録をとれば、おおよその、コードの骨格は判る。
>毎回の作業なので
同一形式(フィールド構成)のデータに対して行うのか
毎回どの点が変わるのかが、質問に書いてないが、そこを認識することが、肝心。
ソートキーの列
昇順。降順
セル範囲。
その他
など。
ほとんどはパラメータを変えることで対応するが。
パラメータ(引数)の意味は
http://home.att.ne.jp/zeta/gen/excel/c04p41.htm
などWEBで「エクセル VBA ソート」で照会すれば出ている。
ーー
例えば
Private Sub CommandButton1_Click()
c = ActiveCell.Column
'MsgBox c
d = Cells(65536, c).End(xlUp).Row
'sgBox d
Range(Cells(1, "A"), Cells(d, "j")).Sort Key1:=Cells(1, c), Order1:=xlAscending
End Sub
ある列を指定して(アクチブにして)ボタンをクリックすると、アクチブにした列で、A-J列のデータをソートする。
あまり対話を増やし、毎回聞くことをすると、通常の操作でソートをするのとかわらなくなるし。
ーー
ソートは>毎回の作業なので、でもVBAの、使い勝手が少ないものと思う。操作の方も簡単なので。

>ボタンを押すだけで
というところに、既にVBAを使わないとならない(出来ない)ことを含んでいる。VBAの経験ありますか。
データー並べ替えの操作をマクロの記録をとれば、おおよその、コードの骨格は判る。
>毎回の作業なので
同一形式(フィールド構成)のデータに対して行うのか
毎回どの点が変わるのかが、質問に書いてないが、そこを認識することが、肝心。
ソートキーの列
昇順。降順
セル範囲。
その他
など。
ほとんどはパラメータを変えることで対応するが。
パラメータ(引数)の意...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報