- ベストアンサー
繰り返し1行~28行までを順順にコピーする方法
(B1:B28)を選択しD2に貼り付け(値・行列入れ替え) (B29:B56)を選択しD3に貼り付け(値・行列入れ替え) (B57:B84)を選択しD4に貼り付け(値・行列入れ替え) : : : といった感じに28個セルを選択し順順に貼り付けていく作業を行っているのですが330回くらい繰り返すのであまりに大変なのでマクロを作成しました。やはり途中で操作ミスなどありましたがなんとか記録できました。 しかしこれはVBAで作成すればもっとスマートにできるかな?と思い質問させて頂きます。 どなたかわかる方いれば宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ? Sub Transpose28() Dim i As Integer Application.ScreenUpdating = False For i = 1 To 330 Cells(i * 28 - 27, 2).Resize(28).Select Selection.Copy Cells(i + 1, 4).Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _ , Transpose:=True Next Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
その他の回答 (5)
- nishi6
- ベストアンサー率67% (869/1280)
セルD1に =INDIRECT("B"&(ROW()-1)*28+COLUMN()-3) を入力して、必要なだけコピーしてもできますね。 皆さんと同じようなマクロですが、Forループから数値をとってみました。 最終行をシートの一番下から探しています。 Sub DataCopy() Dim rw As Long '行カウンタ Application.ScreenUpdating = False '画面更新を止める 'B列の入力されている最後まで、B1から28個飛びで処理していく For rw = 1 To Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row Step 28 '行方向のコピー。28個 Range(Cells(rw, 2), Cells(rw + 28 - 1, 2)).Copy '列方向に貼り付け。コピー開始行から貼り付け先の行番号を計算。列はDなので4 Cells((rw - 1) \ 28 + 1, 4).PasteSpecial Paste:=xlValues, Transpose:=True Next Application.ScreenUpdating = True '画面更新 End Sub
お礼
D1のセルに入力するだけでもできるとは・・・・ まだまだ色々勉強していきたいとおもいます。 ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
先に回答されている方と同じですが、極く短く Private Sub CommandButton1_Click() j=2 for i=1 to 200 step 8 ’200は仮の例 Range(Cells(i, 1), Cells(i+8, 1)).Copy 'A列について Cells(j, 2).PasteSpecial Paste:=xlValue, Transpose:=True j=j+1 ’B2からよこに、B3からよこに、B4から横に・・・値だけコピー next i End Sub テストをし易くするため28個を8個の縦の数値を横にする例に変えました。
お礼
ありがとうございます。 こんなに短くできるんですね。。 もっと勉強したいとおもいます。 ありがとうございました。
- HitomiKurose
- ベストアンサー率38% (54/141)
再び。すみません、補足を読んでいませんでした。 Paste:=xlAll は Paste:=xlValues に替えて下さい。
- stork
- ベストアンサー率34% (97/285)
常に28行コピーするのであればループさせればよいだけだと思います。 loopとかnextとかでヘルプを参照してください。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
意味不明なのですが・・・ とりあえず、この書き込みを見た人の多くは Step 27 という文字がうかんでいると思うのですが、処理の内容がよくわからないために、回答をできないでいるのだと思います。 複数行のコピーを繰り返してますが、貼り付け先は[D2/D3/D4]と範囲を持っていません。 これでは直前に貼り付けた値が、常に上書きされるはずです。 また >(値・行列入れ替え) の部分は、全くどのような法則で行われているのか全く記述されておりません。 質問エリアは800文字しか記入できませんが、補足欄には文字制限が無いので、できたら記録したマクロコードを貼り付けてもらえませんか? その方がみんなもわかりやすいと思います。
補足
申し訳ございません。説明不足でした、補足させていただきます。 B1:B28を選択しコピーします。 D1を右クリックし「形式を指定して貼り付け」を選び「値」と「行列を入れ替える」を選択し(演算の項目はしないのままです)貼り付けを行います。 行列を入れ替えて貼り付けているので <B1:B28→D1:AE1>に貼り付けとことになります。 下記がコードになります Range("B1:B28").Select Selection.Copy Range("D1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("B29:B56").Select Application.CutCopyMode = False Selection.Copy Range("D2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("B57:B84").Select Application.CutCopyMode = False Selection.Copy Range("D3").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True お願いします
お礼
ありがとうございます。 おかげでかなり楽な作業になりました。 またよろしくお願いします。