「みんな教えて! 選手権!!」開催のお知らせ

こんにちは。
あるエクセルの表があります。1500行くらいあるのですが、10行毎に1行づつ新しい行を挿入したいのですが、
一気に簡単に実行する方法はありませんか?
初心者なのでとても苦労しています…
地道にやるしかありませんか?
どなたか教えて下さい。

A 回答 (8件)

A列にデータがあるとして、作業列B列のB1に10、B2に20といれ、フィルハンドルを出し、下へ最終行まで引っ張ります。


10、20,30、・・・と番号が振られます。
最終行の次にA列空白、B列に11、
その下にB列に21と入れて、+ハンドルを出し最終行の番号を凝れるまで引っ張ります。
11、21,31,41、・・・と10づつ増えます。
B列で並べ替えしてください。
10の後に11(=A列空白)、20の後に21(=A列空白)・・が収まります。
これで10行おきに、空白行が入ります。
B列を削除してください。
    • good
    • 12

既に、実現可能な回答が出ているようですが、他にも方法があるという事で、回答させていただきます。



先ずは、マクロの方法を以下に示します。

'--------マクロコード--------始まり
Sub Macro1()
  Dim i1 As Integer
  For i1 = 1501 To 11 Step -10
    Rows(i1 & ":" & i1).Insert Shift:=xlDown
  Next i1
End Sub
'--------マクロコード--------終わり

上の例では、各10行毎に行全体を挿入していますが、一部の列のみ挿入するなら、

    Rows(i1 & ":" & i1).Select

    Range("C" & i1).Insert Shift:=xlDown 'これは、C列のみ挿入
に変えてください。


マクロを使わずにやれる方法を以下に示します。
10行毎に空白を入れるには、1.各行に行番号を振り、2.それと10行毎の中途半端な行番号(9.1,19.1,29.1等)を作り、3.それを組み合せてソートする、という方法でできます。

なお、前提条件として、B列,C列が空いている物とします。

1.
B1セルに「=ROW()」を入れる。
B1の式をB2~B1500セルにコピーペーストする。
2.
C1セルに「=ROW()*10+0.1」を入れる。
C1の式をC2~C150セルにコピーペーストする。
3.
B列,C列を選択して、コピーする。
「編集」メニューの「値を選択して貼り付け」で「値」を選択して「OK」をクリックする。
C1~C150セルを選択して、コピーする。
B1501セルにペーストする。
シート全体を選択する。(「Ctrl」+「A」)
「並び替え」を行なう。この時「最優先されるキー」を「列B」にする。
この後、B列,C列は不要なので、削除する。
B列,C列を削除する。
    • good
    • 0

#3 です。



#3 だと、総行数が 10 で割り切れないと変なところ
に空行を挿入してしまいますね、、

スルーして下さい。すみません。
    • good
    • 1

こんにちは。



Sortメソッドがひじょうに速いので、挿入させる場合も、以下のようにしたらよいかと思います。一応、補助列は、IV列(一番最後の列)を使っています。しかし、これは、手作業でも簡単に出来ます。補助列を使って、フィルダウンか、数式で、1~1500までを作り、その最後の行の次から、 "=ROW(A1)*10" を入れて、並べ替えをすればよいです。

Sub InsertBlankRow()
Dim LastRow As Long
Const TMP_COL As String = "IV" '補助列
LastRow = Range("A65536").End(xlUp).Row
Application.ScreenUpdating = False

With Range(TMP_COL & "1").Resize(LastRow)
  .FormulaLocal = "=Row()"
  .Value = .Value
  .Offset(LastRow).Resize(Int(LastRow / 10)).FormulaLocal = _
    "=ROW(A1)*10"
  .Offset(LastRow).Resize(Int(LastRow / 10)).Value = _
    .Offset(LastRow).Resize(Int(LastRow / 10)).Value
End With

Range("A1:" & TMP_COL & LastRow + Int(LastRow / 10)).Sort _
    Key1:=Range("IV1"), _
    Order1:=xlAscending, _
    Header:=xlNo, _
    OrderCustom:=1
Range(TMP_COL & "1").EntireColumn.ClearContents

Application.ScreenUpdating = True
End Sub
    • good
    • 0

関数でやる方法です。



A列を10行おきに1行あけるには、

=IF(MOD(ROW(),11)=0,"",OFFSET(OFFSET($A$1,INT(ROW()/11)*10,),ROW()-1-INT(ROW()/11)*11,))

をコピー先の先頭行に入れてください。そしてそれを、縦方向に適当なところまでコピーしてください。

B列を10行おきに1行あけるには、上記の「$A$1」を「$B$2」と置き換えてください。

いかがでしょうか。
    • good
    • 1

こんにちは。

KenKen_SP です。

このような処理の場合、最終行から上に向かってループさせます。
開始行から下に向けてやると Insert で行数が増えて、最後まで
処理できないからです。

Sub Sample()

  Dim i As Long
  Dim r As Long
  
  With ActiveSheet.UsedRange
    r = .Rows(.Rows.Count).Row
  End With
  Application.ScreenUpdating = False
  For i = r + 1 To 10 Step -10
    ActiveSheet.Rows(i).Insert Shift:=xlDown
  Next i

End Sub
    • good
    • 0

マクロを使うと簡単なのですが、マクロの使い方を初心者に説明するのがなかなか難しいです^^;


とりあえずマクロで1500行分、10行毎に行挿入するプログラムを以下に書きました。

Sub Macro1()
For Idx = 10 To 1500 Step 10
Rows(Idx & ":" & Idx).Insert Shift:=xlDown
Next Idx
End Sub

これを実行するには、以下の手順でマクロを作成して実行します。
1.メニューより、ツール→マクロ→新しいマクロの記録
2.メニューより、ツール→マクロ→記録の中止
3.メニューより、ツール→マクロ→Visual Basic Editor
4.左ペインにある「標準モジュール」をダブルクリック
5.「Module1」をダブルクリック
6.「Sub Macro1()」と「End Sub」の間に上記のプログラムを書きます
7.エクセルに戻り、メニューより、ツール→マクロ→マクロ
8.Macro1を選択し、実行を押します。
    • good
    • 0

以下の方法は如何でしょうか。


 A1:A1500にデータが入っているとし,B列を作業列とします。

1.B2:B10に任意文字を入力
2.B2:B11を選択してフィルハンドルをダブルクリック
→B2:B1500が選択された状態
3.Ctrl+G (メニュー[編集]-[ジャンプ])
4.[セル選択]ボタンをクリック
5.[空白セル]にチェック→OK
6.選択された空白セル上で右クリック
7.[行全体]にチェック→OK
8.B列を削除
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報