2017-04-14 14 views
1

以下のコードは機能しますが、現在は単一のセル範囲ではなく列範囲で機能する必要があります。 私は次のように置換する必要があります。単一セル範囲を列範囲に変更する

CJ3単一セルからCJ列(3行目から開始)。

CK3シングルセルからCKカラム(3行目から開始)。

CM3シングルセルからCMカラム(3行目から開始)。

CN3シングルセルからCNカラム(3行目から開始)。

CO3単一細胞対COカラム(3行目から開始)。

誰でも助けてください。

Option Explicit 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value = "" And Range("CN3").Value = "" Then 
     Range("CO3").Value = "FOLLOW UP" 
    ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value = "" Then 
     Range("CO3").Value = "AWAITING APPROVAL" 
    ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value > 0 Then 
     Range("CO3").Value = "CLOSED" 
    ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value = "" Then 
     Range("CO3").Value = "AWAITING APPROVAL" 
     Range("CK3:CM3").Value = "N/A" 
    ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value > 0 Then 
     Range("CO3").Value = "CLOSED" 
     Range("CK3:CM3").Value = "N/A" 
    End If 
End Sub 
+1

おそらく、「列内の各セルをループする」必要があります。これは非常に一般的な作業であり、そのコードは初心者からよく尋ねられます。私は引用符で囲んだ用語についてはgoogleかもしれません。 – Variatus

+0

私は "列の各セルをループ"しようとしましたが、シートが減速しました。例:Dim i As Long セル数(i、88)。値= "フォローアップ"とセル(i、91)。値= "" Then セル(i、93)。値= "フォローアップ" 終了場合 次はi エンドサブ – Zero

答えて

0

私はあなたのコードが取り組むべきでワークシートを指定するように促します。デフォルトではActiveSheetです。したがって、以下の私のコードはあなたとほとんど変わりません。違いは、具体的に書き留めておけば、それはあなた自身のコードを理解するのに役立ち、トラブルシューティングのスピードアップにつながります(コードを書くよりも時間がかかります)。別のシートを指定することもできます。たとえば、Set Ws = Worksheets("Sheet1")です。間違って別のシートに魔法をかけることができないため、これははるかに優れています。

これはあなたのコードが今のように見えるかもしれません。

Private Sub TryLoop() 

    Dim Ws As Worksheet 
    Dim Rl As Long        ' last row 
    Dim R As Long        ' row 

    Set Ws = ActiveSheet 
    With Ws 
     Rl = .Cells(.Rows.Count, 1).End(xlUp).Row 
     For R = 1 To Rl 
      If .Cells(R, 88).Value = "FOLLOW UP" And .Cells(R, 91).Value = "" And .Cells(R, 92).Value = "" Then 
       .Cells(R, 93).Value = "FOLLOW UP" 
      End If 
     Next R 
    End With 
End Sub 

Rows.Count(それが指定されている場合、またはWs)アクティブシート内の行の数を返します。使用するExcelのバージョンに応じて、少なくとも65,000行になります。はい、ループするには時間がかかります。したがって、上記のカバーは、実際に列1(列「A」)の値を有する行へのループを制限する。このような行は、Rl = .Cells(.Rows.Count, "A").End(xlUp).Rowのように書くこともできます。

あなたのコードは完璧だと思います。それは何ではないのですか?

+0

ありがとうございます。私はあなたのコードを試します。私のコードはPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)にあります。私がそのシートの別のセルを選択するたびに、それは永遠に取っています。 – Zero

+0

どこかをクリックするたびにコードを実行する必要はありません。そのため、その範囲を制限する必要があります。イベントプロシージャの 'Target'引数は、クリックされたセルを保持します。 'If​​ Target.Column <> 88 Then Exit Sub'のように言うことができます。あるいは、同じ目的のために 'Application.Intersect'を使用してください。変更を行ったときにのみコードを実行し、同じ方法でアクションを制限したい場合は、Selection_Changeの代わりにChangeイベントを使用することを検討してください。変更が "Follow Up" 。 – Variatus

+0

完璧に動作します!あなたの良い提案と親切な助けに感謝します。上のコードでは、 "Rl = .Cells(.Rows.Count、1).End(xlUp).Row"という行に変更しなければならなかった。 "Rl = Cells(Rows.Count、1).End(xlUp)。セルと行の前に句読点を付けずに "行"を入力します。 – Zero

関連する問題