モリチャンです。
昨日も質問しましたが、VBAで50位ある電気試験項目のデータ(エクセル)の内から15位選んで
条件規格を取り出し別シートに貼り付けるマクロ考えています。以下のマクロですが、
TESTNo項目は、080924161801の文字形式でテキストボックスで入力し、
D = Val(Mid(TESTNO, [k - 1] * 2 + 1, 2))の式で2桁のtest番号を取り出し、1項目ずつ
コピーして貼り付けます。
実行すると、コンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。
1)どうしたらコンパイルエラが治せるでしょうか
2)コードで目的と違うものがあったら指摘助言ください。
kは抽出する試験項目数、iは試験の規格/条件項目セル数です。
For i = 1 To 7
For k = 1 To 14
Workbooks.Open Filename:=dfilename
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
If k = 14 Then Exit For
Next i
Windows(Data).Activate
ActiveWindow.Close
If m = 7 Then Exit For
Application.ScreenUpdating = True
MsgBox ("終了します")
No.4ベストアンサー
- 回答日時:
> 動かすとコンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。
> そして、Next iのiの部分が強調されますので、変数i関係が違うと思います
No.1の最初にかいたとおりです。
For k = 1 To 14 に対するNextがありません。
指摘したにも関わらず修正できないというのは、本当にVBAのことを理解されていないのですね。
今後も「マクロの記録」ではないVBAのプログラムをご自身で作成していくのであれば、
VBAの基礎を「体系的に」学ばれることを「強く」お勧めします。
書籍を購入するのが一番だと思いますが、ネットの入門サイトで学ぶのも良いかもしれません。
少々時間がかかるかもしれませんが、最終的には質問者様の為になる一番の近道です。
No.3
- 回答日時:
> すみません。
質問が正確に書いて無くて、mは無くて、i です。> ご指摘を全て入れましたが、next iのiのところが強調されて、
> また指摘された変数の参照が不正ですと指摘されます。
その「ご指摘を全て入れ」たプログラムを「正確に」かつ「全て」書いていただかないと
誰も回答できないと思いますよ?
今までの状況から鑑みて、修正のやり方が間違っていると思います。
> 動きはKのループが終わってK⁼14になってから、iが始まって外側に行くと思っているのですが?
仰っていることが良くわかりませんが、
For文のループは、Forの行とNextの行の間をループします。
Exit Forは、そのループを途中で脱出する(Next行の次へ移動する)ために書くものです。
なのでループの外側に、Exit Forを書いても意味を成さないということです。
> 正確に書いてありませんでした。mでは無くて、iです。修正します。
上に書いた様にNext i 行よりも後に書いても意味を成しません。
あと質問するカテゴリは、ちゃんと選択してくださいね。
ご指摘ありがとうございます。以下が、指摘を全部入れたマクロ部分のプログラムです。他にフォーム部分があります。動かすとコンパイルエラ: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
No.1
- 回答日時:
> コンパイルエラ:Nextで指定された変数の参照が不正ですと表示します。
For k = 1 To 14 に対するNextがありません。
> D = Val(Mid(TESTNO, [k - 1] * 2 + 1, 2))
[k - 1] → (k -1)
> If k = 14 Then Exit For
For k = 1 To 14 なのでk=14になればループは終了します。
よって、この行は不要では?
> Workbooks.Open Filename:=dfilename
二つのForループの中にあるので、ループする度に実行されます。
ループの外に置くべき
あと
Windows(sinn).Activate (sinnって何?)
Windows(Data).Activate
とかWindow( )を使用していますが、Workbook型変数を使用した方が良いと思います。
すみません。質問が正確に書いて無くて、mは無くて、i です。ご指摘を全て入れましたが、next iのiのところが強調されて、また指摘された変数の参照が不正ですと指摘されます。Dataは、規格や条件が入ったデータ、Sinnが、規格条件を貼り付けるグラフのシートです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
fortran if文
-
Fortran90についての質問です。
-
360度を超える角度
-
3つの整数のうち奇数のみを表示...
-
Visual Basic 三辺の長さ? ...
-
Delphi 6 で 2進数→10進数変換
-
JCLの基本について教えてください
-
プログラミング
-
Sublime Text 3でのFortranプロ...
-
c言語です
-
素数を探すプログラム…。
-
あるプログラムのコマンドライ...
-
0除算して、落ちるプログラムと...
-
このプログラミング誰か教えて...
-
Excelで4096点以上のFFTの方法
-
65536は2の何乗なのでしょうか?
-
コンパイルできない
-
パックマンプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
ruby
-
JCLの基本について教えてください
-
値Xを入力し、その平方根を画面...
-
N88basicを用いたGPIB制御
-
COBOLのピリオド
-
ProC 固定SQLでNULLってどう表...
-
Fortran90についての質問です。
-
main関数終了時のreturnの意味は?
-
360度を超える角度
-
C言語 バッファについて。
-
3つの整数のうち奇数のみを表示...
-
Fortran "実引数の型が仮引数の...
-
Delphi 6 で 2進数→10進数変換
-
javaで整数nを入力し、それが素...
-
fortran if文
-
3次関数を作るプログラム
-
BASICプログラム入門 副書名 プ...
おすすめ情報