- ベストアンサー
列を変更して転記する方法についての質問
- 質問者は、A列の値をF列に転記する方法を知りたいとしています。
- また、15行までいくと2列横にズレて転記し、さらに15行で2列横と続けたいとしていますが、うまくできないと述べています。
- 質問者は、ExcelのVBAコードを使用して転記を試みていますが、値が置き換わるだけで転記ができない状況です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Cells(1, ii).End(xlUp).Offset(0, 1).Value = Cells(i, 1).Value Cells(1, ii)で1行目を指定して最終行を求めていますので全てE列(ii=5なので)の1行の右横(F1)に転記する記述となっています。 Cells(Rows.Count, ii).End(xlUp).Offset(0, 1).Value = Cells(i, 1).Value このように変更したとしてもE列には何も値がありませんから全てF1にデータが入ることになります。 ii = 6にして Cells(Rows.Count, ii).End(xlUp).Offset(1, 0).Value = Cells(i, 1).Value としたらいけそうに感じますが、列に何もデータが無い場合End(xlUp)でいちばん最初に返る値が0ではなく1なので、2行目からデータが転記されていきます。1行めに項目行があればfor i=2 にして Ifの=15を=16にしておけばこれでもいけるでしょう。ただし、If Cells(Rows.Count, ii).End(xlUp).Row = 16 Then にしてください。 1行めからデータを転記したい場合には上記の理由でOffsetが使えませんから質問者さんのコードをなるべく変更しないように考えた場合、単純に変数を1個追加して以下のようにしてもいいと思われます。 Sub TEST2() Dim i As Long, ii As Long, j As Long Dim myR As Long myR = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row ii = 6 j = 1 For i = 1 To myR Cells(j, ii).Value = Cells(i, 1).Value If j = 15 Then ii = ii + 2 j = 1 Else j = j + 1 End If Next i End Sub 何か変だなと思ったら、変数を使って指定してる箇所の値をDebug.Printで確認することができます。 今回の場合だと、たとえば Debug.Print Cells(1, ii).End(xlUp).Offset(0, 1).Address とするとイミディエイトウィンドウに書き込もうとしているセルのアドレスが表示されます。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>15行までいけば2列横にズレて 2列動かした「どこの行に」転記したいのですか。 ふつーに?考えると: sub macro1() dim r as long, c as long c = 6 for r = 1 to range("A65536").end(xlup).row step 15 cells(1, c).resize(15,1).value = cells(r, 1).resize(15,1).value c = c + 2 next r end sub ご相談を文字通り読み取ると: sub macro2() dim r1 as long, r2 as long, c as long c = 6 for r1 = 1 to range("A65536").end(xlup).row step 15 for r2 = r1 to r1 + 14 cells(r2, c).value = cells(r2, "A").value next r2 c = c + 2 next r1 end sub
お礼
keithin様 ありがとうございます。 質問内容があいまいで申し訳ございません。 ふつーに考える方が、私が求めてものです。 ありがとうございます。
お礼
kmetu様 ありがとうございます。 詳しく解説して頂き、とても勉強になりました。 ありがとうございます。