Excel VBA 質問スレッド No.198 (解決済)

固定のシートを枚数指定でコピーした際に、コピー後のシート全ての指定セルに文字を入力したい。

投稿者 : かさご     投稿日時 : 2021/03/22(Mon) 14:26:53     OS : Windows 10     EXCEL : Excel 2016
パソコン入力をして使う表を作成しているのですが、原紙のシートを枚数指定で複数のシートを作成できるようにプログラムを作りました。コピー後のシート全ての指定セルに文字を入力したいのですが、コピーしたシートの最後のシートにしか文字が入力されません。すべてのシートに入力する方法って何かあるでしょうか?

Sub CommandButton1_Click()

Dim h1, h2, h3 As String
h1 = Worksheets("data_sheet").Range("A1").Value
h2 = Worksheets("data_sheet").Range("A2").Value
h3 = Worksheets("data_sheet").Range("A3").Value

Dim Sh As Object
Set Sh = ActiveSheet

Worksheets("新規作成").Activate

Dim i As Integer
Dim cnt As Integer

cnt = Application.InputBox(Prompt:="枚数を入力", Title:="枚数指定", Type:=1)
For i = Worksheets.Count To Worksheets.Count - 1 + cnt

ActiveSheet.Copy before:=Worksheets("新規作成")
ActiveSheet.Name = h1 & h2 & h3 & Worksheets.Count - 2

Next i

Dim str As String
str = StrConv(ActiveSheet.Name, vbWide)
ActiveSheet.Range("A4").Value = str

End Sub

[返信 1] Re : 固定のシートを枚数指定でコピーした際に、コピー後のシート全ての指定セルに文字を入力したい。
投稿者 : かさご     投稿日時 : 2021/03/22(Mon) 14:38:29
シート名がわかりにくかったので、修正しました。

Sub CommandButton1_Click()

Dim h1, h2, h3 As String
h1 = Worksheets("Sheet2").Range("A1").Value
h2 = Worksheets("Sheet2").Range("A2").Value
h3 = Worksheets("Sheet2").Range("A3").Value

Dim Sh As Object
Set Sh = ActiveSheet

Worksheets("Sheet1").Activate

Dim i As Integer
Dim cnt As Integer

cnt = Application.InputBox(Prompt:="枚数を入力", Title:="枚数指定", Type:=1)
For i = Worksheets.Count To Worksheets.Count - 1 + cnt

ActiveSheet.Copy before:=Worksheets("Sheet1")
ActiveSheet.Name = h1 & h2 & h3 & Worksheets.Count - 2

Next i

Dim str As String
str = StrConv(ActiveSheet.Name, vbWide)
ActiveSheet.Range("A4").Value = str

End Sub

[返信 2] Re : 固定のシートを枚数指定でコピーした際に、コピー後のシート全ての指定セルに文字を入力したい。
投稿者 : ヘンリー     投稿日時 : 2021/03/22(Mon) 19:14:26
>すべてのシートに入力する方法って何かあるでしょうか?
方法は多数ありますが、上記のコードで、ほぼ出来ていますよね。
私には、敢えて最後のシートにのみ、文字を代入しているように見えます。

プログラミングは、コンピュータにやらせたい事を
やらせたい順序に記述するだけです。
シートをコピーしたら、文字を代入する
それを、InputBoxで入力された数だけ繰り返せばできると思います。

【その他気になる点】
まずは、↓のような変数の宣言はやらないようにしましょう。
>Dim h1, h2, h3 As String

この場合、h1 As Variant, h2 As Variant, h3 As String と宣言しています。
つまり、全てを文字型で宣言する場合、
Dim h1 As String, h2 As String, h3 As String
と記述して宣言します。


以下の2行は、全く意味をなしておりません。
理由は、Object変数のShにActiveSheetを代入した後、
Shに対しての指示がないからです。
>Dim Sh As Object
>Set Sh = ActiveSheet

おそらく、色々調べて努力されたのかと思います。
その努力できる方なので、次は、ステップイン実行をして
「1つ1つの行が、どのような結果を返す命令なのかを確認する」
「分からなければ、また調べる」を繰り返すと
プログラミングの力が付いてくると思います。

ぜひ頑張ってください。

[返信 3] Re : 固定のシートを枚数指定でコピーした際に、コピー後のシート全ての指定セルに文字を入力したい。
投稿者 : かさご     投稿日時 : 2021/03/22(Mon) 21:14:44
回答ありがとうございます。
まだ勉強し始めでしっかりと理解が出来ていない部分があったので、ご指摘頂けてとても嬉しいです。
記述の順序を変えたりと試行錯誤して上手く出来ました。
宣言の仕方はすぐに直していきたいと思います。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2021-04-21 07:46:46 )

Page
Top