2017-02-09 8 views
0

次のような場合に回答したいと思います。私は基本的なVBAの知識を持っている、私が間違った表現を使用している場合は申し訳ありません。Excel VBA:数式値をテキストに変換する

私は長い旅行に行きたいが、出発する前にタイヤの状態をチェックしなければならないとしましょう。私は3つの質問に関する答えを持っていなければなりません:

  1. タイヤは過小過少ですか? (G1への回答)
  2. タイヤはフラットですか? (G2)
  3. 気象条件が異なるためにタイヤを交換する必要がありますか? (Excelシートの後続の行、列5-9)のいずれかの質問が未解決のままか、答えははい、さらにアクションが必要とされるであれば (G3)

事です。 3つの答えがすべてNoの場合、タイヤはOKで、後続の行を非表示にします。

結論をラップするためには、私はG4に次の式を入力しました:

=IF(AND(G1="No",G2="No",G3="No"), "No", "Yes")を。

数式は完全に答えます。 私はこれまで私が持っているコードの一部抜粋を貼り付け:

Worksheet_Change(ByVal Target As Range) 
Select Case Target.Address 
    Case "$G$4" 
    Rows("5:9").EntireRow.Hidden = (Target = "No") 
... 

問題は、コードは、セルG4式の答えを読んでされていないことです。数式を削除して手動で回答を書き直すと、コードは完全に機能し、後続の行が非表示になります。 主な問題は、G4の式の結果をコードのために読みやすくすることです。

誰でも助けてください。または、より良い解決策がありますか?前もって感謝します。

答えて

0

「G4で式の結果を変換してコードに読みやすくする」という問題はありません。しかし、Worksheet_ChangeイベントのターゲットはG4でなく、G1またはG2またはG3のいずれかになり、数式計算によってG4の値が変更されます。しかし、この計算はWorksheet_Changeイベントではなく、Worksheet_Calculateイベントです。

だからG1またはG2またはG3Worksheet_Changeイベント

Private Sub Worksheet_Change(ByVal Target As Range) 
Select Case Target.Address 
    Case "$G$1", "$G$2", "$G$3" 
    Me.Rows("5:9").EntireRow.Hidden = (Me.Range("G4").Value = "No") 
End Select 
End Sub 

それとも、Worksheet_Calculateイベントで式の再計算の結果を確認するには、ターゲットであるかどうかをチェックされ、次のいずれか

Private Sub Worksheet_Calculate() 
Me.Rows("5:9").EntireRow.Hidden = (Me.Range("G4").Value = "No") 
End Sub 
+0

それがうまく働いていました、ありがとう! – bandiras