Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2013)
Nextで指定された変数の参照が不正ですの改善
投稿日時: 19/03/13 23:08:05
投稿者: モリチャン

                                           
モリチャンです。他にフォーム部分があります。動かすとコンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。そして、Next iのiの部分が強調されますので、変数i関係が違うと思います。
どうしたら、コンパイルエラが無くなるでしょうか?
Sub main()
Application.ScreenUpdating = False
Workbooks.Open Filename:=gfilename
sinn = ActiveWorkbook.Name
Sheets("規格値").Select
Range("E10").Select
ActiveCell.Offset(0, 0).Range(Cells(2, 1), Cells(15, 7)).Select
Selection.ClearContents
Workbooks.Open Filename:=dfilename
For i = 1 To 7
For k = 1 To 14
Data = ActiveWorkbook.Name
Windows(sinn).Activate
Range("E10").Select
ActiveCell.Offset(k - 1, i - 1).Select
Windows(Data).Activate
D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
Range(Cells(D, 1), Cells(D, 6)).Copy
Windows(sinn).Activate
Selection.PasteSpecial Paste:=xlFormula
Next i
Windows(Data).Activate
ActiveWindow.Close
If i = 7 Then Exit For
Application.ScreenUpdating = True
MsgBox ("終了しました")
End Sub

回答
投稿日時: 19/03/14 09:31:07
投稿者: あのん345

ちゃんと読んでいませんが
 
Next K
 
が抜けているからでは?

回答
投稿日時: 19/03/14 10:27:00
投稿者: sk

引用:
Workbooks.Open Filename:=gfilename
sinn = ActiveWorkbook.Name

引用:
Workbooks.Open Filename:=dfilename
For i = 1 To 7
For k = 1 To 14
Data = ActiveWorkbook.Name
Windows(sinn).Activate
Range("E10").Select
ActiveCell.Offset(k - 1, i - 1).Select
Windows(Data).Activate
D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
Range(Cells(D, 1), Cells(D, 6)).Copy
Windows(sinn).Activate
Selection.PasteSpecial Paste:=xlFormula
Next i
Windows(Data).Activate
ActiveWindow.Close
If i = 7 Then Exit For

標題のコンパイルエラーのみを修正したところで、
このようなフローでは モリチャン さんが期待
されているような処理が正しく実行されるとは思えません。
 
引用:
Windows(Data).Activate
D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
Range(Cells(D, 1), Cells(D, 6)).Copy

仮に[TESTNO]がユーザーフォーム上のテキストボックスであるとして、
そこにはどのような値が入力されるのでしょうか。

回答
投稿日時: 19/03/14 11:12:40
投稿者: Suzu

引用:
どうしたら、コンパイルエラが無くなるでしょうか?

 
そのエラー自体は、ほかの方が回答くださっている通り
 
 Next k が 抜けているから。
 
 
ただ、、どこに入れてよいのか。。回答者は判断しかねます。
 
引用:

For i = 1 To 7
For k = 1 To 14
 :
Next i
Windows(Data).Activate
ActiveWindow.Close
If i = 7 Then Exit For

 
となっており、
 
  Next k は、 「Next i」より上に入らなければならない
  が、
  Next i 以降に、Exit For があるという事は、その記載以降に、 Next ○ の記載がなければならないのだが
  Next i 以降に、Next k を入れると、エラーになる。
 
上記から Next k をどこに入れたら良いのか、判断できません。
 
どの様な事をやりたいのか説明されては?

回答
投稿日時: 19/03/14 13:55:22
投稿者: WinArrow
投稿者のウェブサイトに移動

コードが非常に読みにくいので読んでいません。
インデントをきちんとつけることをお勧めします。
 
そうすると、コードが読みやすくなり、既にレスでご指摘があるような
修正ヶ所が見えてくると思います。

回答
投稿日時: 19/03/14 14:12:17
投稿者: WinArrow
投稿者のウェブサイトに移動

>If i = 7 Then Exit For
 
このコードは、実質的には、不要ですが、
このコードから推察するに
>Next i
が、本当は
Next k

Next i
が抜けているのかもしれないし・・・
 
 
Select処理が多い。紛らわしい…わかりにくい
 
 
インデントを付けると同時に
 ブック、シート、セルのSelectを止めるよう、お勧めします。
 

回答
投稿日時: 19/03/14 14:42:07
投稿者: WinArrow
投稿者のウェブサイトに移動

1つ「気になったところ
 
>Selection.PasteSpecial Paste:=xlFormula
 
この引数は
 
Selection.PasteSpecial Paste:=xlPasteFormulas
ではないのか?
 

回答
投稿日時: 19/03/14 15:52:18
投稿者: WinArrow
投稿者のウェブサイトに移動

sk さんの引用:

モリチャン さんの引用:
Selection.PasteSpecial Paste:=xlFormula

WinArrow さんの引用:
Selection.PasteSpecial Paste:=xlPasteFormulas
ではないのか?

どちらの定数も値は -4123 なので、実行される動作は同じです。

 
調査方法がまちがっているのかな?
 
こちらで調べた結果
xlFormula は「5」
x;PasteFormulas は、「-1423」
で、実行結果は同じにはならなかったです。
 
テスト
セルA1:10、セルB1:5、セルC1:100
セルH1:=$A$1+$B$1*$C$1
 
コード
    Range("H1").Copy
    Range("J5").PasteSpecial Paste:=xlFormula      '結果:空白
    Range("K5").PasteSpecial Paste:=xlPasteFormulas '結果:=$A$1+$B$1*$C$1
 

回答
投稿日時: 19/03/14 15:54:05
投稿者: sk

引用:
こちらで調べた結果
xlFormula は「5」
x;PasteFormulas は、「-1423」
で、実行結果は同じにはならなかったです。

申し訳ありません。
定数 xlFormulas と見間違えました。

回答
投稿日時: 19/03/14 20:07:08
投稿者: WinArrow
投稿者のウェブサイトに移動

>Next i

Next k
と仮定すると
 
次のようになる
    For k = 1 To 14
        Data = ActiveWorkbook.Name
        Windows(sinn).Activate
        Range("E10").Select
        ActiveCell.Offset(k - 1, i - 1).Select
        Windows(Data).Activate
        D = Val(Mid(TESTNO, (k - 1) * 2 + 1, 2))
        Range(Cells(D, 1), Cells(D, 6)).Copy
        Windows(sinn).Activate
        Selection.PasteSpecial Paste:=xlFormula
    Next k
そうすると、2行目の
> Data = ActiveWorkbook.Name
ActiveWorkBook
は、1回目と2回目以降で異なるブックになる・・・・・
 
現段階は、コンパイルエラーで実行できていないので、確認できていないと思うが、
ロジックを検証してみてください。
 
 
 

トピックに返信