質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

10870閲覧

VBAで前後の行以外の書式を引き継いで行挿入することは可能ですか?

skjdujr9djhf

総合スコア28

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/03/22 00:56

前提・実現したいこと

VBAで行の挿入において、前後の行の設定ではなくて2つ前の行の設定を
引き継いで挿入することは可能でしょうか?

調べると行の挿入は何も設定しなければ1つ上の行の書式が自動で設定されるそうです。
https://kosapi.com/post-911/

参考で画像を載せますが、「実現したい事」の「行のi-2番目の書式を引き継いで行を挿入したい」
のようにしたいのです。
現在の実装においてi-2番目の行の書式を引き継いで、i番目に行を挿入したいです。

![イメージ説明

該当のソースコード

VBA

1 2挿入する行数をi番目として、その後書式のクリアをすると当然ですが罫線や色も消えてしまいます。 3 4Rows(i).Insert 5Rows(i).ClearFormats

試したこと

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iwamoto_takaaki

2018/03/22 01:17

なぜ書式をクリアする必要があるのですか?
guest

回答1

0

ベストアンサー

挿入した後に、書式だけコピペするのはどうでしょうか。

VBA

1Rows(i).Insert 2Rows(i - 2).Copy 3Rows(i).PasteSpecial xlPasteFormats

投稿2018/03/22 01:16

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skjdujr9djhf

2018/03/22 04:52

回答では行がずれる事象が発生しました。 Rows(i - 2).Copy Rows(i).Insert Rows(i).PasteSpecial xlPasteFormats とすると罫線は問題なく引き継げたのですが、i-2の時の行の値までコピーされてしまいます。 定数:xlPasteFormats は書式となっていますが、値を引きつかず、書式のみを指定できる定数は他に存在しますでしょうか?
ttyp03

2018/03/22 05:04

こう書いても変わらないですかね? Rows(i).PasteSpecial Paste:=xlPasteFormats
ExcelVBAer

2018/03/22 05:14

処理の順番がまずいのでは? 提示の処理だと、右クリックの「コピーしたセルを挿入」を再現してしまってるのかと。 Rows(i).Insert Rows(i - 2).Copy Rows(i).PasteSpecial xlPasteFormats
skjdujr9djhf

2018/03/22 05:15

Rows(i).Insert Rows(i - 2).Copy Rows(i).PasteSpecial Paste:=xlPasteFormats だとやはり行がずれてしまいます。行がずれるというのはi+1の行の各列の値が i番目に入ってしまいます。 Rows(i - 2).Copy Rows(i).Insert Rows(i).PasteSpecial Paste:=xlPasteFormats でも動作は変わりませんでした。 copyの動作は行の値と罫線等を全てコピーするだけですよね?
ttyp03

2018/03/22 05:18

copyの挙動としてはそうです。 全ての情報をコピーして、pasteでは何を貼り付けるのかを指定します。 なのでxlPasteFormatsを指定していれば値が貼りつくことはないはずなんですけど…。
ttyp03

2018/03/22 05:24 編集

Copyは最初にやってしまうと、ExcelVBAerさんの指摘どおり、コピーしたセルを挿入する動きになってしまうので、やはり回答したとおり、Insert→Copy→Pasteの順が正しいです。
ExcelVBAer

2018/03/22 05:24

こちらの環境(Win7 +2010)では、 ①(ご提示の方法)では値まで貼りつき、 ②ではうまくいきました。。。 ①Copy→Insert→書式貼付け Rows(i - 2).Copy Rows(i).Insert Rows(i).PasteSpecial Paste:=xlPasteFormats ②Insert→Copy→書式貼付け Rows(i).Insert Rows(i - 2).Copy Rows(i).PasteSpecial Paste:=xlPasteFormats
ttyp03

2018/03/22 05:28

i+1の行の値が入るというのもよくわからない現象です。
jawa

2018/03/22 05:44 編集

横から失礼しますm(_ _)m 手元の環境で ``` Sub sample() Dim i As Integer i = 4 Rows(i).Insert Rows(i - 2).Copy Rows(i).PasteSpecial Paste:=xlPasteFormats End Sub ``` といったコードを作成し動作させたところ、4行目に空行が挿入され、そこに2行目の書式のみがコピーされる動作が確認できました。 そんなわけでコードには問題なさそうだと思うのですが、対象行が`i`と変数になっているところが気になります。 推測ですがこのInsert処理はループ文などで複数回繰り返して利用されるものではないでしょうか? そしてその際、iの値の変動にはInsertされて行が増える分が考慮されていますでしょうか?
skjdujr9djhf

2018/03/22 05:43

申し訳ありません。 Rows(i).Insert Rows(i - 2).Copy Rows(i).PasteSpecial Paste:=xlPasteFormats の書き方で問題なく動作しました。 実は変数i以外にも加減している変数があり、そこへの考慮が漏れていました。 お手数かけまして申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問