[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一括でシート作成』(あゆに)
シート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
> With ActiveSheet > .Name = 名前.Value ←これと > .Range("F4") = 名前.Value ←これ、上下逆にして、F4に入っている値をコピーして、それを手作業でシート名にしてみ。 > End With (BJ) 2020/05/03(日) 21:46
シートレイアウトがよくわからなので詳細は現状に合わせて頂くとして そもそも論なんですが、、シートの名前というのは全てが使えるわけではないのです。。。 なので↓これで判定して使用出来れば追加するという事になると思います。。。
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
イミディエイトウインドウに
? 名前.Value
と入力すれば、名前のセルの値がわかります。
想定したものですか?
それらを自分で確認して下さい。
(γ) 2020/05/03(日) 22:04
これなら、 >アプリケーション定義又はオブジェクト定義のエラーと表示されます。
これですね。 >Worksheets("シート1").Range(Cells(4, 2), Cells(r, 2)) >のCellsの前にもシートの特定が必要です。 (BJ) 2020/05/03(日) 22:06
ああ、これでも同じエラーになりますね。 失礼しました。 ActiveSheet.Name = "" (BJ) 2020/05/03(日) 22:24
ステップで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 = 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.