
いつもお世話になっております。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
-
4
ExcelのVBAを使ってタイトル行が2行ある場合の別シートへの抽出方法
Visual Basic(VBA)
-
5
VBAで重複データを合算したい
Excel(エクセル)
-
6
VBA コードを実行すると画面が真っ白になる
Visual Basic(VBA)
-
7
セルの値と同じ名前のシートをアクティブにするには?
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
11
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
12
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
13
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
14
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
15
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
16
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
17
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
18
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
19
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
20
マクロ最終行挿入
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
どうやってもFor文を抜けてしま...
-
マクロで、次のコードへ行く前...
-
VBA For Each 〜 複数条件について
-
private subモジュールを他のモ...
-
Word VBA。各マクロの間に待ち...
-
C言語のGOTO文(組み込み系)
-
StatusStripの表示が更新されな...
-
ドリブン??
-
IF文に時間(何時から何時ま...
-
Access プログレスバー 画面...
-
フォルダのアクセス権確認について
-
VB6.0で、ランタイムエラーを全...
-
エクセル VBAで複数セル選択時...
-
シグナル 6(SIGABRT)とは?
-
ExcelのVBAで、選択したファイ...
-
VBA ユーザーフォーム上にテロ...
-
エクセルVBAでロックをかけたい
-
Excel VBA セルの名前があるか...
-
途中で処理を中断させたい (ア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
どう増強すべきか
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
特定のファイルを他のプロセス...
-
VB6にてネットワーク上にある共...
-
どうやってもFor文を抜けてしま...
-
Word VBA。各マクロの間に待ち...
-
エクセル VBAで複数セル選択時...
-
【VBA】エラー処理で別プロシー...
-
フォルダのアクセス権確認について
-
VBA For Each 〜 複数条件について
-
StatusStripの表示が更新されな...
-
【C#】Page_Loadさせない方法に...
おすすめ情報