こんにちは
毎月更新するシートを追加する
コマンドボタンを設置したいと思います。
シートをコピーし、名前を付けた範囲「翌月繰越」を F6にコピペ。
名前を付けた範囲「クリア範囲」をクリアし、カーソルをG6に置く
という、マクロを記録しました。
コマンドボタンをクリックすると、記録したマクロを
実行するようにしましたが、
Range("F6").Select
の、ところで止まってしまいます。
どのように修正したら良いでしょうか。
Private Sub CommandButton2_Click()
ActiveSheet.Copy Before:=ActiveSheet
Application.Goto Reference:="翌月繰越"
Selection.Copy
Range("F6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.Goto Reference:="クリア範囲"
ActiveWindow.SmallScroll Down:=-48
Application.CutCopyMode = False
Selection.ClearContents
Range("G6").Select
End Sub
また、これを実行するとコピー元シートの左側にシートが追加されますが、
コピー元シートの右側に追加するにはどうしたら良いでしょうか。
Excelは2003です。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
#3の回答者です。
ちょっと後で、思いついたのですが、点線から下のように、マクロを分離させたほうがよいです。
同じマクロを使いますし、ブック全体の文字量の負担が減ります。
shName = Format$(CDate(shName) + 31, "yyyy.mm")
このようにすれば、必ず、新しいシートは、次の月になっていきますし、2008.12 の次は、2009.01になります。
>翌月繰越には式が入っているため、値のみを貼付けたいのですが、
>.Range("F6").Value = Application.Range("翌月繰越").Value
このように逆さにすればよいです。
もし、その名前登録した部分も、数式を値に換えるなら、
Application.Range("翌月繰越").Value =Application.Range("翌月繰越").Value
とすれば、値になります。
'シートオブジェクト
'--------------------------------------------
'コマンドボタンのマクロ
Private Sub CommandButton2_Click()
Call CopySheet
End Sub
'--------------------------------------------
'標準モジュール
Public Sub CopySheet()
Dim shName As String
Dim dum As Variant
'シート名は、yyyy.mm 型に限ります。
shName = StrConv(ActiveSheet.Name, vbNarrow)
shName = Replace(shName & "/01", ".", "/", , , 1)
shName = Format$(CDate(shName) + 31, "yyyy.mm")
On Error Resume Next
dum = Worksheets(shName).Range("A1")
If Err.Number = 0 Then
MsgBox "すでに、" & shName & " シートは存在しています。", 48
Exit Sub
End If
On Error GoTo 0
ActiveSheet.Copy After:=ActiveSheet
With ActiveSheet
.Name = shName
.Range("F6").Value = Application.Range("翌月繰越").Value
Application.Range("クリア範囲").ClearContents
.Range("G6").Select
End With
End Sub
ご回答有難うございます。
完璧!といいますか、
自分が考えていた以上に上手くできてしまいました。
本当に助かりました。
有難うございました。
No.4
- 回答日時:
最近この手の質問が多いような。
。。(^^;;;エラーの原因は、シート名を省略しているからです。
複数のシートを扱うときは、Range、Cellsの前に必ずシート名を付加しませう。
もちろん、名前が特定できないときはActiveSheetとしてもいいし(今回の場合)、
コピーしてできたシートをオブジェクト変数に入れてそれを使うとか。
(1)ActiveSheetを使う場合
'------------------------------------------
Private Sub CommandButton2_Click()
ActiveSheet.Copy Before:=ActiveSheet
ActiveSheet.Range("F6").Value = ActiveSheet.Range("翌月繰越")
ActiveSheet.Range("クリア範囲").ClearContents
ActiveSheet.Range("G6").Select
End Sub
'-------------------------------------------
(2)コピーしたシートをオブジェクト変数に入れて使う場合。
'---------------------------------------------------
Private Sub CommandButton2_Click()
Dim NewSheet As Worksheet
ActiveSheet.Copy Before:=ActiveSheet
Set NewSheet = ActiveSheet
NewSheet.Range("F6").Value = NewSheet.Range("翌月繰越").Value
NewSheet.Range("クリア範囲").ClearContents
NewSheet.Range("G6").Select
End Sub
'----------------------------------------------
何れにしろ、上記(1)(2)とも、
ActiveSheet.Copy Before:=ActiveSheet
このActiveSheetは、まだコピー元のシートです。
このコードが実行されあと、コピーしてできたシートがActiveSheetになります。
それは(2)のコードを見れば何となくでも分かると思います。
それから、コピー元の右にコピーしたいときは、
Before:= => After:=
以上。
No.3
- 回答日時:
#2の補足です。
あえて、シートコピーで、オブジェクトなどの移動を考えたものだとしたら、このようになります。
shName は、例えば、4月なら、5月が新しいシートとして変更されていきます。
Private Sub CommandButton2_Click()
Dim shName As String
Dim dum As Variant
shName = StrConv(ActiveSheet.Name, vbNarrow)
shName = Val(shName) Mod 12 + 1 & "月"
On Error Resume Next
dum = Worksheets(shName).Range("A1")
If Err.Number = 0 Then
MsgBox "すでに、" & shName & " シートは存在しています。", 48
Exit Sub
End If
On Error GoTo 0
ActiveSheet.Copy After:=ActiveSheet
With ActiveSheet
.Name = shName
Application.Range("翌月繰越").Copy .Range("F6")
Application.Range("クリア範囲").ClearContents
.Range("G6").Select
End With
End Sub
この回答への補足
ご回答有難うございます。
上手く行きました。
シートを作成する際、翌月の「5月」と表示される点まで
ご配慮いただき有難うございます。
シート名「2008.04」を新しいシート名「2008.05」と
するには、どのようにしたらよいでしょうか。
また、翌月繰越の範囲を貼付ける際、
翌月繰越には式が入っているため、値のみを貼付けたいのですが、
どのようにしたらよいでしょうか。
No.2
- 回答日時:
こんにちは。
そのマクロは分かりにくいですね。
最初に、記録マクロで作られたものは、「標準モジュール」で動くようには作られても、シートモジュールでは動くようにはなっておりません。
まず、セルやRangeの位置関係が、曖昧なのです。
'コマンドボタンのあるシートから、
ActiveSheet.Copy Before:=ActiveSheet '新しいシート
Application.Goto Reference:="翌月繰越" '前のシート
Selection.Copy '前のシートの翌月繰越
Range("F6").Select 'これはコマンドボタンのあるシートになくてはエラーが発生します。
それと、その「名前-登録」の使ったマクロは読めません。私が、以前から、ぼんやりとしていた問題のイメージが、このコードでやっとはっきりしました。
この場合は、「名前-登録」がどこにあるかにもよりますが、このName オブジェクトが、Applicationに対して一意ですから、コピー側に移ってしまうようです。そうすると、どうしようもないというか、そのマクロでは、偶然に誰かが場あり的に解答は出来ても、今の時点では、厳密には答えはありません。
「名前-登録」の処理をどのようにするかにもよります。
今の段階では、シートコピーをやめて、シートを新たに挿入するスタイルにして、元のシートのCellsコピーすれば、問題は減るとは思います。
>コピー元シートの右側に追加するにはどうしたら良いでしょうか。
ActiveSheet.Copy After:=ActiveSheet
ということでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで金銭出納帳。繰越残高を...
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
前の(左隣の)シートを連続参...
-
エクセルでファイルを開いたと...
-
特定のシートの削除を禁止した...
-
エクセルのシート名をリスト化...
-
シートの保護のあとセルの列、...
-
複数シートの色付きセルがある...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
Excelで同じシートのコピーを一...
-
エクセルで複数設定したハイパーリンク先...
-
VBAでシートコピー後、シート名...
-
シートを任意の日付で自動で作...
-
VBA セルの値と同じ名前のシー...
-
【Excel マクロ】 同一book内で...
-
MIDで指定するセル番号を、別の...
-
Accessのスプレッドシートエク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
Excelで金銭出納帳。繰越残高を...
-
Excelで同じシートのコピーを一...
-
Excelのシートを、まとめて表示...
-
エクセルでファイルを開いたと...
-
Accessのスプレッドシートエク...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで同一フォーマットのシー...
-
シートの保護のあとセルの列、...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルで複数設定したハイパーリンク先...
-
複数シートの特定の位置に連番...
-
エクセルでファイル保存時に複...
-
特定のシートの削除を禁止した...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
おすすめ情報