- ベストアンサー
エクセルの質問です
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! データは必ず5行ごとの繰り返しだとして・・・ 関数でじっくり行合わせを行うことも可能だと思いますが、 手抜きをさせていただいて、VBAでの一例です。 Sheet1のデータをSheet2に表示するようにしてみました。 ↓の画像のようにSheet1のデータは2行目以降にあるとします。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long Dim ws2 As Worksheet Set ws2 = Worksheets("Sheet2") ws2.Cells.ClearContents k = 1 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 5 '↑ Sheet1のデータが1行目からの場合は「2」の部分を「1」に! Range(Cells(i, 1), Cells(i + 4, 2)).Copy Destination:=ws2.Cells(1, k) k = k + 2 Next i End Sub 'この行まで 参考になりますかね?m(_ _)m
その他の回答 (5)
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート1のAおよびB列の2行目から下方にお示しのデータが入力されているとしたらシート2やシート1の適当なセルに次の式を入力して5行目まで下方にドラックコピーしたのちに右横方向にもドラッグコピーします。 =IF(MOD(COLUMN(A1),2)=1,INDEX(Sheet1!$A$2:$A$500,(MOD(ROW(A1)-1,5)+1)+ROUNDDOWN(COLUMN(A1)/2,0)*5),INDEX(Sheet1!$B$2:$B$500,(MOD(ROW(A1)-1,5)+1)+ROUNDDOWN((COLUMN(A1)-1)/2,0)*5))
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
セルの挿入とかマクロとか、いろんなご回答が出てますが、数式でもちょっと。A・B列にデータが入力されているとして、C列に通し番号を振る。「1、2、3」と縦に入力してオートフィルなどで番号を振れます。あとはVLOOKUPかINDEX(MATCH)の式でA・B列の値を検索するだけ。 ただしVLOOKUPだと通し番号の列が左端にないといけないので、列を入れ替える。よりVLOOKUPのほうが知名度が高いでしょうから、VLOOKUPで続きを解説。 C列を切り取ってA列の左に挿入。これによりC列のデータがA列に、A・B列のデータがB・C列に来ます。次のとおり入力。コピーやドラッグ・アンド・ドロップも使っていいですよ。 A B C D E F G H I J 1 1 あ ア 1 6 11 2 2 い イ 2 7 12 3 3 う ウ 3 8 13 4 4 え エ 4 9 14 5 5 お オ 5 10 15 6 6 か カ 7 7 き キ 8 8 く ク 9 9 け ケ 10 10 こ コ 11 11 さ サ 12 12 し シ 13 13 す ス 14 14 せ セ 15 15 そ ソ で、E8・F8セルに次の式を入力。 E8 =vlookup(e1,$A:$C,2,) F8 =vlookup(e1,$A:$C,3,) 最後に、E8:F8をコピーし、E8:J12の範囲に貼り付け。 ただ思うのは、せっかく縦1列に並んでいるデータを横に行列みたいに並べるというのは、データ量が多いと扱いにくくなるだけのような気も。余計なお世話かもしれませんが…。少ないなら難しいことしなくても、ドラッグ・アンド・ドロップでセルを動かせばいいだけですしね。
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 お礼欄の >700~1000のシートが200ぐらいつながっています。 の意味がよく理解できないのですが・・・ もしかして700番台・800番台・・・というようにまとめて列毎に表示したい!というコトでしょうか? そこらへんが判れば具体的にアドバイスできると思います。 ただせっかく投稿するので、こちらで上記のようなコトがご希望だという前提でもう一度コードを 載せてみます。 (前回同様の操作です。前回のコードは削除しておいてください) Sub test() 'この行から Dim i, k, M As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") Application.ScreenUpdating = False ws.Cells.Clear Columns(1).Insert For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row Cells(i, 1) = Int(Cells(i, 2) / 100) * 100 If WorksheetFunction.CountIf(ws.Columns(1), Cells(i, 1)) = 0 Then k = k + 1 ws.Cells(k, 1) = Cells(i, 1) End If Next i For k = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row Columns("A:C").AutoFilter , field:=1, Criteria1:=ws.Cells(k, 1) M = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(2, 2), Cells(M, 3)).Copy Destination:= _ ws.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) Next k Columns("A:C").AutoFilter ws.Columns(1).Delete Columns(1).Delete ws.Columns.AutoFit Application.ScreenUpdating = True End Sub 'この行まで ※ 上記マクロを実行すると↓のような感じになります。 今回も外していたらごめんなさいね。m(_ _)m
お礼
何度も御回答ありがとうございました。 No2のコードで自己解決できました。 今後とも宜しくお願い致します。
- Cupper-2
- ベストアンサー率29% (1342/4565)
自分だったら… 5行おきにセルを列方向に挿入して右側へ順次ずらし 2列おきに先頭行から空白のセルを削除して上へずらす …かな。 Shiftキー や Ctrlキー を押しながら 矢印キーを押すと いろいろと便利なセルの選択方法を実行できます。 それを使えば、6万行ほどあっても10分くらいで終わらせられるかな。 (当然ながら記録マクロを併用しますよ?) ちょっとした操作であれば、マクロやら関数やら、OKWaveやら使わなくても 簡単に処理できたりします。 ええ、ここに質問書いている時間で処理が完了したりします。 そんなですから、ShiftキーとCtrlキーの使い方を覚えておくと便利ですよ。
- asuncion
- ベストアンサー率33% (2127/6289)
同じ作業を頻繁に行なうのであれば、 「1回目の操作手順をマクロ化しておく」 っていう方法もありだと思います。
お礼
早速の御回答ありがとうございました。 実は、先ほどの添付シートは簡略化するために表記したものでして、実際にはx軸成分が700~1000のシートが200ぐらいつながっています。 先ほどは1~5が3つ繋がっていました。 この場合どうすればいいのでしょうか? コード自体はまったく理解できせん。 何卒宜しくお願い致します。