質問するログイン新規登録
VBA

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

Q&A

解決済

2回答

812閲覧

VBA初心者 ある指定した文字列を含む行を、別の指定した文字列の含まれる行の下に挿入貼り付けしたい

Tommy

総合スコア3

VBA

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

0グッド

0クリップ

投稿2022/03/07 02:16

0

0

VBA初心者です。

ある指定した文字列が含まれる行をコピーして、(文字列が含まれているのは、E列とF列)
別の指定した文字列が含まれる行の下に、挿入貼り付けをしたいと思っていますが、うまくできません。
いろいろなサイトを検索して、下記のコードを作ってみましたが、エラーにもなりませんが、望む結果になりません。(というか、変化が見られない)

ご教示の程、よろしくお願いします。

With Worksheets(1) Dim a As String a = InStr(Cells(4.1), "別の指定した文字列") If InStr(ActiveCell.Value, "指定した文字列*") <> 0 Then Range("A:O").Cut Cells(a + 1).Insert Shift:=xlDown End If End With

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

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

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

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

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

bebebe_

2022/03/07 06:57

こんな感じではどうでしょう Dim a As Variant Dim b As Variant With Worksheets(1) Set a = .Range("E:E,F:F").Find(What:="コピー元検索用文字列") Set b = .Range("E:E,F:F").Find(What:="貼り付け先検索用文字列") If a Is Nothing Or b Is Nothing Then Exit Sub .Rows(a.row).Cut .Rows(b.row + 1).Insert End With
Tommy

2022/03/08 07:22 編集

ありがとうございます。1行は無事貼り付け先の下に挿入できたのですが、 連続した複数行の場合、どうすればいいでしょうか。 コピー元の文字列は、数行あり、貼り付け先の文字は一列にしかありません。 引き続きご教示いただけますと幸いです。
bebebe_

2022/03/08 08:11

複数行ある場合等はもう少し前提条件が定まっていないと答えようがないです。 現状だとE:F列の検索ワードが一致した行を移動していますがこれを複数回行うとなると移動させた行がまた検索に引っかかってしまいます。 ぱっと思いつく限りだと コピー元になるセルは貼り付け先のセルより上にしかない等の条件があるか 対象の行を一度別シートに移動させ全部移動させて検索に引っかからなくなってから貼り付け先へ移動させる等の方法でしょうか。
Tommy

2022/03/09 03:02

条件の説明が足らず、申し訳ありません。 コピー元となるセルは、貼り付け先セルより、必ず下にいます。 またコピー元となるセル(指定した文字列を含む)は、必ず連続しています。
guest

回答2

0

ベストアンサー

連続した行のまとまりを1度だけ移動させるという動作ならこうでしょうか

VBA

1 Dim a1 As Range 2 Dim a2 As Range 3 Dim b As Range 4 5 With Worksheets(1) 6 7 Set b = .Range("E:F").Find(What:="貼り付け先検索用文字列") 8 9 Set a1 = .Range("E:F").Find(What:="コピー元検索用文字列") 10 11 If a1 Is Nothing Or b Is Nothing Then Exit Sub 12 If a1.row = b.row + 1 Then Exit Sub 13 14 Set a2 = .Range("E:F").FindPrevious(a1) 15 16 .Range(a1, a2).EntireRow.Cut 17 .Rows(b.row + 1).Insert 18 19 End With

投稿2022/03/09 05:06

bebebe_

総合スコア520

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

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

Tommy

2022/03/10 00:07

回答ありがとうございました。 無事望む通りの結果になりました! この度は、私のつたない説明にもかかわらず、丁寧にご回答いただきましてありがとうございました。 またちょくちょく質問すると思うので、回答いただけると嬉しいです! よろしくお願いします。
guest

0

ある指定した文字列が含まれる行をコピーして、(文字列が含まれているのは、E列とF列)
別の指定した文字列が含まれる行の下に、挿入貼り付け

文面通りに書くとこんな感じ。

VBA

1Option Explicit 2Sub Sample() 3 With Worksheets(1) 4 Dim aru As Range, betu As Range 5 Set aru = .Range("E:F").Find("ある指定した文字列", LookIn:=xlValues, LookAt:=xlPart) 6 Set betu = .Range("E:F").Find("別の指定した文字列", LookIn:=xlValues, LookAt:=xlPart) 7 If aru Is Nothing Or betu Is Nothing Then Exit Sub 8 aru.EntireRow.Copy 9 betu.Offset(1).EntireRow.Insert 10 End With 11End Sub

投稿2022/03/07 07:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Tommy

2022/03/08 07:23 編集

ありがとうございます。1行は無事貼り付け先の下に挿入できたのですが、 連続した複数行の場合、どうすればいいでしょうか。 コピー元の文字列は、数行あり、貼り付け先の文字は一列にしかありません。 引き続きご教示いただけますと幸いです。
退会済みユーザー

退会済みユーザー

2022/03/08 07:25

>数行あり あいまいな話ではプログラムは組めません。 何行あるのかを判断する基準はありますか?
退会済みユーザー

退会済みユーザー

2022/03/08 11:30

「ある指定した文字列」を含む行が複数連続してるという意味ですか? 連続してない「ある指定した文字列」を含む行が複数あるという可能性はないのですか? 実行する度に、「ある指定した文字列」を含む行が増えるのではないですか? どうも、実際の表がイメージ出来ません。
Tommy

2022/03/09 03:01

説明が足らず、申し訳ありません。 「ある指定した文字列」を含む行が複数連続してるという意味ですか? →おっしゃる通りです。連続していない行はございません。 また別の指定した文字列は、全体で一行しか存在しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問