• ベストアンサー

エクセル 複数列選択して一列にソートできますか?

エクセル 複数列選択して一列にソートできますか? sheet1 A1~G10 のセルに文字列(名前)がランダムに入力されているとします。空白もあります。このデータは他ファイルからコピーしたものとします。これをsheet2のA列にソートすることはできますか?

noname#150307
noname#150307

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

Sheet1のA1:G10に数式が入っているのなら、回答番号:No.6のコードで試してください。

その他の回答 (6)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

Sheet1のA1:G10に、セル参照式ということなら下記で試してください。 Sheet2で、値に置換しています。 Dim rng1 As Range Dim rng2 As Range Dim c As Range Dim i As Long Dim j As Long Set rng1 = Sheets("Sheet1").Range("A1:G10") Set rng2 = Sheets("Sheet2").Range("A1") For i = 1 To rng1.Columns.Count With rng1.Columns(i) rng2.Offset(j).Resize(.Cells.Count).Value = .Value j = j + .Cells.Count End With Next i Set rng2 = rng2.Resize(j) For Each c In rng2 If c.Value <> "" Then c.Offset(, 1).Value = Application.GetPhonetic(c.Value) End If Next Set rng2 = rng2.Resize(, 2) rng2.Sort _ Key1:=rng2(1, 2), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

VBAの例です。 試してみてください。 Dim rng As Range Dim c As Range Dim i As Long Dim j As Long Set rng = Sheets("Sheet1").Range("A1:G10") For i = 1 To rng.Columns.Count With rng.Columns(i).SpecialCells(xlCellTypeConstants) .Copy Sheets("Sheet2").Range("A1").Offset(j) j = j + .Cells.Count End With Next i Set rng = Sheets("Sheet2").Range("A1", Range("A1").End(xlDown)) For Each c In rng c.Offset(, 1).Value = Application.GetPhonetic(c.Value) Next Set rng = Sheets("Sheet2").Range("A1", Range("A1").End(xlDown)).Resize(, 2) rng.Sort _ Key1:=rng(1, 2), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal 並べ替えに振り仮名を使っています。 振り仮名は機械的に取得されたものです。 正しいかどうか確認を要します。 特に人名・地名は独特な読み方がされるので難しいです。

noname#150307
質問者

お礼

ありがとうございます。 実行時エラー1004 となってしまいます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! No.3です! 再びお邪魔します。 A1~G10セルは直接入力ではなく、外部データということになるわけですね? その場合はふりがな情報は欠落しているはずですので、 PHONETIC関数を使っても何も表示されないと思います。 やはりVBAで対応するしかないようですね! 簡単なVBAを載せておきますので、VBEの標準モジュールにコピー&ペーストして マクロを実行してみてください。 そうすると↓の画像のようにヨミが表示されると思います。 尚、この場合は空白セルには数式が入っていませんので、 Q1セルの数式は =IF(I1="","",COUNTIF($I$1:$O$10,"<"&I1)+COUNTIF($I$1:I1,I1)) でOKかと思います。 (画像のA1~G10セルはSheet3から引っぱって来ています) A1~G10セルを範囲指定し、以下のマクロを実行してみてください。 Sub test() Dim c As Range For Each c In Selection If c = "" Then c.Offset(, 8) = "" Else c.Offset(, 8).Value = Application.GetPhonetic(c) End If Next c End Sub 今度はお役に立てば良いのですが・・・m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 参考になるかどうか判りませんが・・・ 無理矢理って感じの方法です。 A1~G10セルには名前が入っているということですので、 単純に昇順にしてしまうと音読みの順になるのではないでしょうか? (間違っていたらごめんなさい。) そこで↓の画像のように作業用の列(表)を使ってヨミを表示させています。 (画像が小さくて見にくいかもしれません) Sheet1のI1セルに =PHONETIC(A1) として列方向と行方向にデータと同じ列・行数ほどオートフィルでコピーします。 そして、もう一つの作業用の表のQ1セルに =IF(I1="","",COUNTIF($I$1:$O$10,"<"&I1)+COUNTIF($I$1:I1,I1)-COUNTIF($I$1:$O$10,"<>"&"?*")) という数式を入れこれも列方向と行方向にコピーします。 これで元データの昇順の順位が表示されます。 この数値を元にSheet2に表示させるようにします。 Sheet2のA1セルに =IF(COUNT(Sheet1!$Q$1:$W$10)<ROW(A1),"",INDEX(Sheet1!$A$1:$G$10,MAX(INDEX((Sheet1!$Q$1:$W$10=ROW(A1))*ROW($A$1:$A$10),)),MAX(INDEX((Sheet1!$Q$1:$W$10=ROW(A1))*COLUMN(Sheet1!$A$1:$G$1),)))) という数式を入れ、オートフィルで下へずぃ~~~!っとコピーすると 画像のような感じになります。 以上、かなり手間がかかりますが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m

