前提・実現したいこと
VBAでプログラムを作成しています、
シート内で文字検索をし、検索結果のセルを特定の数だけ移動したセルを取得し、新規作成した別のシートに値を貼り付ける作業を全シート行いたいです。
ステップインを行うと問題なくプログラムが実行されますが、実行のみを行うと貼付が行われないので原因が知りたいです。
ただ、コピーは実行されているみたいです。
該当のソースコード
vba
1Sub test() 2 3 4 Dim x As Long 5 Dim y As Long 6 Dim myRange As Range 7 Dim firstCell As String 8 Dim yokin As Range 9 Dim memo As Range 10 Dim copycell As Range 11 Dim copysheet As String 12 13 copysheet = InputBox("シート名を入力してください", "新規作成") 14 15 Worksheets("コピー元").Copy after:=Worksheets(1) 16 ActiveSheet.Name = copysheet 17 18 19 x = 6 20 21 For y = 1 To Worksheets.Count 22 23 Worksheets(y).Activate 24 Set myRange = Worksheets(y).Cells.Find("103-00002") 25 26 If Not myRange Is Nothing Then 27 firstCell = myRange.Address 28 29 Do 30 Set yokin = ActiveSheet.Cells(myRange.Row, myRange.Column + 4) 31 Set memo = ActiveSheet.Cells(myRange.Row, myRange.Column + 19) 32 33 If yokin > 0 Then 34 Union(ActiveSheet.Cells(yokin.Row, yokin.Column), ActiveSheet.Cells(memo.Row, memo.Column)).Select 35 Selection.Copy 36 Worksheets(2).Activate 37 Cells(x, "c") = Worksheets(y).Name 38 Cells(x, "i").Select 39 ActiveSheet.Paste 40 x = x + 1 41 Worksheets(y).Select 42 End If 43 44 Set myRange = Cells.FindNext(myRange) 45 46 47 Loop While myRange.Address <> firstCell 48 49 End If 50 51 Next 52 53 Worksheets(2).Activate 54 55End Sub
試したこと
vba
1Worksheets(2).Activate 2Cells(x, "c") = Worksheets(y).Name 3
上のどちらかににブレークポイントを設置し、実行すればステップインをした時と同様に実行結果が得られますが、
ここ以外にブレークポイントを設置する、またはデバックせずにそのまま実行するとうまく貼り付けが実行されてくれません。
「ここら辺が原因なのはわかっている」というのはどういう事でしょうか。
通常、原因がわかれば解決できるはずです。
質問文を編集して、説明を追記して下さい。
ここにブレークポイントを設置し実行すると貼付が実行されます。
ステップインでも同様に問題なく実行されます。
ただ、ブレークポイントを設置しないで実行、または別の場所にブレークポイントを置いて実行すると貼り付けができていません。
似たような事例があれば教えていただきたいです。
その説明も全然ピンときませんが、それが起こったことを正確に記述できているのであれば「質問文を編集して追記して下さい」
ソースコードはマークダウン記法のソースタグで囲んでください。
分からなければ、ソースを選択した状態でツールバーの <code> をクリックしてください。
「Cells(x, "c") = Worksheets(y).Name」の Cellsの使い方は間違っています。
Cellsの引数は2つで、一つ目が行番号、二つ目が列番号を指定します。 C4 セルを指定するなら、Cells(4,3)となります。
Cells の第2引数には、列番号でも列名(アルファベット)でも指定できますので間違ってません。
まあ、誤解を生みやすいので、Range("C" & x) とするか、Cells(x, 3) の方がいいとは思いますが。

回答2件
あなたの回答
tips
プレビュー