先日、「日付のセルを複数行コピーする」という質問は練習ではできましたが、実際の作業では「実行時エラー’9’ インデックスが有効範囲にありません。」が表示されます。
実際の作業シートは
“みどり” “FAX” “み” “ど” “り” “sheet1” の5枚のシートがあります。
“みどり”のシート(B7)に日付を入れます。“み”、“ど”、“り”のシートの(A2)にそれぞれ同じ日付が3行コピーする。毎回同じことを繰り替えすので上書きせずに、最終行の下にコピーされるようにしたいと思っています。
下記の回答で練習はできました。
Private Sub Worksheet_Change(ByVal Target As Range) '//この行から//
Dim wS As Worksheet
Set wS = Worksheets("Sheet2")
With Target
If .Address = "$A$1" Then
If .Value <> "" And IsDate(.Value) Then
wS.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(3).Value = .Value
End If
End If
End With
End Sub '//この行まで//
実際の作業シートではどのようにすればいいでしょうか?
調べて色々やってみましたが、ますますわからなくなってしまいました。
コピーするシートが、“み”1枚だけの時と ,“み”、“ど”、“り”に同時に3枚コピーする方法を教えていただけますでしょうか?よろしくお願いいたします。
No.10ベストアンサー
- 回答日時:
「(A2)にそれぞれ同じ日付が3行コピーする。
」とは「(A2)~(A4)の3行にそれぞれ同じ日付をコピーする。」という事ですね?それでしたら以下のような感じではいかがですか?☆「みどり」シートモジュールへ
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$B$7"
If IsDate(Target.Value) Then Call 日付セット(Target.Value)
End Select
End Sub
☆「標準モジュール」の「Module1」などへ
Sub 日付セット(日付 As Date)
Dim 対象シート As Worksheet
For Each 対象シート In Worksheets
Select Case 対象シート.Name
Case "み", "ど", "り"
対象シート.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(3).Value = 日付
End Select
Next
End Sub
No.9
- 回答日時:
tom04 さんへ
何度かは「myAry = Array("み", "ど", "り") '//←ココで対象シート名を羅列しておく//」でエラーが出たんですよ。でもなぜかでなくなりました。
元々が「Excel XP」で作ったものを、変換したせいかなぁ?と思ってそちらでテストしてもエラーしないんですよね。何なんでしょうね?
どういう場面がダメで、どういう事が使えるのか全く分からなくなりました。
No.8
- 回答日時:
この場をお借りして・・・
GooUserラックさんへ
あっ!そちらでもエラーになってしまいましたか?
手元のExcel(2010)で確認した場合、エラーは出なかったので、投稿したのですが。
どうも失礼しました。
>シートモジュールで他のシートの操作は出来ないはずなのでエラーになる筈なんだけどなぁ?
確かにシートモジュールで別シートのデータ消去などの場合はエラーになった経験がありますが、
単にデータ代入に関してはエラーになったことがないので、そのまま投稿しました。
それでもエラーになるのであれば、GooUserラックさんが回答されているように
標準モジュールにコードを記載し、それをシートモジュールで呼び出した方がいいのかもしれませんね。m(_ _)m
No.6
- 回答日時:
tom04 さんへ
こちらでもエラーが出ますね
シートモジュールで他のシートの操作は出来ないはずなのでエラーになる筈なんだけどなぁ?
ちなみにこちらの環境は Windows 10 、Office Home and Business Premium(Excel 2019 32Bit) 相当です
No.5
- 回答日時:
No.1です。
>日付の(B7)ですがBCDEFの結合セルです。
「みどり」シートのB7~F7セルは結合されていて、そのセルにシリアル値を入力!
というコトですね?
今こちらでセル結合後確認してみましたが、ちゃんと動作しました。
>以下のとこに黄色のラインがついています。
もしかして、「み」・「ど」・「り」のいずれかのSheetが存在しない!ってコトはないでしょうか?
こちらで考えられるのはこの程度ですが・・・m(_ _)m
「日付をコピーして、3か所に一つづつ貼り付け、3か所を一度にコピーしそれを各シートに貼り付ける」というマクロを作り直してみました。
まだ簡単な方法があると思いますが、とりあえず目的は達成できました。
本当にありがとうございました。
No.4
- 回答日時:
No.3 補足
・「Select Case」~「End Select」を多用しましたが、これは拡張するときに楽なようにです。
・「Worksheet_Change」イベントモジュールには、そのシートでの処理以外は書かないようにするのがコツです。
・「Sub 日付セット(日付 As Date)」のように引数を持つとマクロのリストに載りません。なおマクロのリストに載せたくないが引数が無い場合は引数は「(Optional ○○ As ○○)」のようにすると良いと思います。
No.3
- 回答日時:
「3行コピー」が良く判りませんが以下のような物はいかがですか?
☆「みどり」シートモジュールへ
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$B$7"
If IsDate(Target.Value) Then Call 日付セット(Target.Value)
End Select
End Sub
☆「標準モジュール」の「Module1」などへ
Sub 日付セット(日付 As Date)
Dim 対象シート As Worksheet
For Each 対象シート In Worksheets
Select Case 対象シート.Name
Case "み", "ど", "り"
対象シート.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = 日付
End Select
Next
End Sub
No.2
- 回答日時:
① “みどり”のシート(B7)に日付が入れば、それに対してマクロが対応して処理を行う。
という事で良いのでしょうか?②「“み”、“ど”、“り”のシートの(A2)にそれぞれ同じ日付が3行コピーする。」の「3行コピー」はどういう事でしょうか?
エラーについてですが、多分以下のようなことだと思います。
「Private Sub Worksheet_Change(ByVal Target As Range)」~「End Sub」には対象以外のシートの処理を書き込むことは出来ません。
他のシートへの処理も行いたいならば、その部分は標準モジュールに作成し「Call ○○」のように呼び出さないといけません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】エクセルにかいてあ...
-
エクセルの行の抽出について質...
-
Excel初心者です。 詳しい方、...
-
スプレッドシート クエリ関数 1...
-
別シートからの文字を変更
-
Excel初心者です。 詳しい方、...
-
Excel 2019 のピボットテーブル...
-
MOS365 Excel Expert / Excel R...
-
エクセルの数式で教えてください。
-
数学 Tan(θ)-1/Cos(θ)について...
-
4つのパターンを表示するEXACT...
-
各ページの1番上の表示について
-
INDIRECTを使わず excelで複数...
-
関数を教えて下さい。
-
Excelのグラフ軸について
-
Excel:一部のフォントでセルの...
-
エクセルで指定した日付、店舗...
-
Excel ウインドウ枠の固定をす...
-
EXACT関数とIF関数の組み合わせ...
-
写真のコピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
早々にありがとうございます。
言い忘れましたが日付の(B7)ですがBCDEFの結合セルです。
実行しましたがシートモジュールに以下のとこに黄色のラインがついています。
Worksheets(myAry(k)).Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(3).Value = .Value
“みどり”シートは、案内用で印刷のマクロが組み込んであります。
“FAX”シートは、 “み”の組、“ど”の組、“り”の組の表があり、優勝から3位までの順位と氏名と点数を入力します。このシートにはFAX用の印刷と各組への転送と上書き保存のマクロが組み込んであります。転送のマクロは、み、ど、り、の各シートにそれぞれ問題なくコピーされています。
A列に大会日を入力したいのですが、その方法を教えていただきましたが、エラーが出てしまいました。「3行コピー」とは優勝から3位までは3行なので3行同時にとなりました。
うまく説明もできずに申し訳ありません。
質問です。
これは Module 1 の End Subの下にコピーすればいいですか?
Sub 日付セット(日付 As Date)
Dim 対象シート As Worksheet
For Each 対象シート In Worksheets
Select Case 対象シート.Name
Case "み", "ど", "り"
対象シート.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(3).Value = 日付
End Select
Next
End Sub
残念できませんでした。
“みどり” シートの日付を入力したら
“み” シートの A2~A4 同じ日付が入力される
“ど” シートの A2~A4 〃
“り” シートの A2~A4 〃
次からは上書きにならないように最終行の下にコピー
“み” シートの A5~A7 同じ日付が入力される
“ど” シートの A5~A7 〃
“り” シートの A2~A4 〃
このような感じです。