• 締切済み

複数セルをまとめて移動させるマクロ

こんにちは。どうぞよろしくお願いいたします。 Excel2003で、1行に3セルで構成されるデータが3データ記述してあるのを、 1行に1データ分として2データ目以降を次の行に移動させ、9列→3列に変更するマクロを作成したいと考えています。 【現在のデータ】   A    B    C    D    E    F    G    H    I 1 氏名1 住所1 電話1 氏名2 住所2 電話2 氏名3 住所3 電話3 2 氏名4 住所4 電話4 氏名5 住所5 電話5 氏名6 住所6 電話6 : 【計算結果】   A    B    C 1 氏名1 住所1 電話1  2 氏名2 住所2 電話2  3 氏名3 住所3 電話3 4 氏名4 住所4 電話4  5 氏名5 住所5 電話5  6 氏名6 住所6 電話6 :      この操作を繰り返すマクロを作成したいと思っています。 マクロは初心者ですので、繰り返して実行するロジックがよくわかりません。 すみませんが、どうぞご指導よろしくお願いいたします。

みんなの回答

回答No.4

ANo.2です. 少し改良:9列から3の倍数の列に対応しコード量を減らしました. 基本的方針は ・現在データシート行毎の下記ルーティーンで行末までDo Loop(何行あってもよい) ・現在データシートの各行の3列セットを左から右までFor Nextで結果シートの3列に上から下へ転記 (3列が何セットあってもよい) ・3列を○列に帰る時は☆の部分を改良する. Sub macro() Dim i As Integer, n As Integer Dim c1 As Range Dim c2 As Range Set c1 = Worksheets("Sheet1").Range("A1")'現在データシートの先頭 Set c2 = Worksheets("Sheet2").Range("A1")'結果シートの先頭 n = c1.End(xlToRight).Column / 3 '3列セットがいくつあるかを取得☆ Do Until c1 = "" For i = 1 To n c2 = c1.Offset(0, (i - 1) * 3)'1列転記☆ c2.Offset(0, 1) = c1.Offset(0, (i - 1) * 3 + 1)'2列転記☆ c2.Offset(0, 2) = c1.Offset(0, (i - 1) * 3 + 2)'3列転記☆ Set c2 = c2.Offset(1)'結果シートの次の行へ Next i Set c1 = c1.Offset(1)'現在データシートの次の行へ Loop End Sub 後はエラー処理など実用的に改良してみて下さい.

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

関数で、、、 Sheet1からSheet2に変換して出力 先頭1行はヘッダ Sheet2の、 A2: =OFFSET(Sheet1!$A$2,INT(ROW()+1)/3-1,COLUMN()-1+MOD((ROW()-2)*3,9)) 右の、B~C列にコピー 以下、A~C列まとめてコピー

shirotan2013
質問者

お礼

マクロを組む程でもないデータ量だと役に立ちますね。 大変参考になりました。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

以下でどうでしょう. Sub macro() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim c1 As Range Dim c2 As Range Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Set c1 = ws1.Range("A1") Set c2 = ws2.Range("A1") Do Until c1 = "" c2 = c1 c2.Offset(0, 1) = c1.Offset(0, 1) c2.Offset(0, 2) = c1.Offset(0, 2) Set c2 = c2.Offset(1) c2 = c1.Offset(0, 3) c2.Offset(0, 1) = c1.Offset(0, 4) c2.Offset(0, 2) = c1.Offset(0, 5) Set c2 = c2.Offset(1) c2 = c1.Offset(0, 6) c2.Offset(0, 1) = c1.Offset(0, 7) c2.Offset(0, 2) = c1.Offset(0, 8) Set c1 = c1.Offset(1) Set c2 = c2.Offset(1) Loop End Sub

shirotan2013
質問者

お礼

大変参考になりました。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

繰り返すだけなら、for to nextとかfor each nextでぐりぐりやるだけですが、重要なのは「一体何を繰り返し作業するのか」です。 作成例: sub macro1()  dim r as long  dim c as long  for r = range("A65536").end(xlup).row to 1 step -1   for c = 7 to 4 step -3   ’切り取り&挿入を繰り返す    cells(r, c).resize(1, 3).cut    cells(r + 1, "A").entirerow.insert   next c  next r end sub

