よろしくお願いします。
A1:1 B1:あ
A2:2 B2:い
A3:3 B3:う
と書いてあるまとめシートと、1、2、3というシートがあるとします。
シート1のA1セルに「あ」、シート2のA1セルに「い」、シート3のA1セルに「う」と書き込まれるように、まとめA列の文字列からシート名を呼び出して書き込むようにVBAを組んでいます。
Dim sht_n As Variant
Dim sht_c As Integer
i = 7
sht_n = Worksheets("まとめ").Index
sht_c = ThisWorkbook.Sheets.Count
For sht_n = sht_n + 1 To sht_c Step 1
If Cells(i, 1).Value = "" Then
i = i + 1
Else
wb = Cells(i, 1).Value
Worksheets("まとめ").Cells(i,2).Select
Selection.Copy
ThisWorkbook.Worksheets(wb).Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlValues
こんな感じ。
下手なのは分かってます。あと、現在使っているものから書き出しているので間違えてる部分もあるかもしれません。
この状態だと、シート1がない場合にはエラーが出てしまって、そこで終わってしまいます。
まとめシートが空欄の場合はエラーを回避しているのですが、シートがない場合の回避方法が分かりません。
On Error Resume Nextは使わずに、シートがない場合にエラーを回避する方法はありますでしょうか。
分かるかた、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
こんにちは。
>どのように回避すべきかというところに至りたかったので、
繰り返しますが、シートのセルにあらかじめキメウチにする限りは、エラーを承知でコーディングしたほうがよいと思います。ただ、初級の人には、エラートラップは難しいです。失敗を繰り返しながら覚えるのですが。
エラー処理の学習レベルに関しては、以下をご覧ください。
http://vbae.odyssey-com.co.jp/vbae/pro2003.html
シート名に数字を使う場合、マクロでシート名を入れて作らない限りは、不明なエラーが発生することがあるので、そのために、本来は、特殊なコードになるはずですが、今回はそういうことはないということで作りました。
'-----------------------------
Sub ErrorSample()
Dim mSht As Worksheet
Dim i As Integer
Dim shName As String
Dim sh As Worksheet
Set mSht = Worksheets("まとめ")
For i = 1 To mSht.Range("A65536").End(xlUp).Row
shName = mSht.Cells(i, 1).Value
If shName <> "" Then
On Error Resume Next
Set sh = Worksheets(shName)
If Err.Number = 0 Then
sh.Cells(1, 1).Value = mSht.Cells(i, 2).Value
End If
On Error GoTo 0
Set sh = Nothing
End If
Next i
Set mSht = Nothing
End Sub
改めてありがとうございます。
大変勉強になりました。
また、リンク先も非常に勉強になっております。
普通にコーディングしているつもりでもエラーはどんどん出てくる有様なので、間違えながら、間違えてるとVBAに怒られながら、上手にコーディングできるようにがんばりたいと思います。
No.3
- 回答日時:
#2の修正
#いずれにしても、エラーは発生しますから、あまり良い方法はないと思います。
あえて、その都度、ループで全シートをチェックすれば、エラーは発生しませんが……。
この回答への補足
ありがとうございます。
実は、かなりの初心者です。
仕事上必要になったこともあり、勉強も兼ねて書いています。
On Error Resume Nextは勉強していく上で知った方法です。また、エラーが出ることも分かった上で作っています。
「勉強」という事で、ただ回避するだけではなく、どのように回避すべきかというところに至りたかったので、このような質問を投げかけました。考えうるエラーに対して何かしらの対策を施したいという気持ちからです。
No.2
- 回答日時:
こんにちは。
>On Error Resume Nextは使わずに、
なぜ、そのような条件が必要なのでしょうか。
エラートラップが分かって、そうおっしゃっているとは思います。エラートラップを使いこなせられるなら、レベル的には相当に上級クラスだと思います。その上の質問なら、ご自身で考えたほうがよいのではないでしょうか。エラートラップを使わない方法もありますが、いずれにしても、エラーは発生しますから、あまり良い方法はないと思います。
A1:1 B1:あ
A2:2 B2:い
A3:3 B3:う
Worksheets(シート名)が、予め決められているものに対して、ループで名前を探す方法はあっても、私からすれば、初心者でエラートラップの使い方が分からないのか、それとも、わざと制限したコードになるのだと思います。エラートラップを使わない理由自体が分かりません。
No.1
- 回答日時:
こんにちは。
コードを変えてみました。ご参考に
Sub test()
Dim wR As Long
Dim c
With Sheets("まとめ")
For wR = 1 To .Range("A" & Rows.Count).End(xlUp).Row '←入力行数を求める
If .Cells(wR, 1) <> "" Then 'シート名が入力されている
For Each c In Worksheets
'シート存在チェック
If c.Name = Trim(.Cells(wR, 1)) Then
'存在する場合のみ設定
Sheets(c.Name).Range("A1") = .Cells(wR, 2)
End If
Next
End If
Next
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL:同じセルへどんどん足し...
-
Excelで同じシートのコピーを一...
-
エクセルで前のシートを連続参...
-
EXCELで1ヶ月分の連続した日付...
-
Accessのスプレッドシートエク...
-
別シート参照のセルをシート毎...
-
日報をエクセルで作成したいの...
-
VBAでシートコピー後、シート名...
-
VBAでシート1のデータを他シー...
-
【Excel マクロ】 同一book内で...
-
エクセルVBA 串刺し計算の際、...
-
シートを配列にいれることはで...
-
特定のシートの削除を禁止した...
-
VBA セルの値と同じ名前のシー...
-
EXCELで参照シート名含む計算式...
-
一太郎で複数シートの一括置換
-
【エクセルVBA】「インデックス...
-
②Excel 簡単にシートコピーした...
-
エクセルで最下行にデータを追...
-
前の(左隣の)シートを連続参...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで同一フォーマットのシー...
-
エクセルで前のシートを連続参...
-
エクセルで前シートを参照して...
-
VBAでシートコピー後、シート名...
-
Accessのスプレッドシートエク...
-
エクセルのシート名をリスト化...
-
複数シートの特定の位置に連番...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
スプレッドシートの関数VLOOKUP...
おすすめ情報