• ベストアンサー

エクセルの並び替えがうまくいきません

表に入力してあるよみがなを並び替えたいのですが、スペースが間に入っているものと入っていないものがあるので、次のような式を使ってスペースをとりました。 =IF(読み仮名データセル="","",IF(ISERROR(LEFT(読み仮名データセル,SEARCH(" ",読み仮名データセル,1))),読み仮名データセル,LEFT(読み仮名データセル,SEARCH(" ",読み仮名データセル,1)-1)&RIGHT(読み仮名データセル,LEN(読み仮名データセル)-SEARCH(" ",読み仮名データセル,1)))) 回りくどい式ですが、もし読み仮名のデータがあれば、スペースの位置を検索して、スペースがなければそのまま読み仮名を表示、あればスペースの右と左だけを結合して表示する、というものです。 これを 名簿表のずっと右の方で作業して、スペース無しの読み仮名を書き出しました。 この読み仮名の一覧を、もとの読み仮名のところに「値だけ貼り付け」して、並び替えをしたのですが、なぜか以下のようになってしまいます。 最初のデータ 「    」(スペース) あおのあおこ えんどうえつ うちだうちこ かきだかきこ いむらいまこ 「    」(スペース) これを並び替えしてみると、 「    」(スペース) 「    」(スペース) あおのあおこ いむらいまこ うちだうちこ えんどうえつ かきだかきこ となってしまいます。 本当は、「    」(スペース)には列の一番最後に言って欲しいのですが・・・。 こうなって欲しい・・ あおのあおこ いむらいまこ うちだうちこ えんどうえつ かきだかきこ 「    」(スペース) 「    」(スペース) なにかいい方法はあるでしょうか?

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

  • ベストアンサー
回答No.7

計算式が入っている空白のセルをnullにします。 空白セルのある列の最上段のセルを 1クリックしてからマクロを開始してください。 一度でも使用したことのあるセルを最終行と するので、ごみが下の方にあるとそこまで 処理します。使っていないセルが表外にある 時は削除して、上書保存後に使ってください。 ごみは時間がかかるという程度の問題ですが。 これなら行を指定しなくても全部処理します。 Range("A1").Select などで開始位置を指定すればマクロから自動です。 ちなみに空白を取り除くものは下の関数もあります。 =SUBSTITUTE(A1," ","")置き換え Sub 計算式をnullに() 開始位置 = ActiveCell.Address 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終位置 = ActiveSheet.Cells.SpecialCells(xlLastCell).Address 最終行 = ActiveCell.Row 最終列 = ActiveCell.Column For I = 現在行 To 最終行 If LenB(Cells(I, 現在列)) = 0 Then Cells(I, 現在列) = Null End If Next Range(Cells(現在行, 現在列), Cells(最終行, 現在列)).Select End Sub マクロの使い方などは質問ください。

kitunekko
質問者

お礼

さっそく試してみました。 何故か Cells(I, 現在列) = Null ではうまくいきませんでしたが、 Cells(I, 現在列).ClearContents にしたところ、並び替えが思い通りに動くようになりました。 ありがとうございました。

その他の回答 (6)

  • peso
  • ベストアンサー率41% (40/97)
回答No.6

スペースの場合は適当な漢字を入れておくっていうのは、 =IF(読み仮名のセル="","一",SUBSTITUTE(読み仮名のセル," ","")) のような感じです。「一」は漢数字の1です。 これで、読み仮名のセルに何も入っていない場合は「一」と表示が出ます。 これで並べ替えをすると、「一」の入っているセルは実際にひらがなで 読み仮名が入っているセルより下に行きます。 表示は下のようになります。 一 あおのあおこ えんどうえつ うちだうちこ かきだかきこ いむらいまこ 一

kitunekko
質問者

お礼

どうもありがとうございました。

kitunekko
質問者

補足

なるほど~・・。それも一手かもしれませんねぇ。 なるべくシンプルな形で解決したいとは思うのですが、いざとなったらそれですねぇ。

