• ベストアンサー
  • 困ってます

エクセル マクロでセルを自動移動

例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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数719
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • _Kyle
  • ベストアンサー率78% (109/139)

なかなか回答がつかないようなので、とりあえず。 [移動]よりも[転記]の方が簡単ですし、高速です。 Sheet1のA1セル以下に元データがあり、 Sheet2のA1セル以下に転記する場合だとこんな感じかと。 '================↓ ココカラ ↓================ Sub Sample()  Dim orSht As Worksheet  Dim rtSht As Worksheet  Dim i As Long '元範囲行カウンタ  Dim j As Long '元範囲列カウンタ  Dim k As Long '先範囲行カウンタ  Set orSht = Worksheets("Sheet1") '元シート  Set rtSht = Worksheets("Sheet2") '先シート  i = 1 '元範囲先頭行  k = 1 '先範囲先頭行  Do Until orSht.Cells(i, 1) = ""   j = 3   Do Until orSht.Cells(i, j) = ""    rtSht.Cells(k, 1).Resize(, 2).Value _     = orSht.Cells(i, 1).Resize(, 2).Value    rtSht.Cells(k, 3).Resize(, 4).Value _     = orSht.Cells(i, j).Resize(, 4).Value    j = j + 4    k = k + 1   Loop   i = i + 1  Loop End Sub '================↑ ココマデ ↑================ Excel2003で動作確認。以上ご参考まで。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

Excel2002でしたが正常に動作しました。 大変助かりました。有り難うございます。

関連するQ&A

  • Excelのマクロを教えてください。

    Excelのマクロを教えてください。 Sheet1 F列(商品) F2テレビ、F3DVD、F4携帯電話、サプライ、、、F32まで商品あり。 I列~N列の1段目(人*増える場合あり) I1佐藤、J1高橋、K1田中、L1中村、、、 I2~N32まで、1、2、3と個数が入力されています。 A列~E列とG列とH列は今回の処理に不要なデータがいます。 これをSheet2に A列に人、B列に商品、C列に数 例) A1 佐藤、B1 テレビ、C1 1 A2 佐藤、B2 DVD 、C2 3 A3 高橋、B3 携帯電話、C3 2 のように、書き出すマクロを教えていただけませんか? 別にマクロでなくても、Excel2007までの機能でできることであればそれでもいいです。 丸投げして申し訳ありません。

  • excel で質問です。

    A1に0 B1に0 A2の0 B2に0 A3に0 B3に0 ・ ・ 上記の様に予めおが入力されています、これを A1='D:\[20110501.xls]Sheet1'!B34 A2='D:\[20110501.xls]Sheet1'!N34 A3='D:\[20110501.xls]Sheet1'!H34 B1='D:\[20110502.xls]Sheet1'!B34 B2='D:\[20110502.xls]Sheet1'!N34 B3='D:\[20110502.xls]Sheet1'!H34 上記の様にしたいのですが、以前教えて頂いた置き換えの方法は 実に面倒で大変です。 そのファイル(20110501)が出来ると、セルの=以降を自動(ボタン?)で入力したい。

  • エクセルでこんなこと、できるのでしょうか?

    たとえばA1に1 B1に2 C1に3というようにJ1に10まで入力 (この1~10は人の番号) A2からJ2には1から10の人のそれぞれの科目Aの点数 同じくA3からJ3には科目Bの点数、と言う風に入れていきます。 K2、K3・・・に入れたいのは、点数が一番高かった人の番号 単に一番高かった点数ならMax関数を使うというのはわかるのですが、違うセル番地にあるその点数を取った人を指定するという方法(関数?)が思いつきません。こんなこと、できるのでしょうか?

その他の回答 (1)

  • 回答No.1
  • imogasi
  • ベストアンサー率27% (4558/16316)

コードを書いてくださいという質問(と言うより依頼)はこのコーナーの規約違反です。 こんな程度のことまで、丸投げするのは不勉強です。 ーー 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で何も出来ない状態のはず。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

規約違反とは知らず書き込んでしまい、すみませんでした。 そんな私にご丁寧に回答頂き有り難うございます。