shirotan2013
質問者

お礼

大変参考になりました。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セル移動マクロを教えて下さい。

    エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。

  • マクロでコピーしたセルを4行目毎に挿入する方法

    こんにちは!よろしくお願いいたします。 Excel2003で計算式が入力されている1行をコピーして 4行目にコピーしたセルを挿入したいのですが、複数 あるため、マクロを作りたいと思っています。   A   B  C 1 氏名 住所 件数  → 計算式が入力されている 2 氏名 住所 電話 3 氏名 住所 郵便 4 氏名 住所 ふりがな            → 1行目の計算式も含めコピーしたい この操作を繰り返すマクロを作成したいと思っています。 マクロは初心者です。ご指導よろしくお願いいたします。

  • セル内の2行をそれぞれ別のセルにコピーするマクロ

    A列にデータが入力されていたとします。 そのデータのうち、複数のセルで改行されて2行になっています。 改行されているセルをサーチし、1行目をB列のセルに、2行目をC列のセルに分割してコピーしたいと思います。 この様な方法は、マクロで可能でしょうか。 適切な関数があれば、ご教授いただきたいと思います。

  • Excelで複数行・複数セルの一括削除、マクロ?

    Excelで複数の行・複数のセルの一括削除、一括編集の方法を教えて下さい。住所録の連名づくりに困っています。 Microsoft Office Excel 2007ですでに作成された住所録を、筆ぐるめVer.15へ外部読み込みをして年賀状の宛て名をつくって印刷したいと考えています。 Excelのデータは一人一人1行ずつで作られている為、このまま筆ぐるめで住所録をつくると同じ住所の家族の年賀状が複数枚できてしまう(父に1枚・娘に1枚・母に1枚、という風に)ので、同じ住所の宛先には連名にして1枚で出したいので、連名列を作り代表者の行に一家族分の連名をまとめる作業で手こずっています。 同じ行に1家族分のアドレスが入るように(1行に、代表者漢字氏名・母の名前・子の名前・子の名前2・郵便番号・住所、のように)したかったので、 現在は=RIGHT(B1,3)で、B列にある漢字氏名の後ろから3文字だけをC列、D列、E列に一つずつずらした名前が記入されている状態で、表の形としては、 【1行目】 A列:ヤマダ タロウ/B列:山田 太郎/C: 良子/D:由美子/E:本 松/F:〒/G:住所 【2行目】 A列:ヤマダ リョウコ/B列:山田 良子/C:由美子/D:本 松/E:本 竹/F:〒/G:住所 【3行目】 A列:ヤマダ ユミコ/B列:山田 由美子/C:本 松/D:本 竹/E:本 梅/F:〒/G:住所 【4行目】 A列:ヤマモト マツ/B列:山本 松/C:本 竹/D:本 梅/E:本 桜/F:〒/G:住所 という風になっていて、以下のようにしたいのです。 【1行目】 A列:ヤマダ タロウ/B列:山田 太郎/C:良子/D:由美子/E:/F:〒/G:住所 【2行目】 A列:ヤマモト マツ/B列:山本 松/C:竹/D:梅/E:/桜F:〒/G:住所 ≪1≫連名にした家族の行は不要なので行自体を削除したい。 ≪2≫氏名の後ろから3文字をコピーしているので「 良子」のように半角スペースが入っているものや、「本 竹」のように1文字の名前のため苗字の一部まで入っているものは、その部分を削除して氏名のみにしたい。 ≪3≫1行目E列のように、別の家族の名前まで入ってしまっていたり、連名のいらない人の名前を削除したい。(家族によって、連名が3ついるところもあれば、2つでよかったり、全く連名不要の人もいるので…) これを地道に一つ一つセルを選択して削除していく以外に何か能率のいい方法はないでしょうか? 名簿が何千件とあるので一つずつこの作業をすると膨大な時間がかかる為、少しでも効率的な作業があれば教えていただきたいのです。 前回の質問で、親切な回答者様から「マクロを使えば」と言っていただきましたが、エクセルをそこそこしか使えない(単純な計算やグラフの作成程度)為、どのようにすれば良いかわかりません。 何かアドバイス、ご享受、していただければと思います。 どうか、宜しくお願いいたします。

  • セル移動マクロについてご教示下さい。

    市町村別の住所録を作成していますが、次のようなマクロが出来れば新たな住所の入力を するのに便利になると、質問させていただきました。 シート1に市町村名を、シート2に市町村毎の住所録を入力しています。 シート1のB列に入力している市町村名をクリックすれば、シート2のC列に入力している 市町村名にセル移動するようなマクロは可能でしょうか。 マクロはコードの張り付け程度しか出来ない超初心者です。 どなたか、よろしくお願いいたします。

  • マクロにて空白のセルを一括して消去でなく削除したい

    空白のセルを一括して、空白セルについた色も含めてマクロで全て削除したい。 現在のデータ(仕様)について 1.Sheet2に列ごとにセルに色をつけ、データもあるとします。 2.A列10行・B列6行・C;列18行というように、列によってデータの入った範囲が違います。 3.どの行も途中に空白セルはなく、詰めたデータです。 以上です マクロで一括処理したいと思いますが、このようなことができるコードを教えて頂けませんか。よろしくお願いします。

  • 重複した項目を削除するマクロ

    エクセルで同じID番号を持つ項目が2行あったとして、1行だけ残してもう1行は削除する、といったマクロを教えてください。 例: A列 B列 C列 D列 1 氏名  ID=150  住所  備考 2 氏名  ID=150  住所  備考 3 氏名  ID=10   住所  備考 4 氏名  ID=10   住所  備考 5 氏名  ID=10   住所  備考    ↓↓↓↓↓↓↓↓↓↓↓↓ A列 B列 C列 D列 1 氏名  ID=150  住所  備考 2 氏名  ID=10   住所  備考 という表にしたいのです。 アドバイスよろしくお願いします。

  • EXCELでセルの移動マクロを作りたいのですが…

    EXCELについての質問です。マクロを使ってセルの移動をさせたいと考えています。 まず使うデータ範囲はA1:E11です。A1:E10にはデータが入っています。 ちなみに、A列には名前、B~E列には数字が入っており、A11:E11は合計が表示される設定しており、合計の場所はここに固定させたいのです。 その移動のさせ方ですが、 A1:E1に空欄があるとします。 そのときに、マクロを再生させるとA2:E10のセルに入っているデータ(値のみ)を上に移動させたいのです。 さらに、A3:E3の内容を消して空欄が出来たとします。 その時に同じ操作によってA4:E10のデータを上に移動させたいのです。 前者のマクロを単純に作ると縦に9つ分のセルを移動させるマクロでは、 A11:E11も上に移動させられてしまいます。なので、移動させるセルの一番下が10行目になるようなマクロを作りたいのです。 何がしたいのかといいますと、いらないデータを消した時に空欄をマクロで詰めてしまいたいのです。 乱文で判りづらいかと思いますが、知識のある方教えていただけないでしょうか。 よろしくお願い致します。

  • セル結合部の合計額

    A列に年月日、B列に氏名、C列に金額の表が有ります。 この表をマクロでB列、氏名で並べ替えをし、同名をセル結合しています。セル結合されているのがいくつも有ります。このセル結合された部分のC列の各々の金額の合計をD列に表示する記述を教えてください。 例えば、Aさんでセル結合されたC列のデータが3個有れば三個の合計額をD列に表示するものです。よろしくお願いします。

  • ◯ならば、右セルをコピーし、1セルにまとめるマクロ

    エクセルのマクロで、顧客管理情報のシートを作成しています 例えば下のような二列のセルがありまして、(|は、セルの境目を表す) ◯ | A ◯ | B × | C ◯ | D この時、 ◯のついている行の値だけど、つなげたいと思っています。 この場合であれば、得たい値は「A、B、D」という値です。(AとBの間を ”,” などで区切ろうと考えています。 エクセルの関数でいえば「A1&","&A2」といったところでしょうか・・・ そのような操作を、上のテーブルでいえば「◯」のついているセルに対してのみ実行してもらうマクロを組みたいです。 このような場合、どうしたら良いでしょうか? アドバイスを、どうぞよろしくお願いいたします。

専門家に質問してみよう