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

エクセルvbaについて教えてください

新しいシートを一番右に作成し、その新規作成したシートの名前を変えたいです

Sub Sample()
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "結果1"
End Sub

と作成しました

マクロを実行したら、「結果1」という名のシートが一番右に作成されます

その後、実行をしたら「結果2」、さらに実行したら「結果3」といった感じにどんどん「結果+数字」のシートを作成したのですが、今のままでは「結果1」というシートしか作成されません

「結果2」、「結果3」、・・・・エンドレスに作成するようにするにはどうしたらよいのでしょうか


――――――――――――――――――――――――――――――――――――

なぜこのようなことをしているかといいますと、AdvancedFilterでxlFilterCopyを利用し、抽出した結果を新しいシートに作成するようにするのが最終目標です
それで、まずAdvancedFilterでデータを反映させる新しいシートを作成することに取り組んでいるところです

もし分かる方がいましたら、AdvancedFilterでxlFilterCopyする際、上で説明しました新しいシートが作成できた場合、CopyToRangeをどのように記載すればいいのか分かればそれも教えていただけると助かります

よろしくお願いします

A 回答 (2件)

No.1さんで答えが出てますがCopyToRangeの記載は、



Sub macro1()
 Dim w As Worksheet
 Dim res As Long

 For Each w In Worksheets
  If w.Name Like "結果*" Then
   res = Application.Max(res, Val(Mid(w.Name, 3, 9)))
 End If
 Next

' 新規シート追加
Set w = Worksheets.Add(after:=Worksheets(Worksheets.Count))
  w.Name = "結果" & res + 1

'AdvancedFilter処理
  With Worksheets("Sheet1")
    .Range("A4:G10").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=.Range("A1:A2"), _
    CopyToRange:=w.Range("A1"), _
    Unique:=False
  End With
End Sub

コードを利用させて頂き、こんな感じになります。
AdvancedFilter処理範囲は適切な範囲に変更して下さい。
    • good
    • 0
この回答へのお礼

AdvancedFilterまでありがとうございます
勉強不足だったので、レベルの低い質問をしてすみませんでした

お礼日時:2013/07/13 09:26

結果シートを探して番号を拾います。



sub macro1()
 dim w as worksheet
 dim res as long

 for each w in worksheets
  if w.name like "結果*" then
   res = application.max(res, val(mid(w.name,3,9)))
  end if
 next

 res = res + 1
 worksheets.add after:=worksheets(worksheets.count)
 activesheet.name = "結果" & res

’res番シートに対して操作します
 worksheets("結果" & res).range("A1") = "hello world"
end sub
    • good
    • 0
この回答へのお礼

とりあえず新しいシートの作成コード分かりました
ありがとうございました

お礼日時:2013/07/13 09:24

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