[[20200511222601]] 『シートコピー後にコピー元のシートが消えてしまう』(まな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートコピー後にコピー元のシートが消えてしまう』(まな)

VBA初心者です,初歩的な質問ですみません。

別のブックから値を取得し、入力する処理です。
とあるセルまで値が入ると、入力していたシートを直後にコピーし、
コピー後のシートの入力する部分のデータだけを削除し、
コピー後のシートに入力を続けるというようにしたいです。

     If ThisWorkbook.Worksheets(a).Cells(2, 14).Value <> "" Then

        Worksheets(a).Copy after:=Worksheets(a)
        ActiveSheet.Name = Worksheets(a).Name & "+"
        a = a + 1
        ThisWorkbook.Worksheets(a).Range_("F2:N7", "F9:N30").ClearContents
        End If

この様にif分岐したら、コピー元のシートが消えてしまいます。
インデックスはこの様に変数のままでどうにかしたいのですが
アドバイスのほどよろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>別のブックから値を取得し、

この意味が不明です。
こうですか。

 >ThisWorkbook.Worksheets(a).Range_("F2:N7", "F9:N30").ClearContents
    ↓
  Worksheets(a).Range_("F2:N7", "F9:N30").ClearContents

(マナ) 2020/05/11(月) 23:02


現在のコードを、1行ずつ、何をしているか説明してください。

(マナ) 2020/05/11(月) 23:06


本題とは関係ないですが
こうではありませんか。

 Range("F2:N7, F9:N30")

(マナ) 2020/05/11(月) 23:10


コメントありがとうございます。

If ThisWorkbook.Worksheets(a).Cells(2, 14).Value <> "" Then 'cells(2,14)に値が入っていたら

        Worksheets(a).Copy after:=Worksheets(a) 'cells(2,14)まで値が入っているシートをコピーし
        ActiveSheet.Name = Worksheets(a).Name & "+"'名前をコピー元から引用してつけ
        a = a + 1  'indexを変えて以降の作業対象をコピー後のシートにする'この辺もすみままだ曖昧ですすみません。
        ThisWorkbook.Worksheets(a).Range_("F2:N7", "F9:N30").ClearContents'F8:N8は見出しなのでのこしておきたい。Range("F2:N7","F9:N30")で出来てた気がしたのですが、ここから間違っていた感じですかね…
        End If

こんな感じです。曖昧で申し訳ありません。

Thisworkbookがあるとダメですか?本にはマクロが入っているbookを指すと書いてあったのですが…

(まな) 2020/05/12(火) 21:36


 懲りずに回答してみます。、、
Thisworkbookは確かにそうですが、、相手のBookもSetを使って明示してみてはどうでしょうか?
Dim Wb1 As Workbook
Set Wb1 = Workbooks("もう一つのBook.xlsx")
(SoulMan) 2020/05/12(火) 21:54

回答ありがとうございます!
相手のbookはこのIF分岐とは別の場所で明示してあります!
コピーするのはbookAの中の話で、シート1のコピーをシート1の隣に作りたいです!
値を取得するのはbookBからで、bの方はコピーには関与しません。
この作業で

sheet1/sheet1+/sheet1++/・・・・・・

と、sheetの特定のセルが埋まるたびにコピーを作っていきたいのですが
実行すること

sheet1++/

と、最後にコピーで作られたsheetだけが残ってしまいます・・・

わかりづらくて申し訳ありません。。。
(まな) 2020/05/12(火) 22:11


 では、、あてずっぽで↓これを
ActiveSheet.Name
↓これにしたらどうなりますか?
Sheets(Sheets.Count).Name
(SoulMan) 2020/05/12(火) 22:18

お返事ありがとうございます!
sheet1の右側にはまた違うマクロを使用するときに使う情報の入ったsheetがあるので出来ないです…
後出しばかりですみません…

最初の状態が
sheet1/PARTS1/PARTS2/・・・・【PARTS#のsheet数は固定でない】
それを↓のようにしたい
sheet1/sheet1+/sheet1++/・・・/PARTS1/PARTS2/・・・・【コピーされるsheet数も固定でない】

お返事から察するに

ActiveSheet.Name = Worksheets(a).Name & "+"

この瞬間のActiveSheetはコピー後ではなくコピー元になっているかもしれないということですか?

度々すみません。。。
(まな) 2020/05/12(火) 22:34


 シート名のインクリメントみたいな感じがお望みなのですね???
こんな↓感じになっちゃいましたけど、、どうでしょう??
Sub kk()
Static MyStr As String
'この挿入位置は調整してください。。。
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
MyStr = MyStr & "+"
ActiveSheet.Name = Sheets("Sheet1").Name & MyStr
End Sub
(SoulMan) 2020/05/12(火) 23:09

 それをIndexでするんですね???
Option Explicit
Sub kk()
Static i As Long
i = i + 1
Sheets(i).Copy After:=Sheets(i)
ActiveSheet.Name = Sheets(i).Name & "+"
End Sub
(SoulMan) 2020/05/12(火) 23:28

 どんなスケジュールで実行されるのかは分かりませんが、これは意外と弊害が多いと思いますよ?
先ず同じシート名になっちゃいけないでしょうし。。。
最終のSheet名をIndexで取得する時に気を付けないといけないかもしれませんね。
シート名に文字数制限もあるみたいですし。。。
どこかのシートに書き出しておいてそれをメモリー代わりにした方がいいかもしれませんね。

 こちらで試した結果だとカウンターがインクリメントされていけばご希望の様になるみたいなので
a=a+1が機能していない可能性がありますね?

 胸のカラータイマーが点滅しだしましたので、、もう寝ますzzzzzzzzzzzz
おやすみなさい。。。。
(SoulMan) 2020/05/12(火) 23:46

SoulMan さん
昨日は丁寧懇切なアドバイスありがとうございました!
編集途中で寝落ちしてしまい、お礼を申し上げるのが遅れてしまいすみません。
SoulManさんのアドバイスをもとに
Static MyStr As String
のコードを挿入して試行錯誤した結果希望どうりのものになりました!
こんな初心者の私に最後まで付き合って頂いて本当にありがとうございました。
(まな) 2020/05/13(水) 22:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.