2016-06-28 4 views
0

私は繰り返し作業をするためにマクロを作成しています。あなたのクリアな視界を与えるために、私はそれが何をしたと何のフローチャートと同様の下に私の最初のマクロ(VBA)コードを用意しました:条件が満たされるまでマクロを繰り返します。

ここ

マクロの物語の説明:

  1. チェックマクロは単語が「合併」が見つかった場合の列Kのすべてのセルは、それが言葉「MFC済」
  2. が含まれている場合、それはマクロを呼び出した後、それはすべて再チェックする別のマクロ(Macro_X)
  3. を呼び出します"MERGED"という単語がまだ含まれている場合は、列Kのセル
  4. マクロで "Merged"という単語が見つかった場合は、Macro_Xが再び呼び出されます。
  5. 条件は、列Kに「結合」という単語が含まれていない場合にのみ停止します。
  6. マクロが列「K」に「結合」単語を見つけなかった場合は、Macro_Zを呼び出します。列の

    Last = Cells(Rows.Count, "K").End(xlUp).Row 
    For i = Last To 1 Step -1 
        If (Cells(i, "K").Value) = "Merged" Then 
    
         Call macro_x 
    
        End If 
    Next I 
    

enter image description here

スクリーンショットK

enter image description here

私はすでに上記のコードを持っているが、それは働いていません。理由は分かりません。何が間違っているのか、より良いコードを提案するのを助けてください。

+0

どのように機能しませんか?あなたはエラーコードを取得していますか?それとも正しく出力されないのでしょうか? – MutjayLee

+0

何もありません。何も起こっていない。出力なし。エラーなし。 –

+0

「差し込み」という単語が入力されていることを確認します。 **シート()**機能を使用していないので、確認しているシートが有効になっていることを確認してください。 – MutjayLee

答えて

1

単純なブール変数を追加して、 "MERGED"という単語が見つかったかどうかを確認できます。

Dim Word_Found as Boolean 

Last = Cells(Rows.Count, "K").End(xlUp).Row 
For i = Last To 1 Step -1 
    If (Cells(i, "K").Value) = "Merged" Then 
     Call macro_x 

     Word_Found = True 
     i = LAST 

    End If 
Next I 

If Not(Word_Found) Then Call macro_z 

上記のコードは、コードから変更することができます。

以下のコードは、フローチャートを見ながら書かれています。

While Not (Columns("K").Find("Merged") Is Nothing) 
    Call macro_x 
Wend 
Call macro_z 
+0

私はあなたのコードを試してみましたが、2〜3回だけチェックを行います。カラムKにはまだカラムKの単語「マージ」が残っています。私は再びそれを実行すると、エラー '実行時エラー13型の不一致' –

+0

マクロのxは**列K **の値を "マージ"に変更しますか?マクロ_xを実行した後、** Column K **をもう一度チェックする必要がありますか? – MutjayLee

+0

はい。フローチャートを参照してください。ボックスを "call macro x"と呼ぶ部分は、マクロxを実行した後、 "Check Column K ..."というボックスに戻ります。 –

1

Macro_Xの最後に最初のマクロを呼び出すことができます。 macro_xため

Sub checker() 
Last = Cells(Rows.Count, "K").End(xlUp).Row 
For i = 1 To Last Step -1 
    If (Cells(i, "K").Value) = "Merged" Then 

     Call macro_x 

    End If 
Next I 
Call macro_z 
End Sub 

:最初のマクロの

Sub macro_x() 
'DO SOMETHING HERE 

Call checker 
End Sub 

編集:私は大文字で始まっていない、あなたのセルに "マージ" されて表示さ

For i = 1 To Last Step -1 
+0

あなたの答えは@ 9i2ありがとうございます。残念ながら、それはうまくいきませんでした。また、エラーはありませんが、条件や条件を満たしていないsub_checkerを使わずにmacro_zを呼び出しています –

+0

あなたのセルに「マージ」以外の文字が含まれている場合は、「* Merged * " – 9i2

1

最初のものしかし、あなたのコードではありません。

ですので、これに変更してください。

Last = Cells(Rows.Count, "K").End(xlUp).Row 
For i = Last To 1 Step -1 
    If (Cells(i, "K").Value) = "merged" Then 

     Call macro_x 

    End If 
Next I 
関連する問題