マクロが起動しない

このQ&Aのポイント
  • 質問者は、特定のマクロが正常に動作しない問題に遭遇しています。
  • マクロの一部を修正すると、デバッグが発生する問題が発生します。
  • 質問者は、デバッグの原因や改善方法を知りたいと思っています。
回答を見る
  • ベストアンサー

マクロが起動しない

For k = 1 To 1 For i = 10 To 25 Cells(i, 21).GoalSeek Goal:=750, ChangingCell:=Cells(i, 18) ' Range("Z10:AA25").Select Selection.Copy Range("N10:O25").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next Next ' End Sub というマクロで For i = 10 To 25 Range("Z10:AA25").Select Range("N10:O25").Select の3箇所の25という数字を26に書き換えると Cells(i, 21).GoalSeek Goal:=750, ChangingCell:=Cells(i, 18) の箇所がデバックを起こしてしまうのですが考えられる原因、または改善方法があったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >の3箇所の25という数字を26に書き換えると たぶん、それは、U26 [= Cells(26, 21)]に数式が入っていないからでしょうね。 >デバックを起こしてしまうのですが考えられる原因、または改善方法 というよりも、GoalSeak そのものがマクロの一種だと思います。750だから、整数だと思いますが、マクロを使うのでしたら、わざわざ、GoalSeak は必要ないと思います。 それに、数学的(数式では)に求められないのでしょうか? それから、これは、 >Range("Z10:AA25").Select >Range("N10:O25").Select なぜ、ループで同じものを繰り返すのでしょうか?GoalSeek で、仮に値が変わっても、これでは上書きされてしまうから、何重にもコピーしていることになると思います。単に、一つの行ではありませんか? ループの中なら、 >Range("Z10:AA25").Select   ↓  Range("Z10:AA10").Offset(i - 10).Select >Range("N10:O25").Select   ↓  Range("N10:O10").Offset(i - 10).Select もしくは、ループの外で、たぶん、それは、  Range("N10:O25").Value =Range("Z10:AA25").Value と、値コピーすればよいと思います。

winning
質問者

お礼

回答ありがとうございます。 無事に解決いたしました。

