エクセルvba2013です。
シート名が例えば,「1-10」、「11-20」、「21-30」・・・と続いていくブックがあります。
最後に「原紙」という名前のシートを設けて、vbaを実行すると、「原紙」シートの前に新しいシートを作成し、名前を新しく作成したシートの前の名前から続けて連番をつけて、「原紙」シートの一部をコピー貼り付けしたいと思っております。
うまくいかないのは、新しく挿入したシートに前シートから続く連番をの名前をつける部分です。例えば、名前をつけたいシートの前シートが「99-100」だとすると、「101-110」という名前にしたいのですがうまくいきません。
下記コードの newsheetname という変数の内容をどうするか?、または、それが無理ならシート上にシート名を取得しておいて、シート名に反映させるなど根本的にやり方を変えるということになると思いますが、もしコードで実現できる方法があるならば、それでやりたいと思います。
Sub シートコピー()
Dim beforesheetname As String
Dim newsheetname As String
beforesheetname = Worksheets(Worksheets.Count - 1).Name ’新しく挿入するシートの一つ前のシート名取得
newsheetname = beforesheetname ’←??????どうすればいいか不明
Worksheets.Add(before:=Worksheets("原紙")).Name = beforesheetname '原紙シートの前に新規シート追加して、名前を変更
ActiveWindow.DisplayGridlines = False ’枠線を非表示
Worksheets("原紙").Range("A:AF").Copy Worksheets(beforesheetname).Range("A:AF") '原紙シートのセル内容を新しいシートに貼り付け
End Sub
No.2ベストアンサー
- 回答日時:
No.1 です。
一応動作するサンプルです。
前のシート名が「A-10」などでも動いてしまうのはご愛敬ということで。
Sub シートコピー_サンプル()
Dim BeforeSheetName As String
Dim NewSheetName As String
Dim strLastNum As String
Dim LastNum As Long
Dim pos As Long
If Sheets.Count > 1 Then
On Error Resume Next
BeforeSheetName = Worksheets(Worksheets.Count - 1).Name '新しく挿入するシートの一つ前のシート名取得
pos = InStr(1, BeforeSheetName, "-")
If pos > 1 Then
strLastNum = Mid(BeforeSheetName, pos + 1)
LastNum = CLng(strLastNum)
End If
If LastNum = 0 Then
MsgBox "前のシート名が不正です。"
Exit Sub
End If
On Error GoTo 0
End If
NewSheetName = (LastNum + 1) & "-" & (LastNum + 10)
Worksheets.Add(before:=Worksheets("原紙")).Name = NewSheetName '原紙シートの前に新規シート追加して、名前を変更
ActiveWindow.DisplayGridlines = False '枠線を非表示
Worksheets("原紙").Range("A:AF").Copy Worksheets(NewSheetName).Range("A:AF") '原紙シートのセル内容を新しいシートに貼り付け
End Sub
どうもありがとうございました。ばっちり動きました。
コードの内容も分かりやすく理解できました。InStrやMidを使って取得すればよかったのですね。CLngを使ってエラー処理にもつなげていくのですね。
「A-10」などで動くのもまったく問題ありません。もし問題がでても、ここで使っている同じやり方で頭の部分も処理すればシート名の不正で停止させることもできますね。
どうもありがとうございました。
No.1
- 回答日時:
シート名の付け方の規則がイマイチはっきりしないので
回答が付きにくくなっているようです。
・「原紙」は必ず最後にある。
・必ず 1から始まり 10刻みである。
※だとすると↓の「99-100」はなぜ?
> 例えば、名前をつけたいシートの前シートが「99-100」だとすると、「101-110」という名前にしたいのですがうまくいきません。
・上記の例外もあるとすると、
前のシートの終わりの番号から初めて 10刻み
(前が 「103-111」で次は「112-121」になる?
あるいは必ず 10 で割り切れる数値にする、
等々。
不明の点があるとプログラムって作れないものなんですよ。
当てずっぽうで作ってやり直しになるのを嫌う回答者は多いと思われます。
解決したければ
すべての質問に明確にお答えください。
訊いていないことでも、必要と思われることは補足してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) シート名を簡単に書く方法があれば教えてください。 4 2023/08/24 12:40
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Excel(エクセル) vba アクティブシートのA1セルの値を基準に複数のシートコピー&シート名を 6 2023/04/12 18:36
- Visual Basic(VBA) 以前シートを集めて1シートへ繋げる下記コードをご教授いただき作成しました。 今回すでに集めてある「ま 1 2022/08/29 20:38
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
Accessのテーブルを既存のExcel...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
Wordで差し込み印刷時に表示す...
-
EXCELの「シートの見出し」のフ...
-
ワークシートそのものの色を変...
-
エクセルでリンク貼り付けした...
-
エクセルのシー名を二段表示に...
-
エクセル、特定のシートにパス...
-
EXCELの図形(テキストボックス)...
-
エクセルの2つのシートを並び...
-
エクセル 非表示のシートをハ...
-
エクセルを開くとメニューバー...
-
【Excel VBA】データ貼り付け先...
-
(エクセル)Indirect関数で、ハ...
-
エクセルでシートを追加したと...
-
PowerQueryで行数の指定はでき...
-
エクセル、別のシートの表をポ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報
すいません。ミスです。補足いたします。
「原紙」は必ず最後にあります。
で、肝心の「99-100」はミスです。「91-100」でした。1から始まり 10刻みで考えていましたが、今回の回答をみて、可能ならば、前のシートの終わりの番号の続きから、 10刻みにできればと思います。例えば、途中例外で、「91-101」というシート名に手動で変更したとすると、次はvbaで「102-111」という10の範囲のシート名ができれば完璧です。
記載ミスや変更等、すいませんがもし可能ならばご教授ください。