2017-08-02 3 views
0

私のシナリオでは、私は4つの列、列A~Dを持っています。列Bに何らかの値が含まれている場合、列Aの一致する行は所定の値を含むように更新されなければならない。同じマクロは、私は、コードは今それがその結果を達成している列C及びDに適用される:Excel VBA - 列Bに値が含まれている場合は、列Aを値で更新します。列Bに値が含まれていない場合、マクロを実行しない

Sub Update_Column_Based_On_Column_Value1() 
On Error Resume Next 
    Dim ws As Worksheet 
    Dim lRow As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     lRow = .Range("B" & .Rows.Count).End(xlUp).Row 

     .Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).Formula = "=If(B1<>"""",""PREDETERMINED VALUE"","""")" 
     .Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value 
    End With 
End Sub 

列Bに値が含まれている場合、マクロは、列A中の対応するセルに「所定の値」を書き込みます

列に値がまったく含まれていない場合に問題が発生します。何が起こるかは、マクロがデータセット全体のほぼすべての空白セルに新しい値を書き込むことです。

ありがとうございました!私の質問がノービッシュであれば謝りますが、私はまだVBAにはとても新しいです。

+0

私は非常にあなたの問題を理解していないが、私はあなたがではなく、B 'lRow = .Range(「A」&.Rowsの値でそれをベースにすると、この行を変更する必要があると思います。 Count).End(xlUp).Row' – SJR

+0

もう1つの問題は、数式の最初のインスタンスがB1を参照するが、空白が1行にないことです。 – SJR

+0

こんにちは、@SJR 私の要件が明らかに私は達成しようとしているもののスクリーンショットを提供することができます。 コードの変更は、私が探していたものではありませんでした。列Bが空であっても、コード更新列Aを実行しました。 – UserX

答えて

0

この問題を回避するためにコメントセクションにIf WorksheetFunction.CountA(ws.Range("B:B")) = 1を使用することは良い試みですが、以下に説明するような例外があります。さまざまなシナリオ(特に空白範囲を使用)を使用して複数回テストし、毎回望ましい結果が得られているかどうかを確認します。

ただし、コードを簡略化しようとすると、いつかthe .SpecialCells(xlCellTypeBlanks) VBA function does not work as expected in Excelとなります。

また、On Error Resume Nextというステートメントは、実行可能な限り使用しないでください。しかし、必要があれば、On Error GoTo 0ステートメントを確実に挿入して、他のエラーをマスクしないようにしてください。

.SpecialCellsの代わりに、この問題を回避するためにFor Eachループを使用することができます。だからそれはどのように見えるかを見てみましょう:

Sub Update_Column_Based_On_Column_Value1() 
    Dim ws As Worksheet, lRow As Long, r As Range 
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    With ws 
     lRow = .Range("B" & .Rows.Count).End(xlUp).Row 
     For Each r In .Range("A1:A" & lRow) 
      If IsEmpty(r) Then 
       r.Formula = "=If(B" & r.Row & "<>"""",""PREDETERMINED VALUE"","""")" 
       r = r.Value 
      End If 
     Next 
    End With 
End Sub 
+0

寄稿いただきありがとうございますが、私にとってはうまくいくソリューションを見つけました。私は複数のシナリオをテストし、毎回動作します。あなたが望むなら、それをチェックし、フィードバックを残してください! – UserX

+0

それはしませんでした。 pl [screenshot](https://i.stack.imgur.com/QhjuJ.png)を参照してください。マクロ実行前のデータのみがセル「G7」にあった。マクロ実行後、セル「G7」を除く全範囲の「A1:G7」にはゼロが設定されていました。しかし、とにかく、関連するリスクを認識している限り、それはあなたの選択です – curious

0

ここでは誰も答えです!

Sub Update_Column_Based_On_Column_Value_1() 
    On Error Resume Next 
     Dim ws As Worksheet 
     Dim lRow As Long 

     Set ws = ThisWorkbook.Sheets("Sheet1") 

     If WorksheetFunction.CountA(ws.Range("B:B")) = 1 Then 

     Else 

      With ws 
       lRow = .Range("B" & .Rows.Count).End(xlUp).Row 
       .Range("A1:A" & lRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=If(LEN(RC2),""NEW TEXT HERE"", TEXT(,))" 
       .Range("A1:A" & lRow).Value = .Range("A1:A" & lRow).Value 
      End With 
     End If 
    End Sub 
関連する問題