- ベストアンサー
エクセルのデータ入れ替え方法
- エクセルのデータを縦に入れ替える方法を教えてください。
- 現在、コピーと貼り付けでデータを入れ替えていますが、量が多く時間がかかります。効率的な方法があれば教えてください。
- マクロや関数を使ったデータの縦方向入れ替えの方法も教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
元デーの有るのがSheet1 並べ替えをSheet2に行いました。参考に Sub Test() Dim c As Range Dim a As Long, b As Long a = 4: b = 4 With Sheets("Sheet1") For Each c In .Range("C2:Z" & .Cells(Rows.Count, "C").End(xlUp).Row) If c.Row Mod 2 = 0 Then a = a + 1 Sheets("Sheet2").Columns("A:B").Cells(a).Value = c.Value Else b = b + 1 Sheets("Sheet2").Columns("C:D").Cells(b).Value = c.Value End If Next End With End Sub
その他の回答 (6)
- MackyNo1
- ベストアンサー率53% (1521/2850)
関数で表示するなら以下の式を入力して右方向に4つ下方向に適当数オートフィルしてください。 =OFFSET(Sheet1!$B$2,INT((COLUMN(A1)-1)/2)+(INT((ROW(A1)-1)/12))*2,(MOD(ROW(A1)-1,12))*2+MOD(COLUMN(A1)-1,2)+1)
お礼
今回は、回答者2番目の方の方法で解決しましたが、説明されたとおりにやってみました、こちらも一瞬にしてデータが出てきました。 しかし、皆さん短時間でよく回答できますね。自分には信じられません。 ご回答ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No5です。 シート2のA2セルが上限、B2セルが下限、C2セルが上限、D2セルが下限と入力されているとします。この文章が抜けておりました。ごめんなさい。
- KURUMITO
- ベストアンサー率42% (1835/4283)
お示しの元のデータがシート1に有って、C1セルに上限、D1に下限、右横の列にそれが繰り返されてZ1セルまで入力されているとします。 B2セルにはa、B3セルにはb、B4セルにはa、B5セルにはb、のように下方に繰り返して入力されているとします。 そこでお望みの表をシート2に表示させるとして、A1とB1セルが結合されてa、C1セルとD1セルが結合されてbのように入力されているとします。 A3セルには次の式を入力してD3セルまで横にドラッグコピーしたのちに下方向にもドラッグコピーします。 =IF(INDEX(Sheet1!$C:$Z,IF(COLUMN(A1)<=2,ROUNDUP(ROW(A1)/12,0)*2,ROUNDUP(ROW(A1)/12,0)*2+1),IF(MOD(COLUMN(A1),2)=1,MOD(ROW(A1)-1,12)*2+1,MOD(ROW(A1)-1,12)*2+2))=0,"",INDEX(Sheet1!$C:$Z,IF(COLUMN(A1)<=2,ROUNDUP(ROW(A1)/12,0)*2,ROUNDUP(ROW(A1)/12,0)*2+1),IF(MOD(COLUMN(A1),2)=1,MOD(ROW(A1)-1,12)*2+1,MOD(ROW(A1)-1,12)*2+2)))
お礼
今回は、回答者2番の方の方法で解決しましたが、説明された順序でやってみました。 こちらも一瞬にしてデータが出てきました。 ご回答ありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
ANo.3です。 もし、元データのリストがK列よりも右側にある列にも続いている場合には、ANo.3で挙げたSheet3に入力する各関数の中で、 Sheet1!$B:$K となっている箇所を、適時変更して下さい。
お礼
一度、説明された通りにやってみましたが、うまくいきませんでした。 2番目の回答者様の方法で今回は解決しました、ただ時間の空いたときに挑戦したいと思います。 ご回答ありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データのリストがSheet1にあり、Sheet3のA列~E列を作業列として使用して、Sheet2に並べ替えたリストを表示させるものとします。 まず、Sheet3のA2セルに次の関数を入力して下さい。 =INT((ROWS($2:2)*2-1)/COLUMNS(Sheet1!$B:$K))+ROW(Sheet1!$A$2) 次に、Sheet3のB2セルに次の関数を入力して下さい。 =MOD(ROWS($2:2)*2-1,COLUMNS(Sheet1!$B:$K)) 次に、Sheet3のC2セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,$A2)<>"",COUNT($D2:$E2)=2),"☆"&INDEX(Sheet1!$A:$A,$A2)&"★"&COUNTIF(C$1:C1,"☆"&INDEX(Sheet1!$A:$A,$A2)&"★*")+1,"") 次に、Sheet3のD2セルに次の関数を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet1!$B:$K,$A2,$B2)),INDEX(Sheet1!$B:$K,$A2,$B2),"") 次に、Sheet3のE2セルに次の関数を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet1!$B:$K,$A2,$B2+1)),INDEX(Sheet1!$B:$K,$A2,$B2+1),"") 次に、Sheet3のA2~E2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 次に、Sheet2の A1セルに a C1セルに b A2セルとC2セルに 上限 B2セルとD2セルに 下限 と入力して下さい。 次に、Sheet2のA3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>COUNTIF(Sheet3!$C:$C,"☆"&A$1&"★*"),"",VLOOKUP("☆"&A$1&"★"&ROWS($3:3),Sheet3!$C:$E,2,FALSE)) 次に、Sheet2のB3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>COUNTIF(Sheet3!$C:$C,"☆"&A$1&"★*"),"",VLOOKUP("☆"&A$1&"★"&ROWS($3:3),Sheet3!$C:$E,3,FALSE)) 次に、Sheet2のA3~B3の範囲をコピーして、Sheet2のC3~D3の範囲に貼り付けて下さい。 次に、Sheet2のA3~D3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。 これで、Sheet2に並べ替えられたリストが表示されます。
- aokii
- ベストアンサー率23% (5210/22062)
aとbのデータを並べ替えてから、=でデータを別シートに抽出しては。
お礼
「=でデータを別シートに抽出しては。」については、フィルターオプションの設定のことだと思いやってみましたが、うまく抽出できずに至りました。 回答ありがとうございました。
お礼
このコードをコピーしマクロ実行したら、一瞬のうちに自分の行いたかったものが出てきて大変助かりました。 ありがとうございました。