プロが教える店舗&オフィスのセキュリティ対策術

下記コードでは1行づつ挿入により下段(罫線枠)までずれてしまいます。
範囲内(E8:G15)での値のみ1行づつ開け表-2のように罫線をずらさずにするにはどのようにすれば良いでしょうか。
どなたか解る方よろしくお願いします。

Sub Test()
Dim i As Long
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
For i = .Rows.Count To 2 Step -1
Intersect(.Cells(i, 1).EntireRow, .Columns).Insert xlDown
Next
End With
End Su

「Excelセル範囲内の値のみ1行づつ開け」の質問画像

A 回答 (5件)

行挿入ではなくコピー&ペーストを使う方法。


セル範囲の開始行から数えてi行目のデータは開始行から数えて2×i行下にずれることを利用。
Sub test()

Dim toprow As Long
Dim i As Long

If TypeName(Selection) <> "Range" Then Exit Sub

toprow = Selection(1).Row

For i = Selection.Rows.Count - 1 To 1 Step -1
Range(Cells(toprow + i, 5), Cells(toprow + i, 7)).Copy Cells(toprow + 2 * i, 5)
Range(Cells(toprow + i, 5), Cells(toprow + i, 7)).ClearContents
Next i

End Sub
    • good
    • 0
この回答へのお礼

有難うございます。うまく対応でき非常に助かりました。

お礼日時:2013/04/03 21:48

2番めの解答より、


Range(Cells(lastrow,5), Cells(lastrow,7)).delete shift:=xlshiftup
で部分削除。
この程度の応用はかんたんに調べられますが。。。

この回答への補足

ちなみに下行に文字(値)がある場合、やはり枠線が下方にずれてしまいます。どうにか良い方法はないでしょうか。

補足日時:2013/04/02 21:42
    • good
    • 0
この回答へのお礼

有難うございます。値のみずらすことができ助かりました。

お礼日時:2013/04/02 21:27

列Dを使って、ソートするのは?



D8~D15まで、1,3,5,2,4,6,7を割り振ってソート。
ソート後にD8~D15消去。
    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2013/04/02 21:43

1行挿入したら最終行+1行目をその都度削除すればよいのではないでしょうか。


Dim lastrow As Long をはじめに宣言しといて、
Intersect と Next の行の間に
lastrow=Rang("E65536").End(xlup).Row+1
Cells(lastrow,5).Entirerow.Delete
を入れる。 

この回答への補足

ちょっとできなかったのですがやはり空欄挿入となるので削除しなければならないのでしょね。値だけずらすというの無理ですよね。他の列にも値があるため行削除したらその列も削除されるので。

補足日時:2013/04/01 21:19
    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2013/04/01 21:18

表1が表2になる?何か、元表があるのでは?

    • good
    • 0
この回答へのお礼

いや、ないのですが、有難うございます。

お礼日時:2013/04/01 21:09

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