回答No.5

毎回あるということでしたら マクロで作られてはいかがですか。 並べ替えてから、 スペースだけ最下段へ移動 というようなものを。 マクロでも可ですか。 マクロを使ったことはありますか。 作り方は質問ください。

kitunekko
質問者

お礼

ありがとうございます。教えていただけたら幸いです。

kitunekko
質問者

補足

今回もマクロを使っているのですが、VBAは使ったことがないので マクロの編集は手探り状態です。   (^_^; アハハ… もし 「 値の貼り付け 」をした後の ""を貼り付けたセルだけ、もう一度選択して、「デリート」をかけられたら、解決するのですが、そういうこともできますでしょうか?(手作業で そういうセルを選択して「デリート」をすると、並び替えがうまくいくことがわかったので)

  • mitsu-s
  • ベストアンサー率25% (7/27)
回答No.4

最初に降順で並び替えて空白データを後ろに持っていって、次に空白以外のデータを昇順で並び替えるってのはどうでしょう?

kitunekko
質問者

お礼

ありがとうございます。ほかにも何かアイデアがありましたら教えていただけますか?

kitunekko
質問者

補足

エクセル初心者でも 直感的に扱えるよう、なるべく手作業を排除したいのです。

  • peso
  • ベストアンサー率41% (40/97)
回答No.3

どうしても文字よりもスペースが上に来てしまうので、  1.あとで自分で入れ替える  2.スペースの場合は適当な漢字を入れておく  3.スペース部分には全角のスペース1つ、読み仮名が入力されている場合は    読み仮名の前に半角スペースを入れて     データ→並べ替え→オプション→大文字と小文字を区別するにチェック などしか無いと思います。 あと、スペースを除くには、  =SUBSTITUTE(読み仮名データセル," ","") で簡単に出来ます。

kitunekko
質問者

お礼

ありがとうございます。ほかにも何かアイデアがありましたら教えていただけますか?

kitunekko
質問者

補足

データ量が多く、かつエクセル初心者が扱えるように、なるべく手作業は減らしたいのです。 名簿用のスペースは毎月150件ほどを用意してあり、毎回漢字をいれたり 入れ替えをするのは避けたいと思っています。 また、私の立てた式をごらんいただきましたように、スペース部分には""、つまり空白を指定してあるので、何も入っていないはずなのに、上記のような結果になってしまうのです。何もない=""セルをコピーして「値を貼り付け」すると、どうも何かがセルに代入されてしまうのでしょうか・・?教えていただいた、=SUBSTITUTE(読み仮名データセル," ","") という式も試してみましたが やはり同じ結果になりました。

回答No.2

これはスペースだけ(スペースのデータが存在する)のセルがあるということですよね? それならば、このスペースだけのセルを空セルにすればいいです。 具体的には、スペース(” ”)をヌル(””)にすれば可能です。

kitunekko
質問者

お礼

ありがとうございます。ほかにも何かアイデアがありましたら教えていただけますか?

kitunekko
質問者

補足

私の立てた式をごらんいただきましたように、参照先の読み仮名データセルが空白セルの場合には、""つまり空セルとするように指定してあるのです。 普通の空白セルは並べ替えの時には最後尾にいくのに、なぜか この場合は最前列にきてしまうのです。

  • sgh
  • ベストアンサー率61% (75/121)
回答No.1

並び替えの列を =IF(LEN(TRIM(参照セル))=0,"ん",参照セル) なんてしてはいかがでしょうか?

kitunekko
質問者

お礼

早速のお返事をありがとうございます。ほかにも何かアイデアがありましたら教えていただけますか?

kitunekko
質問者

補足

名簿に使う表は毎月150件ほど用意してあるのですが、なにかもっと・・・スマートな方法はないでしょうか・・・?

関連するQ&A

  • pascal二分木の課題

    レポート課題で、pascalの二分木についての問題が出たのですが、うまくソースコードを作ることができません! 誰かお手伝いよろしくお願いします! 課題:progに木をバランスよく組みなおす関数repackを追加せよ program prog(input,output); const maxRange = 100; type dataType = integer; tree = ^treeCall; treeCall = record data:dataType; left,right:tree end; var root:tree; command:char; value:dataType; function search(d:dataType; t:tree):tree; begin if t=nil then search:=nil(*ブレーク*) else if t^.data=d then search:=t(*見つけた*) else if t^.data>d then search:=search(d,t^.left)(*左を検索*) else search:=search(d,t^.right)(*右を検索*) end; procedure insert(d:dataType; var t:tree); begin (**) if t=nil then begin new(t); t^.data:=d; t^.left:=nil; t^.right:=nil end else if t^.data=d then (*すでに登録されているので何もしない*) else if t^.data>d then insert(d,t^.left) else insert(d,t^.right); end; procedure delete(d:dataType; var t:tree); var temp:tree; procedure deleteMin(var r:tree); var temp:tree; begin temp:=r; while temp^.left<>nil do temp:=temp^.left; t^.data:=temp^.data; delete(temp^.data,r) end; begin if t=nil then writeln('Not Exist.') else if t^.data=d then if (t^.left<>nil) and (t^.right<>nil) then deleteMin(t^.right) else begin temp:=t; if t^.left<>nil then t:=t^.left else t:=t^.right; dispose(temp); end else if t^.data>d then delete(d,t^.left) else delete(d,t^.right) end; procedure writeSet(t:tree); begin if t=nil then (*何もしない*) else begin writeSet(t^.left);(*左へ左へ・・・*) write(t^.data:1,' '); writeSet(t^.right)(*右へ・・・*) end end; (****** Body ******) begin root:=nil; repeat write('> '); read(command); if command in ['i','d','s','w'] then begin (*もしもコマンドがw以外なら値を読み込む*) if command='w' then readln else readln(value); case command of (*数値をバイナリーツリーに挿入 ここでソーティングしたい*) 'i': insert(value,root); 'd': delete(value,root);

  • エクセルのマクロで画像を貼り付け 

    画像をエクセルに貼り付ける作業を行っています。 マクロを使いファイル内の画像(約30枚程度)を1列づつスペースを空け 右方向に4枚 1行スペースを空け 3行目の左に戻り その位置よりまた1列づつスペースを空け右方向に4枚・・・・・ これを繰り返しファイル内の画像をすべて 貼り付けたいのですがうまく動作が出来ません。 何卒ご教授の程よろしくお願いします。 ※マクロ Sub EggFunc_pasteDirImage() ' 変数定義 Dim fileName As String Dim targetCol As Integer Dim targetRow As Integer Dim targetCell As Range Dim shell, myPath Dim pos As Integer Dim extention As String Dim isImage As Boolean ' 選択セルを取得 targetCol = ActiveCell.Column targetRow = ActiveCell.Row ' フォルダ選択画面を表示 Set shell = CreateObject("Shell.Application") Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\Users\0602116.MS\Desktop\") Set shell = Nothing ' フォルダを選択したら... If Not myPath Is Nothing Then fileName = Dir(myPath.Items.Item.Path + "\") Do While fileName <> "" ' ファイル拡張子の判別 isImage = True pos = InStrRev(fileName, ".") If pos > 0 Then Select Case LCase(Mid(fileName, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else isImage = False End Select Else isImage = False End If ' 拡張子が画像であれば If isImage = True Then ' 貼り付け先を選択 Cells(targetRow, targetCol).Select Set targetCell = ActiveCell ' 画像読込み ActiveSheet.Pictures.Insert(myPath.Items.Item.Path + "\" + fileName).Select ' 画像が大きい場合、画像サイズをセル幅に合わせる If Selection.Width > targetCell.Width Or Selection.Height > targetCell.Height Then If Selection.Width / targetCell.Width > Selection.Height / targetCell.Height Then Selection.Height = Selection.Height * (targetCell.Width / Selection.Width) Selection.Width = targetCell.Width Else Selection.Width = Selection.Width * (targetCell.Height / Selection.Height) Selection.Height = targetCell.Height End If End If ' 表示位置をセル中央に移動 Selection.Top = targetCell.Top + (targetCell.Height - Selection.Height) / 2 Selection.Left = targetCell.Left + (targetCell.Width - Selection.Width) / 2 ' 貼り付け先行を+1 targetCol = targetCol + 2 End If fileName = Dir() Loop MsgBox "画像の読込みが終了しました" End If End Sub

  • Excelの並び替え

    Excelの並び替え(フィルター機能使用)についてですが、 普通に1→2→3→…のように数字だけでしたら、問題なく並び替えられます。 しかし、画像のように枝番が含まれているとき、 どのようにすれば、ちゃんとした順番になるのでしょうか。 (画像の例だと1→2→3→10→11→…というようになってしまいます。) また、文字例が入っている場合(○○1,△△1など)も同じような現象が起きるのですが、これも対処できるのでしょうか。 よろしくお願いします。

  • エクセル 並び替えがうまくいかない。

    不法投機されたゴミの種類ごとの個数が記載されているエクセルの表を仕事で使用しています。 数が多い順に1位~3位までのゴミの種類をあげてくれと上司にいわれたので並び替えを使用し算出しようとしました。ところが右端にあるゴミの個数のみ空白行がない形でびっしり並び替えされ、並び替えされなかった左端にあるゴミの種類の項目と対応しなくなってしまいました。 そのため、結局 目視で探すことになりました。 このような一つの表であるにもかかわらず、特定の列のみ並び替えされ、連動して並び替えしてほしい列が並び替え対象外となる理由ないしは回避方法についてご存知の方がいたらご教示ください。

  • Excelでの並び替え

    Excelの5列の表があります。 この表のデータの並び替えをしたいのですが、3列目は計算式が入っているので、そのままで並び替えをしたいのですが、良い方法を教えて下さい。

  • Excel 並び替え

    横に並んでいる情報を並び替えたいです。 説明が難しいので、図に示します。 Excelの機能を使ってできるものでしょうか。 マクロを組まないと無理ですか?

  • EXCELの並び替えについて

    はじめまして。 表が自動的に並び替えれないか四苦八苦しております。 例えば、 1AB、1BD、2EF、3HI… と、続く表があるのですが、違うシートに表を作り、1から始まる値、2から始まる値をそれぞれ表に抽出していきたいのですが、全くわかりません。 いったいどうしたらいいのでしょう? 教えていただけたら幸いです。

  • エクセルの並び替え

    エクセルで野球の成績表を作っています。 打率、打点、盗塁などいろいろ項目があり、その中の打率順に並び替えるにはどうすればいいでしょうか? いちいちコピペするしかないのでしょうか?

  • エクセルの並び替えが出来ません。

    エクセル2002を使っています。データーを並べ替えようとしましたが、 「この操作には同じサイズの結合セルが必要です」と メッセージが表示されて並べ替えが出来ませんでした。 並べ替え出来る方法を教えてください。 尚、OSはWindows Meです。 宜しくお願い致します。

  • エクセルで並び替えがうまくいきません。

    エクセル2000で並び替えをしている時、先頭行の各セルの項目が「並び替え」ダイアログボックスの「優先されるキー」に表示されず、うまく並び替えることができないことがありました。また、無理やり、「最優先されるキー」のところに、たとえばE列とか入れて並び替えをさせようとしたら、セル内のデータが統一なくバラバラになってしまいました。いったんそのBOOKは捨て、再度テータを再入力したところ、今度は問題なく入力できたのですが、こなことってあるのでしょうか?大切なデータを扱っているので、以後、こんなことがないように防止策を講じたいのですが、どうしたらこんなことになるのか原因をまず知りたいと思います。どなたかご存知の方があれば、教えてください。よろしくお願いします。

専門家に質問してみよう