質問: エクセル マクロでセルを自動移動 例1のようになっているエクセル表があります。 データは右方向、下方向へ増えます。 cの列以降は4つ単位でしかデータは増えません。 それを例2の表のように列a,bのデータはそのままに cの列以降の4つのセルを区切りに下の行に移動して、 空白の列まで言ったらa2の行以降を最後の行まで繰り返しするという マクロを書くことは可能でしょうか。 出来ましたらそのマクロを教えてください。 例1 a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 k1 l1 m1 n1 a2 b2 c2 d2 e2 f2 g2 h2 i2 j2 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 k3 l3 m3 n3 例2 a1 b1 c1 d1 e1 f1 a1 b1 g1 h1 i1 j1 a1 b1 k1 l1 m1 n1 a2 b2 c2 d2 e2 f2 a2 b2 g2 h2 i2 j2 a3 b3 c3 d3 e3 f3 a3 b3 g3 h3 i3 j3 a3 b3 k3 l3 m3 n3
回答: コードを書いてくださいという質問(と言うより依頼)はこのコーナーの規約違反です。 こんな程度のことまで、丸投げするのは不勉強です。 ーー dにデータ最終行を求める。 for i=1 to d rにi行の最右端列を求める for j=3 r step 4 別にデータを持っていくシートの方の行カウンタをkとする a,b列をa,b列に。その後の4行をc-f列へ k=k+1 jの繰り返し iの繰り返し。 このロジックをまず抑えること。 == sub test01() dim sh1, sh2 as worksheet set sh1 = worksheets("sheet1") set sh2 = worksheets("sheet2") d = sh1.range("a65536").end(xlup).row msgbox d k = 1 for i = 1 to d r = sh1.range("iv" & i).end(xltoleft).column msgbox r for j = 3 to r step 4 sh2.cells(k, "a") = sh1.cells(i, "a") sh2.cells(k, "b") = sh1.cells(i, "b") sh1.activate sh1.range(cells(i, j), cells(i, j + 3)).copy sh2.cells(k, 3) k = k + 1 next j next i end sub ーーー 全体的な構想を組み立てると言うことのほかに この中で初心者に難しい点は シートを2つ処理対象にする方法 最下行行番号を求める方法 最右列列番号を求める方法 コピー貼り付けを1行で済ます方法 データアウトプットのシートの記入位置を示す行ポインタのkの使い方 などかな。これらを出来なければvbaで何も出来ない状態のはず。