- ベストアンサー
エクセルマクロ 教えてください
エクセルで、二行おきに行を一行挿入するマクロを組みたいのですがどうしたらよいでしょうか
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! すでに回答は出ていますので、参考程度で・・・ データはA列の1行目からあるとします。 Sub test() Dim i, j, k As Long k = Cells(Rows.Count, 1).End(xlUp).Row If k Mod 2 = 0 Then j = k - 1 Else j = k End If Application.ScreenUpdating = False For i = j To 2 Step -2 Rows(i).Insert Next i Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m
その他の回答 (4)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 対象のシートタブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キー押下 でお試し下さい。 コード内の行数と空行の値を変更すれば色々なバリエーションができます。 Sub 行数毎に空行挿入() Application.ScreenUpdating = False 行数 = 2 空行 = 1 Range("A1").Select Do While ActiveCell.Offset(行数).Value <> "" ActiveCell.Offset(行数, 0).Rows("1:" & 空行).EntireRow.Select Selection.Insert Shift:=xlDown ActiveCell.Offset(空行).Select Loop Application.ScreenUpdating = True End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
元のシートに2行お気に1行ずつ挿入すると、プログラムで見ている行」の絶対行数がどんどんずれていく。 これをコントロールするのが結構厄介だ。 だから別シートに結果を作るほうがすっきりする。 Sub test02() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") '元シート Set sh2 = Worksheets("Sheet2") '結果シート d = sh1.Range("A65536").End(xlUp).Row MsgBox d K = 1 'Sh2は第1行目からとする For i = 1 To d Step 2 sh1.Range("A" & i & ":C" & i).Copy sh2.Range("A" & K) 'A-C列を仮定 K = K + 1 sh1.Range("A" & i + 1 & ":C" & i + 1).Copy sh2.Range("A" & K) K = K + 2 Next i End Sub
- KURUMITO
- ベストアンサー率42% (1835/4283)
マクロを組むほどのこともないでしょう。次のようにしてはどうでしょう。 例えば1行目は項目の行で2行目から100行目の間にデータがあるとします。 そこで例えば作業列としてE列を使用しE2セルには次の式を入力してE150以上下方にまでオートフィルドラッグします。 =IF(ROW(A1)<=100-1,INT((ROW(A2))/2),ROW(A1)-99) その後にA列からE列までを選択します。 「ホーム」タブの「並べ替えとフィルター」から「ユーザー設定の並べ替え」を選択します。 「最優先されるキー」にF列を選択し、「先頭行をデータの見出しとして使用する」にチェックをしてから「昇順」でOKします。これによって2行ごとに1行が追加された形となります。作業列のE列は削除して終了です。
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
EXCELのマクロレコーダを使ってサンプルを作るのが早いですよ。 質問のケースでは、2行おきに行を選択しておいて、行挿入すればよいと思いますが。EXCELのバージョンに依存するかもしれませんが、比較的新しければできるはずです。手元に無いので未確認です。 マクロレコーダでは静的な数値でセル選択されるはずですが、これを適切なロジックにすればよいと考えます。