• ベストアンサー

EXCELでの並べ替え

縦一列(EXCELの場合A列に10000以上もあります)にずらっと並んだデータがあります。 このデータは、測定を100回ぐらい行ったデータが下に加算されてるため縦長なのです。 そこでこのデータを1回の測定データごとに一列に並べたいと考えています。 それぞれのデータの頭にはpointやらnoneという文字があるので、その文字が出てきたら列を変える!みたいなプログラムをEXCELでは出来ないのでしょうか? あまりプログラムとかわからないので、何か簡単に並べかえる方法ってないでしょうか? 丁寧に教えていただけたら嬉しいです。よろしくお願いいたします。

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

  • ベストアンサー
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.4

あ、1回目と2回目の測定データの間に空のセルが存在しませんか?もし存在するということであれば、 'データの抽出&並び替え For ii = 1 To 65535 <=この65535をデータ最終行値に変更して、 'データが存在しない場合は並び替え終了 If IsEmpty(Sheet1.Cells(ii, 1)) Then Exit For End If の部分を消してください。 これで上手く行くと思います。

128yen
質問者

お礼

おおおおおおおおっ、できました。(量が多いのでかなり時間がかかりますが。。。) 本当にご丁寧にありがとうございました。 かなり尊敬してます。。。20ptじゃなくて10000ptぐらい差し上げたい気分です。 またこういうデータ整理とかで困ったことがあると思いますので、その時はまたよろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.3

質問の内容の確認ですが、データは、以下のような感じであるのですよね?  A列 1:point 2:1 3:2 4:3 5:4 6:none 7:5 8:6 9:7 10:8 11:point 12:2 13:3 14:4 ※「1:」等は行 これを  A列 B列 C列 1:point none point 2:1 5 2 3:2 6 3 4:3 7 4 5:4 8 っと言う風な感じですよね?(スペースが詰まってしまうので見づらいですが・・・) 上記の内容であれば、先のプログラムで並び替えが可能です。

128yen
質問者

補足

A列に縦に一列に並んでいますが、データの間にはスペースが入っています。 A列 Point 541 145 54564 1545 Point 5245 4865 5277 1250 ・・・ ↑ こんな感じになっています。(noneは気にしないでください。) 結果は、上に書いてあるとおりにしたいと思ってます。 それぞれのデータの間にスペースが入ってるので、その時点で終了してしまうみたいです。だからうまくいかなかったのだと思います。 データの終了はデータが存在しない場合に終了するというのではなくて、たとえば10000行目まで行うかというのにしていただければ嬉しいのですが。。。

すると、全ての回答が全文表示されます。
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.2

以下の手順で実行してください。 1.ツール→マクロ→Visual Basic Editor <以下、BasicEditorのWindow> 2.表示→コード 3.下記のプログラムSub DataSort()~End Subまでを表示されたウィンドウにコピー 4.実行→Sub/ユーザーフォームの実行 これで並び替えが終了していますので、Visual Basic Editorのウィンドウを閉じてください。

128yen
質問者

補足

私の場合は、VBAを立ち上げてからコピーして保存してからEXCELの画面でツール→マクロ→マクロでやりました。 プログラムの中身は、検索の文字だけ変更しました。 don chaさんの場合も、私の場合も結果は同じでした。 やはりB列に1回目の測定データしかコピーされてません。

すると、全ての回答が全文表示されます。
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.1

機械的に並び替えさせるには、やはりVBAが必要になりますね。 簡単なVBAなんで組んでみました。 仕様としては、データが入っているシートをsheet1、変換後のデータをsheet2に出力します。注意としては、列(測定回数?)が255以内であることが必要です。(エラーチェックが入っていません) Sub DataSort() Dim ii As Long Dim OpLn As Long Dim OpCl As Long Dim Chk As String '出力先の行・列の設定 OpLn = 1 OpCl = 1 '最初の行に必ず区分文字列がある場合は0にすると最初の列から出力 'データの抽出&並び替え For ii = 1 To 65535 'データが存在しない場合は並び替え終了 If IsEmpty(Sheet1.Cells(ii, 1)) Then Exit For End If 'データを取得し、区分文字であれば次行の先頭にする Chk = Sheet1.Cells(ii, 1) If (Chk = "point" Or Chk = "none") Then OpLn = 1 OpCl = OpCl + 1 End If Sheet2.Cells(OpLn, OpCl) = Chk OpLn = OpLn + 1 Next End Sub

128yen
質問者

お礼

適当にやってみました。。。 で、できた!と思ったのですがうまくいきませんでした。 Sheet1のA列に縦長のデータを載せてマクロを実行したら、1回の測定分のデータだけがSheet2のB列にコピーされていました。その他のデータの値はSheet2にいってません。。。 もしかして私のやり方が間違っていたのかもしれませんので、丁寧に教えていただきたいのですが。。。よろしくお願いいたします。

128yen
質問者

補足

わざわざ貴重な時間を使って回答していただいてありがとうございました。 今EXCEL2000を使っているのですが、VBAって何なんでしょうか?ビジュアルベーシックですか?(ちなみにぜんぜんやり方がわかりません) できればこのプログラムをどうやって動かすかとか初心者の私にわかるように丁寧に解説していただけないでしょうか? ツール→マクロ→Visual Basic Editorからやるんでしょうか? その後も丁寧に教えてください。。。 わがままばかり言ってすみません。。。

すると、全ての回答が全文表示されます。

関連するQ&A