以下のマクロを組んでいるのですが、実行するとある部分でエラー表示がされてしまいます
行おうと思っていることは、
(1)修理データブック内のセルをコピーして
(2)修理報告書form内のセルにコピーすることを
繰り返そうとしています。
繰り返しをbだけで行うとエラーが表示されないのですがc=0のときは正常に動くのですが、c=1のとき(繰り返したとき)にエラーが表示されてしまいます。どうしたら解決するでしょうか?
Private Sub 検索ボタン_Click()
Workbooks.Open ("C:\Documents and Settings\デスクトップ\修理データブック.xls")
Worksheets("修理データ").Range("A1").Activate
Dim 検索セル As Range ''検索セルを探す処理
Set 検索セル = Columns(1).Find(what:=入力テキスト.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlColumns, MatchByte:=False)
If Not 検索セル Is Nothing Then
検索セル.Select
For a = 1 To 15 ''繰り返し処理1 修理報告書のB4セルからB18セルまでを埋める処理
Selection.Copy
Windows("修理報告書form.xls").Activate ''修理報告書formに貼りつけする処理
Worksheets("入力フォーム").Range("B3").Select
Selection.Offset(a, 0).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Windows("修理データブック.xls").Activate
検索セル.Select
Selection.Offset(0, a).Select
Next a
For b = 15 To 19 Step 2
Range(ActiveCell, ActiveCell.Offset(0, 1)).Select
Selection.Copy
For c = 17 To 20
Windows("修理報告書form.xls").Activate
Worksheets("入力フォーム").Range("B3").Select Selection.Offset(c, 0).Select
Selection.PasteSpecial Paste:=xlValues ←この部分でエラーが表示されます
Application.CutCopyMode = False
Windows("修理データブック.xls").Activate
検索セル.Select
Selection.Offset(0, b + 2).Select
Next c, b
どの様に回避したらよいのかを半日かけて考えたのですがどうにも分かりません。
どなたかご教授いただけますようお願いいたします
No.1
- 回答日時:
>以下のマクロを組んでいるのですが、実行するとある部分でエラー表示がされてしまいます行おうと思っていることは、
エラーを見れるのは貴方だけなのだから、
エラー内容と箇所はきちんと書きましょうよ
super-dog様
大変失礼いたしました。ご指摘ありがとうございます。
下記に修正いたします。
----------
For b = 15 To 19 Step 2
Range(ActiveCell, ActiveCell.Offset(0, 1)).Select
Selection.Copy
For c = 17 To 20
Windows("修理報告書form.xls").Activate
Worksheets("入力フォーム").Range("B3").Select Selection.Offset(c, 0).Select
Selection.PasteSpecial Paste:=xlValues ←この部分で、『RangeクラスのPastespecialメソッドが失敗しました』というエラーが表示されます
Application.CutCopyMode = False
です。これでおわかりになりますでしょうか?
No.2ベストアンサー
- 回答日時:
一回目のコピーの後
Application.CutCopyMode
でセルのコピーをキャンセルしてますよね。
2回目のコピーではクリップボードが空なので
Pasteが失敗してると思われます
super-dog様、ご回答ありがとうございます。
早速行ってみたら、できました!!!
どうもありがとうございました。
付け加えての質問で恐縮なんですが、もしよろしければ教えてください。
指摘いただいた部分を削除したらエラーが出なくなったのですが、自分の思っている通り動きません。
-------------------------------
For b = 15 To 19 Step 2
Range(ActiveCell, ActiveCell.Offset(0, 1)).Select
Selection.Copy
For c = 17 To 20 ←この部分でB列の行を指定。B20からB23を選択することを繰り返したい
Windows("修理報告書form.xls").Activate
Worksheets("入力フォーム").Range("B3").Select
Selection.Offset(c, 0).Select
Selection.PasteSpecial Paste:=xlValues
Windows("修理データブック.xls").Activate
検索セル.Select
Selection.Offset(0, b + 2).Select
Next c, b
--------------------------------------
この部分で、
(1)修理データブックのP列のセルとQ列のセルをコピー
(2)修理報告書formのB20セルに貼り付け
(3)修理データブックのR列のセルとS列のセル
(4)修理報告書formのB21セル((2)で貼り付けしたセルの1行下)に貼りつけ
を繰り返しの分だけ行いたいと考えております。
ところが、今のプログラムでは、
(1)でコピーした内容をB20からB23まですべてに貼り付けて、
(3)でコピーした内容をB20からB23まですべてに貼り付ける
といったようになってしまいます。
自分ではどこが悪いのかよく分かりません。
よろしければご教授いただけませんでしょうか?
No.3
- 回答日時:
おかしいとは思っていたのですが
>For c = 17 To 20 ←この部分でB列の行を指定。B20からB23を選択することを繰り返したい
>Windows("修理報告書form.xls").Activate
>Worksheets("入力フォーム").Range("B3").Select
>Selection.Offset(c, 0).Select
下に17セル、18セルと移動させてしまっています
こんな感じに修正しましょう
Selection.Offset(1, 0).Select
super-dog様、ご回答ありがとうございます。
早速、ご教授いただきましたとおり行いました。
>For c = 17 To 20 ←この部分でB列の行を指定。B20からB23を選択することを繰り返したい
>Windows("修理報告書form.xls").Activate
>Worksheets("入力フォーム").Range("B3").Select
>Selection.Offset(1, 0).Select ←←この部分を変更しました。
すると、B4セルに貼りつけをしてしまいます。
また、繰り返しをしなくなってしまいました。
何べんも申し訳ありませんが、どうしたらよいでしょうか??
No.4
- 回答日時:
ごめんなさい、前の行でセルを選択してしまってますね
For c = 17 To 20
Windows("修理報告書form.xls").Activate
Worksheets("入力フォーム").Activate
'rangeではなくcellsで指定してしまう
cells(c, 3).Select
next c
シート上のデータを見ていないので、状況がわかりにくいのですが
セルの指定がうまくいっていないのは
ActiveCellとかSelection.Offsetを多用するため
現在のセルの位置を見失いやすくなっているからだと思えます。
bの繰り返しも問題があるようだったら見直してみてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel UserForm の表示位置
-
エクセルVBA 配列からセルに「...
-
VBAマクロ実行時エラーの修正に...
-
エクセルの合計を自動で表示さ...
-
EXCEL VBA 文中の書式ごと複写...
-
VBA 複数条件の分岐処理の上手...
-
マクロの実行時エラー'1004'が...
-
入力規則のリスト選択
-
VBA にて、条件付き書式で背景...
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
昨日、質問した件『VBA にて、...
-
ユーザフォームを使ってのデー...
-
VB.netでのExcelデータの読み込み
-
Excel VBAでCheckboxの名前を変...
-
【VBA】写真の貼り付けコードが...
-
VBA:日付を配列に入れ別セルに...
-
グラフの参照元を相対参照で記...
-
VBAでユーザーフォームにセル値...
-
【Excel VBA】一番右端セルまで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報