noname#150307
質問者

お礼

ありがとうございます。 A1~G10セルには名前が入っていますが 名前は値ではなくてリンク先のセル番号が入っています。 で Sheet1のI1セルに =PHONETIC(A1) として列方向と行方向にデータと同じ列・行数ほどオートフィルでコピーします。 名前のふりがなは出ませんでした。出す方法はありますか?

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

数字のみなら Sheet2!A1=IF(ISERROR(SMALL(Sheet1!$A$1:$G$10,ROW())),"",SMALL(Sheet1!$A$1:$G$10,ROW())) をA70までコピーで出来ます。 文字を含む場合はVBAを利用すれば可能ですが、数式ではむずかしいですね。

noname#150307
質問者

お礼

ありがとうございます。 文字なんです…。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

できません! 最初にソートしたいデータを1列にしなければなりません。 >A1~G10 7列程度なら「手作業」でも実用的な範囲だと思います。 ご質問の内容は「例」で、実際には「列数が多い」「行数が変わる」というならば、マクロ(VBA)をお勧めします。

noname#150307
質問者

お礼

ありがとうございます。 実際の範囲は、はるかに大きく手作業では無理です。

関連するQ&A

  • エクセルでのソートについて

    エクセルのソートがうまくいきません。 SHP-1 SHP-10 SHP-100 というセルをソートしたいのですが、 文字列がはいっているようです。 文字列の書式を数値に変更し、さらに 空白セルに数値「1」を入力してコピー し、形式を選択して貼り付けの、演算の 乗算。という方法で書式を変更しましたが ソートがうまく出来ませんでした。 何かいい方法はありますでしょうか?

  • エクセル・列の選択について

    エクセル2007を使用しています。 1つの列にデータが、とびとびで入力されている場合(空白が数か所ある)、 データが入力されている一番上のセルから、データが入力されている一番下のセルまで、 選択する方法はありますか? または、データが入力されている一番上のセルから、最下位セル「1048576」まで選択する方法はありますか?(A列の場合、A1は空白です) ショートカットキーなどで可能でしょうか? よろしくお願いします。

  • Excelで複数の列の中の文字を一列に並べる!

    Excelに関して質問です。 複数の列に入力されている文字を一つの列にまとめる方法が知りたいです。 その際、文字が入力されていない箇所は詰めて並べたいと思います。 範囲はB4~AD83の間です。 ただ、状況として範囲内の空白には書式(関数)が入っている状態です。 例  A   B   C     D   E 1文字1 空白 文字2  文字3  空白 2空白 文字4 文字5  空白   空白 F 文字1 文字2 文字3 文字4 文字5 何卒、ご教授よろしくお願いします。

  • エクセルで、ソートすることは出来ますか??

    皆様、お世話になります。 エクセルで・・・ セル 1-A~ZZ ぐらいまでに、 1~43までの数字がランダムに書き込んであります。 この横方向一列に書き込んである、数字を、 小さい順番に、一発で、並び替えることは出来ますか? 小さい順番に並び替えることをソートとかいうと思いますが、出来るのでしょうか? 宜しくお願いします。

  • エクセルでのソート

    こんにちは いつもお世話になっています エクセルのソートについて教えてください。 以下のようなデータがA列にあります。 Sheet1 Aグループ 愛知県 青森県 秋田県 Bグループ 石川県 茨城県 岩手県 愛媛県 Cグループ 大分県 大阪府 岡山県 沖縄県 香川県 鹿児島県 B列以降にデータがあり、複数グループが複数シートに渡ってあります。 ソート手順は例えば、Aグループ、愛知から秋田を範囲選択しソート、次にB、石川から愛媛を範囲選択しソート、以下同じ、Sheet1が済んだらSheet2へ、という作業手順です。 グループごとの件数は異なるが、ソートする優先キー(列)は第一がB列、第二がC列で同じです。 ソート処理自体はマクロの自動記録でやっていますが、グループごとに範囲選択しマクロを使う手順です。 ここで質問ですが、複数シートに複数グループがあります。各シートの各グループの件数は不一致です。これらのグループをなるべく簡単に上記のような同一基準でソートするにはどうすればいいでしょうか。

  • エクセルのソートで文字列がうまく並ばない

    スポーツの記録集計をしています。 A列に氏名,B列以降に記録,試合名,日時,順位などの個人のデータが入ったワークシートがあります。 試合ごとに記録を入力しているので,元々は試合名,日時順になっており,約90人分のデータが1年間で1700行余りになりました。一人が複数の試合や種目に参加しているので,これを個人別にまとめようとA列の氏名でソートしました。 すると,同じ名前なのに別名と判断されてうまく並ばない箇所がいくつかあります。 氏名は漢字なのでおそらくコード順に並ぶのだと思いますが,ほぼ読みの50音順に並んでいる感じです。ところが,たとえば「山田」さんだったら音読みの「さん」と訓読みの「やま」の2カ所に分かれて出てきたりします。一方のセルを他方のセルにコピーしてやり直せばもちろんうまくいきますが,データ数が多く,手作業はしていられません。またソートした後「山田」さんのデータが一つだけ別のところに飛んでいたりすると気がつかないことも考えられます。 スペースが入っていたりもなく,IF関数で同一のセル内容かどうか判断させると「同じ」という結果になります。どう見ても同じセルがソートで違うものと扱われるということはあるのでしょうか。また,こういうときはどう対処すれば良いのでしょうか。 エクセルに詳しい方,このような経験がおありの方,アドバイスをお待ちしています。

  • 文字列を2つに分ける

    10個近くある異なるブックのシートを、新しい1つのブックにまとめてしまおうと考えています。 手動で1つのブック内の複数シートを選択して、新しいブックにコピーしようとしましたが、1つのセルに入力されている文字列の中に、かなり長い(255字以上)ものが含まれており、コピーした際にデータが捨てられてしまいます。 長い文字列を、事前にマクロで探して、2つのセルに分ける (たとえば、A1に長い文章があるなら、A2にセルを挿入して、文字列を2つにわける) ことは可能でしょうか? 分けたあとにそれぞれが255字以下になっていることも確認したいと思っています

  • Excel 空白セルのコピペについて

    http://imgur.com/5e8TsP1 上記図のように、シート1のB列に各文字を入力しています。 そして、A列にはもしB列に文字が入力されていたらID代わりの数値を表示する、という式を入力してあります。 次に、シート1のA列、B列をコピーして、シート2に数値としてペーストをします。 すると、A列は空白のはずが、xldown操作をすると元のセルで式が入力されていたものまで選んでしまい、真の空白セルとして認識してくれません。 そこで、このような例の場合、どうコピーペースト、または選択をすれば偽物の空白 セルを生み出さないように出来るでしょうか? 実際に使用するデータは項目名が多く存在し、マクロですべてのセルを選択→新規ブックを作成してそこにペースト、という処理を行っています。 この時に偽物の空白セルが出ると、データベースに読みこむ際に不都合が生じますので、何とか改善を図りたいです。 VBA、関数、Excel上のテクニックのいずれでも構いませんので、どうかご教授下さい。 よろしくお願いいたします。

  • Excelで1つのセルに入れた複数行の長い文字列をセルの高さを変えずに表示したい

    こんにちは。 Excelについての質問です。 お分かりになる方がらっしゃいましたら教えていただけると幸いです。 Excelのシートに、何行かにわたる長い文字列をコピーしたものを 1つのセルに貼り付けて、全て表示させたいのです。 その時、シートの幅や高さは変えずに、 セル内で「Alt+Enter」で改行されてその高さに収まらない文字列は、 そのまま直下の空いているセルに表示させたいのですが、これは可能でしょうか。 「折り返して全体を表示する」はオフの状態です。 この設定で1行だけの文字列だと幅以上の文字列は自然に横の空白のセルに流れてくれますよね? これを、「Alt+Enter」の複数行ver.でやりたいのですが、 このようなことは可能なのでしょうか。 質問が分かりにくくて申し訳ありません。 他にも、いい方法をご存知でしたらアドバイスをお願いいたします。

  • エクセルで複数の文字を選択

    エクセルで同じセル内で複数の文字を選択することはできますか? 複数のセルを選択することは、Ctrlを押しながらセルをクリックでできますよね。 同じセル内で複数の文字を選択するのはやはり無理でしょうか? 例えば「大阪と京都と奈良」という文字をセル内に入力していて「大阪」「奈良」の部分を選択したいんです。 セル内に入力した文字で複数箇所の色を変えたいんですけど、いちいち選択して色を変えるのが面倒で。一度に選択できないのかな、と思ったのですが・・・。 よろしくお願い致します。

専門家に質問してみよう