[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『実行時エラー424の対処方法』(sysk)
"実行時エラー424""オブジェクトが必要です。"と表示され、ネット等で解決策を調べたところ、Setを入れることで解決できることまでは分かったのですが、下記のように入力しても同じエラーメッセージが出てきます。 超素人の質問で申し訳ありませんが、どなたか原因と対策を教えて頂けないでしょうか。
'変数r,rngをRange型,wsをWorksheet型で宣言 Dim r As Range Dim rng As Range Dim ws As Worksheet Set ws = Worksheets(5) '"当月払出し数量"欄をコピー Range("M22:U33").Select Selection.Copy 'セルU22を基準に表の右端のセルの列番号を変数rに代入 Set rng = ws.UsedRange.Columns(ws.UsedRange.Columns.Count).Column '"当月払出し数量"欄を表の一番右端のセルに貼付 Range(22, rng + 1).Select ActiveSheet.Paste Application.CutCopyMode = False
よろしくお願い致します。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
rngをlong型にすれば、その行は通りますが、次の行が意味不明なので、別のエラーになる事でしょう。
やりたい事が、1列ずらして別シートにコピーする事であるならば、以下の1行で済んだりしませんか?
Worksheets(5).Range("M22:U33").Copy ActiveSheet.Range("N22") (???) 2019/12/20(金) 18:17
>???さん
ご回答ありがとうございます。また、返信が遅れてしまい申し訳ありません。
ご教示頂きました、rngの型をInteger,Long等に変えてみても、今度は"コンパイルエラー""オブジェクトが必要です"と表示されて上手くいかないため、他にもおかしいところがあるようなのですが、恥ずかしながらその箇所を特定できません。
やりたい事としては、M22:U33で指定した範囲を、実行する度に同一シートの現在の表の一番右端にコピーしていく(実行する度に表が拡大していく)、といった動作になります。
実行する度にペーストする箇所が変わるためUsedRangeプロパティを使おうとしているのですが使い方がどうもよく分かりません。
お手数ですがご教示をお願い致します。 (sysk) 2019/12/23(月) 10:01
Range("M22:U22")に 空白セルがないことが条件ですが
下記のコードで試してください
Sub test()
With Worksheets(5) .Range("M22:U33").Copy .Range("U22").End(xlToRight).Offset(, 1) End With Application.CutCopyMode = False
End Sub
(渡辺ひかる) 2019/12/23(月) 10:34
ご回答ありがとうございます。
教えて頂いたのに大変恐縮ですが…当方でEnd(xlToRight)も試してみたものの、上記のようなコードだと1回は上手く動作するのですが、2回目以降が上手くいきません。
Range("M22:U33")には空欄の方が多くなるため、空欄があっても使えそうなUsedRange.Columnsを使用するのが解決の糸口かと思っておりました。
大変申し訳ありませんが、他にいい方法があればご教示頂けないでしょうか。よろしくお願い致します。 (sysk) 2019/12/23(月) 13:58
Sub test() Dim myClmCnt As Long Dim i As Long With Worksheets(5) myClmCnt = .Range("M22:U33").Columns.Count
i = -1 Do i = i + 1 If WorksheetFunction.CountA(.Range("U22").Offset(myClmCnt * i).Resize(, myClmCnt)) = 0 Then .Range("M22:U33").Copy .Range("U22").Offset(myClmCnt * i).Offset(, 1) Exit Do End If Loop Until .Range("U22").Column + myClmCnt * (i + 1) > .Columns.Count End With End Sub
では?
(渡辺ひかる) 2019/12/23(月) 15:33
Dim r As Range Dim ws As Worksheet Set ws = Worksheets(5) Set r = ws.Range("M22:U33") Do Set r = r.Offset(, r.Columns.Count) If WorksheetFunction.CountA(r) = 0 Then ws.Range("M22:U33").Copy r: Exit Do Loop End Sub (mm) 2019/12/23(月) 15:49
>渡辺ひかるさん
度々の返信ありがとうございます。
やはり最初の1回は上手く動作するのですが、2回目以降が上手くいきません。
>mmさん
ご回答ありがとうございます!
上記のコードで動作実現致しました!ありがとうございます。あとは実用に沿って細かいところを修正して使わせていただきたいと思います。
ご回答下さいました皆様、本当にありがとうございました。 (sysk) 2019/12/23(月) 18:38
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.