[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートコピー後にコピー元のシートが消えてしまう』(まな)
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
(マナ) 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
sheet1/sheet1+/sheet1++/・・・・・・
と、sheetの特定のセルが埋まるたびにコピーを作っていきたいのですが
実行すること
sheet1++/
と、最後にコピーで作られたsheetだけが残ってしまいます・・・
わかりづらくて申し訳ありません。。。
(まな) 2020/05/12(火) 22:11
では、、あてずっぽで↓これを ActiveSheet.Name ↓これにしたらどうなりますか? Sheets(Sheets.Count).Name (SoulMan) 2020/05/12(火) 22:18
最初の状態が
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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.