
いつもお世話になっております。
VBAで作業をしていたところ、とある箇所でずっと詰まってしまい、
また皆様のお力を借りたいと思い・・・。
おそらく、基礎中の基礎かもしれませんが、お付き合い頂ければ助かります;;
【質問内容】
Functionが2つあったとします。
現在のFunctionから、別のFunctionに飛んで、また元のFunctionに戻ってきた際に、
Forでループ中でも抜けてしまうのでしょうか?
おそらく、何を言ってるか分からないと思いますので、以下にコード例を記載します。
_________________________________
【コード例】
function sample1()
Dim roop as Long
’シート1のCell(7,4)には「100」と入力されており、「roopが2~100」の間ループさせます。
for roop + 2 To sheets("シート1").cells(7,4)
処理2
’特定条件を満たしたら、「sample2」に飛びます。
if 条件 then
call sample2
End If
next
End function
_________________________________________________________________________________________
function sample2()
’sample1()で使用していたroop変数をそのまま使用します
for roop + 1 To 50
処理2
roop + 1
next
’処理が終わりsample1()のnextに戻ります。
’roopには、仮に50が格納されているとします。
End function
_________________________________________________________________________________________
上記のコードとなります。
最初はSample1()で処理を行い、特定条件を満たしたらSample2()に移行。
Sample2()の処理が終わったら、元のSample1()に戻る。
2つのFunction内で使用していた「roop」変数は、まだ80にも関わらず、
Sample1()のFor文を抜けてしまいます。
Sample1()のForのループ条件は「2~100」としていますが、
これは別のFunctionに飛ぶと、無くなってしまうのでしょうか?
何を言っているのか分からないなどございましたら、ご指摘ください・・・;;
以上、よろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> for roop + 2 To sheets("シート1").cells(7,4)
これでは、他の記述も疑ってかからないと ^^;
一応、他のコード(引数など)が正しく書かれているものとして
モジュールの先頭に
「Option Explicit」 は書かれていますか?
無ければ追加してください。
訳のわからない動作が減る可能性はあります。
あとは、ここに転記されていないコードでエラーが発生して、
エラーで止まらないような設定(あるいはコード)のため
エラー処理のない一番上位のプロシージャで
抜けてしまっている、
などの場合に、こんなことになるかも。
とにかくコードを書きたい
というお気持ちもわかりますが
「急がば回れ」です。
まずはVBAの基礎から勉強しましょう。
ご回答が遅くなり申し訳ありませんでした。
ご指摘頂きありがとうございました。
「Option Explicit」のおかげで記述ミスをしている箇所を見つけました…。
ありがとうございました。
>とにかくコードを書きたい
>というお気持ちもわかりますが
>「急がば回れ」です。
>まずはVBAの基礎から勉強しましょう。
ですね…。
まだ1週間も経ってないので、本でも買って基礎を身につけたいと思います。
No.5
- 回答日時:
こんにちわ。
まだ解決に至っていないものと考え、投稿いたします。
おそらく、Sample2の最初のところは
Sub Sample2(roop as integer)
のように記述されているかと思いますので、これを
Sub Sample2(byval roop as integer)
としてみていただけますか。
そうするとSample1に戻った時にFor文を抜けないはずです。
http://homepage1.nifty.com/CavalierLab/lab/vb/by …
roopはLoopですよね!(^-')b ナイスぼけです。
ご返事が遅くなり申し訳ありませんでした。
昨日からネットがおかしくなりオフラインで作業しておりました。
質問内容ですが、記述ミスがあった箇所を見つけて解決いたしました…。
わざわざご回答頂きありがとうございました。
>roopはLoopですよね!(^-')b ナイスぼけです。
その通りですね。
なんたってVBA初めて4日くらいで、しかも英語の成績1ですからね。
そんなもんです。
No.4
- 回答日時:
とりあえず roop の値を call sample2 の前後で確認してみましょう。
Debug.Print roop
call sample2
Debug.Print roop
でイミディエイトウィンドウに値が表示されます。
ちなみに現状質問のコードの状態でしたら、Sample1()とSample2()で利用しているroop変数は別々のものでSample2()から戻ったときにSample1()のroop変数に変化は無いはずです。
また実際
シート1のセルD7
に100と入力されているのかも確認してみましょう。
ところで
cells(7,4)
より
Range("D7")
の方が分かりやすくないですか?
ご回答頂きありがとうございました。
Debug.Print roop
call sample2
Debug.Print roop
これ便利ですね;;
今後有効活用させてもらおうと思います!
>ところで
>cells(7,4)
>より
>Range("D7")
>の方が分かりやすくないですか?
たしかに;;
セルの値を変数に置き換えない箇所は、出来る限りRange()とするようにします;;
慣れてる人は良いと思いますが…;;
No.3
- 回答日時:
変数の扱いをどうしているのか判りませんが、2つの関数でroopを共通にするのはよくありませんよ。
Sample2()の冒頭で、
roop2 = roop
などを行ない、置き換えたらどうですか?
尚、Sample2()の中の
roop + 1
は何でしょうか?
roop = roop + 1
なら、Do ~ loopでは使いますが、For ~ next では使わないと思います。
ご回答頂きありがとうございました。
>尚、Sample2()の中の
>roop + 1
>は何でしょうか?
>roop = roop + 1
>なら、Do ~ loopでは使いますが、For ~ next では使わないと思います。
ご指摘の通り、ココもミスっていました…。
まだ超が付くほどの初心者なので、Do文というものを知りませんでしたw
基礎から出直してきます…;;
ありがとうございました!
No.2
- 回答日時:
’sample1()で使用していたroop変数をそのまま使用します
まーそんなことあまりやらないですけど。
roop変数はグローバル変数なんですか?
(変数はなんでもよいけど普通はスペルはloopですね)
sample2のfor文は
for roop=1 to 50
ですか?
しかも roop=roop+1 をfor文内でやるんですか?意味不明。
sample2でroopが50になってsample1に戻るので抜けてしまうどころか永久に1のforは抜けませんよ。
コードを正確に書いてください。
無駄な改行は入れずに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
-
4
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
7
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
8
ExcelのVBAを使ってタイトル行が2行ある場合の別シートへの抽出方法
Visual Basic(VBA)
-
9
VBAで重複データを合算したい
Excel(エクセル)
-
10
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
13
未使用の変数を一括検索する方法
Visual Basic(VBA)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
17
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
18
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
19
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
20
VBA 数値を文字列として貼付したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private subモジュールを他のモ...
-
【C#/Java?】try-catchでcatch...
-
特定の名前のオートシェイプの...
-
vbaのエラー対応(実行時エラー...
-
Excel VBA セルの名前があるか...
-
VB.NET SPRED(チェックボック...
-
メモリ不足になった後の処理
-
IF文に時間(何時から何時ま...
-
【VBA】エラー処理で別プロシー...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
シグナル 6(SIGABRT)とは?
-
Excelプロセスが消えない
-
ASP(VBScript)でDBのテキス...
-
順番に処理させたい
-
途中で処理を中断させたい (ア...
-
【Vb.net】プリンタジョブの取得
-
起動しているIEをVBSで閉じると...
-
エクセル VBAで複数セル選択時...
-
Functionで戻り値を複数返す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
特定の名前のオートシェイプの...
-
途中で処理を中断させたい (ア...
-
特定のファイルを他のプロセス...
-
順番に処理させたい
-
Word VBA。各マクロの間に待ち...
-
StatusStripの表示が更新されな...
-
ドリブン??
-
ExcelのVBAで、選択したファイ...
-
RaiseEventのメリット
-
【VBA】エラー処理で別プロシー...
-
エクセルVBAでロックをかけたい
-
どうやってもFor文を抜けてしま...
おすすめ情報