プロが教える店舗&オフィスのセキュリティ対策術

縦一列(EXCELの場合A列に10000以上もあります)にずらっと並んだデータがあります。
このデータは、測定を100回ぐらい行ったデータが下に加算されてるため縦長なのです。

そこでこのデータを1回の測定データごとに一列に並べたいと考えています。
それぞれのデータの頭にはpointやらnoneという文字があるので、その文字が出てきたら列を変える!みたいなプログラムをEXCELでは出来ないのでしょうか?
あまりプログラムとかわからないので、何か簡単に並べかえる方法ってないでしょうか?

丁寧に教えていただけたら嬉しいです。よろしくお願いいたします。

A 回答 (4件)

あ、1回目と2回目の測定データの間に空のセルが存在しませんか?もし存在するということであれば、



'データの抽出&並び替え
For ii = 1 To 65535 <=この65535をデータ最終行値に変更して、

'データが存在しない場合は並び替え終了
If IsEmpty(Sheet1.Cells(ii, 1)) Then
Exit For
End If
の部分を消してください。

これで上手く行くと思います。
    • good
    • 0
この回答へのお礼

おおおおおおおおっ、できました。(量が多いのでかなり時間がかかりますが。。。)

本当にご丁寧にありがとうございました。
かなり尊敬してます。。。20ptじゃなくて10000ptぐらい差し上げたい気分です。

またこういうデータ整理とかで困ったことがあると思いますので、その時はまたよろしくお願いします。

お礼日時:2001/04/26 12:10

質問の内容の確認ですが、データは、以下のような感じであるのですよね?



 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

っと言う風な感じですよね?(スペースが詰まってしまうので見づらいですが・・・)

上記の内容であれば、先のプログラムで並び替えが可能です。

この回答への補足

A列に縦に一列に並んでいますが、データの間にはスペースが入っています。

A列
Point
541
145
54564
1545

Point
5245
4865
5277
1250

・・・

↑ こんな感じになっています。(noneは気にしないでください。)
結果は、上に書いてあるとおりにしたいと思ってます。

それぞれのデータの間にスペースが入ってるので、その時点で終了してしまうみたいです。だからうまくいかなかったのだと思います。
データの終了はデータが存在しない場合に終了するというのではなくて、たとえば10000行目まで行うかというのにしていただければ嬉しいのですが。。。

補足日時:2001/04/26 11:55
    • good
    • 0

以下の手順で実行してください。


1.ツール→マクロ→Visual Basic Editor
<以下、BasicEditorのWindow>
2.表示→コード
3.下記のプログラムSub DataSort()~End Subまでを表示されたウィンドウにコピー
4.実行→Sub/ユーザーフォームの実行

これで並び替えが終了していますので、Visual Basic Editorのウィンドウを閉じてください。

この回答への補足

私の場合は、VBAを立ち上げてからコピーして保存してからEXCELの画面でツール→マクロ→マクロでやりました。
プログラムの中身は、検索の文字だけ変更しました。

don chaさんの場合も、私の場合も結果は同じでした。
やはりB列に1回目の測定データしかコピーされてません。

補足日時:2001/04/26 11:30
    • good
    • 0

機械的に並び替えさせるには、やはり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

この回答への補足

わざわざ貴重な時間を使って回答していただいてありがとうございました。

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

補足日時:2001/04/26 11:02
    • good
    • 0
この回答へのお礼

適当にやってみました。。。
で、できた!と思ったのですがうまくいきませんでした。

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

お礼日時:2001/04/26 11:27

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