2017-02-09 22 views
0

入力された内容に基づいて次の列に移動する際にうまく機能するコードがあります。列13に到達したときに限ります。最後の行で開始し、 。誰か助けてくれますか?Excel特定の列を選択するExcel VBAコード

Dim lastrow As Long  
If Target.Column > 2 Then 
    lastrow = Range("A17").Value 
    'lastrow = Me.Cells(Me.Rows.Count, "B").End(xlDown).Row 
    If Target.Column Mod 2 = 1 Then 
     If Target.Row >= lastrow Then   
      Me.Cells(Target.Row, Target.Column + 1).Select 
     Else    
      Me.Cells(Target.Row + 1, Target.Column).Select 
     End If 
    Else  
     If Target.Row = 3 Then  
      Me.Cells(Target.Row, Target.Column + 1).Select 
     Else   
      Me.Cells(Target.Row - 1, Target.Column).Select 
     End If 
    End If 
End If 
+0

をあなたが –

+0

何を意味するかわからない手の込んだことができ多分あなたはxlUp代わりのxlDown 'LASTROW = Me.Cells(Me.Rows.Count、 "B")を必要とします。 End(xlUp).Row' – Slai

+0

これはExcelスプレッドシート上にあります。それはColumn MOD関数ではうまく動作しますが、Column 13にいる間は上がる必要があります。希望はもっと理にかなっている。 –

答えて

1

問題があなたの文であるかのように思える:

If Target.Column Mod 2 = 1 Then 

私はあなたがエクセルVBAのための剰余演算子を探していると信じて「\」。これを試してください:あなたのコメントパー

If (Target.Column\2) = 1 Then 

、コラム13のためにこのコードを追加してみてください:

If Target.Column = 13 Then 
'<your code here' 

これはトリックを行う必要があります。

また、オフセット機能を使用することもできます。構文は.Range( "")。(RowOffset、ColumnOffset)です。これにより、固定位置からオフセットすることができます。

以下、完全に編集されたコードを参照してください:

If Target.Column > 2 Then 
lastrow = Range("A17").Value 
'lastrow = Me.Cells(Me.Rows.Count, "B").End(xlDown).Row 
If Target.Column Mod 2 = 1 Then 
    If Target.Row >= lastrow Then   
     Me.Cells(Target.Row, Target.Column + 1).Select 
    Else    
     Me.Cells(Target.Row + 1, Target.Column).Select 
    End If 
ElseIf Target.Column = 13 Then 
    ' I am assuming the code below is what you need 
    ' this would start at your last row and work it's way up 
    Me.Cells(lastrow, Target.Column).Select 
    For i = lastrow to 1 Step - 1 ' replace 1 with however far up you want it to go 
     Me.Cells(i, Target.Column).Select 
    Next 
Else  
    If Target.Row = 3 Then  
     Me.Cells(Target.Row, Target.Column + 1).Select 
    Else   
     Me.Cells(Target.Row - 1, Target.Column).Select 
    End If 
End If 
End If 
+0

ありがとうございます。私が探しているものをクリアしようとしましょう。コードは正常に動作します。本当に問題はありません。私はちょうど何かのようにコードに追加したい場合はTarget.Column Mod 2 = 1またはTarget.Column <> 13それは動作しますか? –

+0

私はなぜそれがコードに基づいて動作しないか分からない。 Target.Columnが適切に設定されている限り、.Column値(インデックス位置)を返し、必要に応じてその番号を使用できるようにする必要があります。 私はまた、あなた自身でそれを試してみることを強くお勧めします。何かがうまくいかない場合は、なぜそれが働いていないのか理解してみてください。 VBAはうまくいけば本当に簡単に学ぶことができます。試してみることで、どのように動作するのかを学ぶことができます。 –

+0

ok、ありがとう、Brandon。私は、私が提供したコードを使って多くの試みを行った。私はあなたのコードを試して、それは私のコードのように動作します。彼らは両方とも、奇数行でも偶数行にカーソルを上げるように働きます。私が試していた問題や追加点は、13桁目になったときにカーソルを別の方法で動かしてみて、いくつか試してみたところ、わかりません。ご協力ありがとうございました! –

関連する問題