[[20200503211253]] 『一括でシート作成』(あゆに) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一括でシート作成』(あゆに)

シート1のB4以降のB列にリスト作成しそれを基にシート2をコピーしてリスト分のシートを作成しようとしているのですが
.Name = 名前.Value
の部分でエラーが起きます。
色々試してみたのですが解決できませんでしたので投稿致しました。
構文載せますので訂正すべき箇所教えていただけないでしょうか。

Dim 名前 As Range
Dim r As Integer

   r = Cells(Rows.Count, 1).End(xlUp).Row

   For Each 名前 In Worksheets("シート1").Range(Cells(4, 2), Cells(r, 2))
   Worksheets("シート2").Copy After:=Worksheets(Worksheets.Count)

   With ActiveSheet
    .Name = 名前.Value
    .Range("F4") = 名前.Value
    End With

    Next 名前

宜しくお願い致します。

< 使用 Excel:Office365、使用 OS:Windows10 >


エラーメッセージはどのようなものですか?

ちなみに、直接の原因ではないようですが、
Worksheets("シート1").Range(Cells(4, 2), Cells(r, 2))
のCellsの前にもシートの特定が必要です。

(γ) 2020/05/03(日) 21:35


アプリケーション定義又はオブジェクト定義のエラーと表示されます。
(あゆに) 2020/05/03(日) 21:43

 >   With ActiveSheet
 >   .Name = 名前.Value           ←これと
 >   .Range("F4") = 名前.Value    ←これ、上下逆にして、F4に入っている値をコピーして、それを手作業でシート名にしてみ。
 >   End With
(BJ) 2020/05/03(日) 21:46

併せて、ステップ実行して、
rとか、名前.Value が想定したものとなっているかを確認して下さい。
こういう作業をデバッグといいますが、その手法は理解されていますか?
 
rを決めるときA列の最終行を見ていて、
実際のリストはB列にあることが想定外のことを起こしていないかとか、
シート名として使えない文字を使っていないかとか、
気になることはあるが、すべてのエラーになりうるケースを想定することはできないし、
無駄なことです。
 
エラーが発生しているところで、あなたがそれを観察することが大切です。
(γ) 2020/05/03(日) 21:49

ちなみにRange("B4:B8")でやれば作動します
(あゆに) 2020/05/03(日) 21:51

 シートレイアウトがよくわからなので詳細は現状に合わせて頂くとして
そもそも論なんですが、、シートの名前というのは全てが使えるわけではないのです。。。
なので↓これで判定して使用出来れば追加するという事になると思います。。。

 If Not Evaluate("=ISREF('" & 名前.Value & "'!A1)") Then

 Sub kk()
Dim 名前 As Range
Dim r As Integer
r = Cells(Rows.Count, 1).End(xlUp).Row
With Worksheets("シート1")
    For Each 名前 In .Range(.Cells(4, 2), .Cells(r, 2))
        If Not Evaluate("=ISREF('" & 名前.Value & "'!A1)") Then
            Worksheets("シート2").Copy After:=Worksheets(Worksheets.Count)
            With ActiveSheet
                .Name = 名前.Value
                .Range("F4") = 名前.Value
            End With
        Else
            MsgBox 名前 & " は、つかえません。"
        End If
    Next 名前
End With
End Sub
(SoulMan) 2020/05/03(日) 22:01

ステップ実行というのはわかりますか?
F8キーを押しながら、一行毎に実行していく方法です。
https://www.239-programing.com/excel-vba/basic/basic023.html
rを計算する行を実行し、
rのところにカーソルを近づけると、値がポップアップされます。
いくつになっていますか?

イミディエイトウインドウに
? 名前.Value
と入力すれば、名前のセルの値がわかります。
想定したものですか?

それらを自分で確認して下さい。

(γ) 2020/05/03(日) 22:04


 これなら、
 >アプリケーション定義又はオブジェクト定義のエラーと表示されます。

 これですね。 
 >Worksheets("シート1").Range(Cells(4, 2), Cells(r, 2)) 
 >のCellsの前にもシートの特定が必要です。
(BJ) 2020/05/03(日) 22:06

BJさん、エラー発生の行がそこではないようです。
(γ) 2020/05/03(日) 22:12

たぶん""を名前にしようとしているんじゃないかな。
でも大事なことは、ご自分で手を動かして確認し、
また、その調査方法をマスターしてもらうことです。
(γ) 2020/05/03(日) 22:15

 ああ、これでも同じエラーになりますね。
 失礼しました。
 ActiveSheet.Name = ""
(BJ) 2020/05/03(日) 22:24

すみません""とはなんでしょうか。空白ということでしょうか?
B4から下は顧客名が入っているので空白では無いと思います。

ステップでrの値は0になっていました。
名前はNothingになっていました。
(あゆに) 2020/05/03(日) 22:37


 >r = Cells(Rows.Count, 1).End(xlUp).Row
 の前にシート名がないので意図した動きになっていないだけでは???
(SoulMan) 2020/05/03(日) 23:07

 >B4から下は顧客名が入っているので空白では無いと思います。 
 だとすると
 すくなくとも
 >r = Cells(Rows.Count, 2).End(xlUp).Row
 ですよね???
(SoulMan) 2020/05/03(日) 23:25

>ステップでrの値は0になっていました。
>名前はNothingになっていました。
それはありえません。

ステップ実行中に黄色でハイライトしている行は、
実行された行ではなく、今まさに実行しようとしている行です。
黄色になっている行が、
r = Cells(Rows.Count, 1).End(xlUp).Row
の次になった段階で、rの値を確認して下さい。

また大事なことですが、そのコードは、
現在アクティブになっているシートの
(B列ではなく)A列のデータがある最終行を示します。

"シート1"シートがアクティブであることが保証されないから、
シートを特定する書き方に変更する必要がありますよ。(他のところでやっているように)

# ちょっとしたことで結果が変わってきますから、注意して下さい。
(γ) 2020/05/03(日) 23:49


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.