関連するQ&A

  • 簡単マクロ編集

    Sheets("Sheet1").Select  ←Range("A3:H8") Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet4").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 下方にこの操作を繰り返ししたいのですが Dim i As Long Worksheets("Sheet1").Select For i = 3 To 100 Step 6 If Cells(i, "A") = "" Then Exit Sub End If Cells(i, "A").Resize(6, 8).Copy Destination:=Worksheets("Sheet2").Range("A3:H8") Next i 貼付けは値で貼り付けたいと思います。 どう組み合わせればよいですか?

  • マクロでエクセルの行を準に削除したいのですが…(;_;)

    エクセルのマクロを使って Range("D3:E3").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Range("D4:E4").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp という風に3000個ほど順番に消していきたいのですがfor...nextを使うと for I = 3 to 3000   Range("DI:EI").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp nest I となってこれを実行するとDIのセルに飛んでしまいます。どうしたらいいのですか?教えて下さいお願いしますm(_ _)m

  • マクロ編集プリントアウト

    Sheets("Sheet1").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet4").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select Range("A9").Select Sheets("Sheet1").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet4").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select Range("A15").Select これで2回プリントアウトされていることになります。 6行ずつ下方にデータが続いています。 データ行数は常に変化します。 dim i as long  for i = 3 to 99 step 6   if worksheets("Sheet1").cells(i, "A") = "" then    worksheets("Sheet2").range("A3:H8").value = worksheets("Sheet1").cells(i - 6, "A").resize(6, 8).value       end if  next i を使用してうまくまとめることはできるでしょうか?

  • エクセルの select case文

    Dim i For i = 1 To 5 Select Case Cells(i, "A") Case "午前" Range("w1").Select Selection.Copy  Cells(i, "C").Select ActiveSheet.Paste Case "午後" Range("x1").Select Selection.Copy Cells(i, "d").Select ActiveSheet.Paste  End Select Next i Dim j For j = 1 To 5 Select Case Cells(j, "A") Case "関東" Range("y1").Select Selection.Copy  Cells(j, "e").Select ActiveSheet.Paste Case "関西" Range("z1").Select Selection.Copy Cells(i, "F").Select ActiveSheet.Paste  End Select Next i 毎回皆様にはお世話になっています。 あるセルを参照してその入力結果により 違うセルを貼り付けるマクロを組みました。 参照するセルが複数個(この例だと2セル)あるので それぞれに変数を宣言してfor nextで まわしています。 この内容を変数ひとつだけで すっきりと記述することは可能でしょうか? 参照するセルや判別する内容が増えると 記述が膨大になって マクロが 見にくくなるので 良い方法がありましたら 御教授ねがいます。

  • Excelマクロプログラム解りません。*初心者です

    初めまして。 私は某発注担当です。 そこで発注したものの履歴を残せないかと思っています。 以下プログラムを印刷マクロに組み込んで、印刷と同時に内容を 発注履歴シートにコピー&ペーストしたいと思っております。 具体的な内容は以下のとおりです。  ・現行ではNextに対するForがないと言われる  ・発注書出力に打ち込んだ商品に対する個数をコピペしたい。   (商品名と個数)   その際、個数を打ち込んだものだけをコピペしたい。 何分、初心者でインターネットのページを見ながら作っており、 至らない点、不明点はご了承ください。 質問にあたり、不足事項ありましたら、ご指摘ください Sub Macro1() Worksheets("発注書出力").Activate For i = 24 To 43 If Cells(5, i) = xlPasteValues Then Range(Cells(4, i), Cells(5, i)).Select Selection.Copy Sheets("発注履歴").Select 貼付行 = Range("C65536").End(xlUp).Row + 1 Range(Cells(4, 貼付行), Cells(5, 貼付行)).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False Worksheets("発注書出力").Select Range("A1").Select ElseIf Cells(5, i) = "" Then Next End Sub

  • VBA超初心者です

    皆さんのお知恵を拝借させてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/12/1 ユーザー名 : 101 ' Dim pearend As Integer Dim code As Integer Dim codeend As Integer Dim sheet_name As String Dim dayend As Date Sheets("商品名").Select Range("A4").Select Selection.End(xlDown).Select pearend = Selection.Row() For l = 4 To pearend Step 2 For r = 2 To 3 Cells(l, r).Select code = Cells(l, r).Value Select Case code Case 1000 To 1999 sheet_name = "1000" Case 2000 To 2999 sheet_name = "2000" Case 3000 To 3999 ssheet_name = "3000" Case 4000 To 4999 sheet_name = "4000" Case 5000 To 5999 sheet_name = "5000" End Select Sheets(sheet_name).Select Range("B4").Select Selection.End(xlToRight).Select codeend = Selection.Column() Range("A5").Select Selection.End(xlDown).Select dayend = Selection.Row() For i = 2 To codeend If code = Cells(4, i).Value Then Range(Cells(dayend, i), Cells(5, i)).Select Selection.Copy Sheets("商品名").Select Range("K3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If Next Next Next End Sub というマクロをつくってみたのですが、何順目かあたりから For r = 2 To 3 のrがなぜか4になっています。正直知識がないのでさっぱりわかりません。どこに問題があるか詳しい方教えてください。

  • エクセルマクロ

    お世話になります。 下記の記述でどこがおかしいのでしょうか 上手く印刷できません。 Sub Macro13() ' ' 'Dim i As Long For i = 1 To 4 Range("Ai:Ei").Select Selection.Copy Sheets("カード").Select Range("G1:K1").Select Selection.Paste Range("A1:F21").Select Application.CutCopyMode = False ActiveSheet.PageSetup.PrintArea = "$A$1:$F$21" ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Next i End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • Excel マクロのループ処理の高速化

     0 ,10 ,20 ,30 ,40 ,50 ,60 ,70 ,80 ,90 ,100 という11種類の数値が、1000個あります。 (1)1000個の数値を収めた列からC6:C20 に20 個無作為抽出し、コピーして E6:E20 にペーストします。 (2)このとき、C6:C20 には新たな数値が20 個無作為抽出されます。 (3)E6:E20 のデータを G6:Z6 にペーストする。  以上を1000回繰り返します(G6~G1005:Z6~Z1005)。1回実施してマクロ登録して、以下のように少し訂正して実施したのですが、高々1000個のデータなのに1分以上かかります。画面がちらついて計算の様子が表示されるので遅いのでしょうか? 高速化できる方法を教えてください。 Sub Macro1()   For N = 1 To 1000     Range("C6:C20").Select     Selection.Copy     Range("E6").Select     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _       :=False, Transpose:=False     Application.CutCopyMode = False     Selection.Copy     RangeStr = "G" & CStr(N + 5) & ":" & "Z" & CStr(N + 5)     Range(RangeStr).Select    'N=1 ⇒ Range("G6:Z6").Select     Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _       False, Transpose:=True   Next N End Sub

  • このマクロ、どこがおかしいですか?

    i5とj5のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i5とj5のセルに何も書かれていないときはそのまま一つ下の列へ行き、行った先のセルでも同じように処理(i6とj6のセルの文字が同じ場合はセル同士を結合して一つ下の行へ行き、i6とj6のセルに何も書かれていないときはそのまま一つ下の列へ行き)を繰り返し、と言うことをi33とj33のセルまで続けたいと思っています。 Sub よろしくお願いします() Dim i As Integer For i = 5 To 33 Cells(i, 9).Select If Cells(i, 9).Value = Cells(i, 10).Value Then Range(Cells(i, 9), Cells(i, 10)).Merge Selection.Offset(i + 1).Select ElseIf Cells(i, 9).Value = "" Then Selection.Offset(i + 1).Select Next i End If End Sub と書いたのですが、『Nextに対応するForがありません』と言われてしまいます。どうすれば思い通りにできるでしょうか? 極めて初心者で、伝わりにくい点があるかもしれません。よろしくお願いします。

専門家に質問してみよう