関連するQ&A

  • エクセルで単語帳を作り、複数セルで並べ替えをしたい

    A1 increase B1 動詞 C1 増える A2 beautiful B2  形容詞 C2 美しい A3 guarantee B3 名詞 C3 保証 ・ ・ ・ というように、単語帳を作り、行単位で、アルファベット順や品詞別に並べ替えたいのですが、 どのように設定すれば良いのかどなたかわかる方、教えてくださると嬉しいです。 上の例で言うと、 アルファベット順に A2B2C2 ↓ A3B3C3 ↓ A1B1C1 と言った具合です。単純にA列のみをアルファベット順に並び変えることはできるのですが、 行単位ではどうするのかわからずに困っています。

  • エクセルでA行をコピーし、3列づつ貼り付ける方法

    エクセルでAの行(たとえばA1~A63まで)の文字列を全てコピーし、一括で3列21行の範囲内で張り付けることは可能でしょうか? 3列21行の範囲内で貼り付けるとは、たとえば下記の範囲内で、I2、J2、K2、I3、J3、K3の順番で張り付けることです。 I2、J2、K2 I3、J3、K3 I4、J4、K4 I5、J5、K5 ・・・ ・・・ I19、J20、K21 いろいろググってみたのですが、思うような答えが見つかりませんでした。 分かる方がおりましたら、何卒ご教示のほど、宜しくお願い致します。

  • エクセルのvbaの質問

    a b c d e f g h i j k l m n 1 p1 p2 p3 2 s1 s2 s3 s4 s1 s2 s3 s4 s1 s2 s3 s4 3 あ い う お え い あ う お え い 4 10 25 20 40 25 50 10 30 20 15 17 5 6 7 p1 p2 p3 8 =a3 =b3 =c3 =d3 9 =a4 =b4 =c4 =d4 こんな感じでデータが入ってます。 p1の内訳がs1からs4という感じです。 で、a7からc3にp1,p2,p3とありますが、これをクリックしたら、 またはa7にp1とかp2と入力したら、a8からd9にそれぞれの内訳が参照されるようなマクロを組みたいのです。 どうか教えてください。 見づらいですね。 データはa1,f1,k1にそれぞれp1,p2,p3 a2からd2,f2からi2,k2からn2にそれぞれs1,s2,s3,s4 a3あ,b3い,c3う,d3"",e3"",f3お,g3え,h3い,i3あ,j3"",k3う,lお, m3え,n3い a3 10,b3 25,c3 20,d3 "",e3 "",f3 40,g3 25,h3 50,i3 10,j3 "",k3 30,l3 20,m3 15,n3 17 a7 p1,b7 p2,c7 p3 a8からd9の"=a3"から"=d4" です。 3行目、4行目は必ずしも全部埋まってなくて、スペースが入る場合があります。 よろしくお願いします。

  • エクセルにて複数セルの並び替え

    こんにちは、エクセルについて教えてください。列はA~Hまで、行は1~200行ほどに値が入っています。 例えばValueが以下のようだとします。 A1 B1 C1 D1 E1 F1 G1 H1 A2 B2 C2 D2 E2 F2 G2 H2 ... これらのValueを、別のSheetに以下のように並び替えたいのですが、 A1 B1 C1 D1 E1 F1 G1 H1 A2 B2 C2 D2 E2 F2 G2 H2 A3 B3 ...と、これがA200~H200の行分まで。なのでPaste後は800行になります。どうにかマクロか何かで簡単に 出来ないかと思い、どなたかご教授いただければと思います、よろしくお願いします!

  • EXCELのIF関数について

    9セルA1~J1に1~15の数のうちの10個が一つずつ入っており、セルA3~J3にも1~15の数が入っています。またA2~J2には、A~Jまでの英字が入っています      1 2 15 9 7 6 5 4 11 3        A B C D E F G  H  I  J       2 3 5 7 9 10 11 12  13 15   のとき                                          B J G E D    I        C   のようにA3列の値と同じ1列の数字の下の値を            A5 列に表示したいのですが、何度やってもできません。      良い知恵をお持ちの方、よろしくおねがいします。

  • Excel VBAで列を行に変換するには

    不特定多数の行数(百列以上)と列数(千列以上)を持ったデータを以下にある結果1を結果2のように列と行を置換したいのですがどうしたらよろしいでしょうか? もしよろしければ、プログラムを教えていただけたら助かります。 よろしくお願いします。 ///////////結果1//////////////////// A1 B1 C1 →不特定の列数 A2 B2 C2 A3 B3 C3 ↓ 不特定の行数 ///////////結果2/////////////////// A2 A2 A3 B1 B2 B3 C1 C2 C3

  • エクセルの並び替え

    過去ログにもあるとは思うのですが、探せなくて・・・ 教えてください!!   A   B   C 1 1323  1025 2 2135   2300 3 1224   5025   上記のようなものをCの列へ      A   B     C 1  1323  1025   A1  2   2135 2300   A1 3   1224 5025   B1 ・  ・   ・     B1 ・  ・   ・     A2 ・  ・   ・     A2 ・  ・   ・     B2 ・  ・   ・     B2 ・  ・   ・     A3 ・  ・   ・     A3 ・  ・   ・     ・ ・  ・   ・     ・ ・  ・   ・     ・ 192 1234  2222    A192 という具合にしたいのですが可能でしょうか すいません。きれいに並びません。見にくいとは思いますが・・・。

  • Excel n行毎の合計数値

    Excelで2行毎、できればn行毎に合計値を求めるセルを作りたいのです。 A1:A10に{1,2,3,,,,}と値が入っているとして、B1から B1=A1+A2 B2=A3+A4 B3=A5+A6 というふうになり、B1=3,B2=7,B3=11,,,と1行毎に合計する範囲がズレていくような列を作るには どうすればいいでしょうか? C1=A1+A2+A3 C2=A4+A5+A6 C3=A7+A8+A9 となっていくような列を作る必要も出てきそうなので、 n行合計ずつ以外でも出来る方法をお願いします。

  • エクセルのセルの参照をした後に結果だけ残すには

    すこし伝えにくいのですが、エクセルの参照について質問があります。 たとえば、 A列に上から (A1)= 2, (A2)= 3, (A3)= 5 , , といった感じで数字が入ってたとして B列に (B1)= 100*(A1), (B2)=100*(A2), (B3)=100*(A3) ,, ,というようにA列を参照することで、B列にA列の100倍を計算すると、 シートには ( B1) には 200 ,( B2) には 300,( B3 )には 500の数字が表示されます。 このB列の結果はA列を参照しているのでA列をいじるとB列まで変化してしまうと思います。 そこで質問なのですが、(このようにB列をA列を参照することで計算した後に、) A列をいじってもB列の値は200 400 300のままにすることはできるんでしょうか? つまり、B列の200 400 300という結果はキープしつつB列からA列への参照をやめるなんてことはできるんでしょうか? どなたかご存知でしたらおしえていただけませんでしょうか? よろしくお願いします。

  • 光と電子の相互作用の計算について

    こんにちは、下記はmathematicaで、ランダウの「相対論的量子力学」P404の式f(s、u)を計算したものです。プログラムの概要は、残念ながら800文字以上になるので書かれません。、、、、その後、下記を作用させて、式を整理しました。 k0^2-k1^2-k2^2-k3^2->0;j0^2-j1^2-j2^2-j3^2->0; p0^2-p1^2-p2^2-p3^2->m^2;q0^2-q1^2-q2^2-q3^2->m^2; k0*p0-k1*p1-k2*p2-k3*p3->1/2*(s-m^2)/.-k0*p0+k1*p1+k2*p2+ k3*p3->-1/2*(s-m^2); k0*q0-k1*q1-k2*q2-k3*q3->1/2*(m^2-u)/.-k0*q0+k1*q1+k2*q2+ k3*q3->-(1/2*(m^2-u)); p0*q0-p1*q1-p2*q2-p3*q3->(m^2-t/2)/.-p0*q0+p1*q1+p2*q2+ p3*q3->-(1/2*(m^2-u)); j0*p0-j1*p1-j2*p2-j3*p3->1/2*(m^2-u)/.-j0*p0+j1*p1+j2*p2+ j3*p3->-1/2*(m^2-u); j0*q0-j1*q1-j2*q2-j3*q3->1/2*(s-m^2)/.-j0*q0+j1*q1+j2*q2+ j3*q3->-(1/2*(s-m^2)); k0*j0-k1*j1-k2*j2-k3*j3->(-t/2) /.-k0*j0+k1*j1+k2*j2+k3*j3->(t/2); 更に最後にm=0としました。すると、計算結果は、 (1/s^2)*(4*(2*k2^2*p0*q0 + 2*k3^2*p0*q0 + 2*k1^2*(p0*q0 - p1*q1) - 2*k2^2*p2*q2 - 2*k2*k3*p3*q2 - 2*k2*k3*p2*q3 - 2*k3^2*p3*q3 - k2*q2*s - k3*q3*s + k2*p2*u + k3*p3*u - k1*(2*k2*(p2*q1 + p1*q2) + 2*k3*(p3*q1 + p1*q3) + q1*s - p1*u)))となりました。この結果に、どのような法則を使用すれば答えを纏めf(s、u)が得られるのでしょうか?