2017-10-17 7 views
2

イブニング機能VBA/Excelを再現するため、より効率的な方法は、すべての

に私は私が働いてきたし、誰もが私を助けることができるかどう思っていたいくつかのコードを少し問題を抱えています。

Excelワークシートを使用して、Vlookupを使用してボックスサイズを自動的に追加し、「その他」が選択されていない限りセルをロックする必要があります。すべてが、各行のコードを別々に書いています。しかし、私は700 +の行のためにこれを実行する必要があり、私はそれがばかげているので、これを700回書きません。私はこれを解決するために様々なループを試しましたが、私は立ち往生しています。

x個の行に対して効率的に実行する方法を誰かに教えてもらえますか? これは行11には完全に機能し、x回書き込まれると複数の行に作用します。私はおそらく、ソリューションが表示されるときに自分自身を蹴るつもりです、これはとてもイライラです。

Private Sub lock_repair(ByVal Target As Range) 
'Box 1 
ActiveSheet.Unprotect Password:="pass" 
If Target.Cells(1).Address = "$C$11" And Target.Cells(1).Value <> "OTHER" Then 
    Range("D11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 2,FALSE),0)" 
    Range("E11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 3,FALSE),0)" 
    Range("F11").Formula = "=IFERROR(VLOOKUP(C11, Data!$D$5:$G$24, 4,FALSE),0)" 

    ActiveSheet.Range("D11:F11").Locked = True 

ElseIf Target.Cells(1).Address = "$C$11" And Target.Cells(1).Value = "OTHER" Then 

    ActiveSheet.Range("D11:F11").Locked = False 


End If 
ActiveSheet.Protect Password:="pass", UserInterfaceOnly:=True 

End Sub 

事前に乾杯。 Dave

答えて

0

あなたは正しいです。まず、バックアップでこれをテストする必要があります。

Private Sub lock_repair(ByVal Target As Range) 
    'Box 1 
    ActiveSheet.Unprotect Password:="pass" 
    If Target.Cells(1).Column = 3 And Target.Cells(1).Value <> "OTHER" Then 
     Range("D" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 2,FALSE),0)" 
     Range("E" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 3,FALSE),0)" 
     Range("F" & Target.Row).Formula = "=IFERROR(VLOOKUP(C" & Target.Row & ", Data!$D$5:$G$24, 4,FALSE),0)" 

     ActiveSheet.Range("D" & Target.Row & ":F" & Target.Row).Locked = True 

    ElseIf Target.Cells(1).Column = 3 And Target.Cells(1).Value = "OTHER" Then 

     ActiveSheet.Range("D" & Target.Row & ":F" & Target.Row).Locked = False 


    End If 
    ActiveSheet.Protect Password:="pass", UserInterfaceOnly:=True 

    End Sub 
+0

ありがとうございました! –