2017-03-24 10 views
0

ExcelのIDのソートされたリストがあります。私は同じIDを持つすべての行をつかみたい、そして私はそれらを操作するでしょう。同じID番号を持つすべての行を選択してから反復する - VBA

Sub Selectingabox() 
Dim I As Integer 
Dim N As Integer 
'Defining 
I = 1 
N = 1 
'Initializing 
While I < 3000 
'If I have more than 3k rows I'm in serious trouble anyways 
If Range("A" & I).Select = Range("A" & I + 1).Select Then 
I = I + 1 
Else: Range("A" & N, "AJ" & I).Select 
'Lots of stuff manipulating the data range we just selected 
N = I + 1 
'The new top row 
I = I + 1 
'The new bottom row 


Wend 
End Sub 

非常にうまくいきません。私にはうんざりですが、私はなぜ分かりません。コードが動作するかどうかも分かりません!

+1

'どこかにif'終わりがあるはず? – scb998

答えて

1

物事のカップル解決されること:自分の価値観限りではなく整数を暗く

  • を、あなたが取得することはできませんので、行のエラー32k
  • コードをより効率的にするためにwhileループではなくFORループを使用してください。
  • 代わりに3000を使用すると、VBAを使用してf最後の行を自動的に使用するCells(Rows.Count, "A").End(xlUp).Row
  • コードに.Selectを使用することはお勧めできません。何を操作しようとしていますか?

    Sub Selectingabox() 
    Dim I As Long 
    Dim N As Long 
    Dim lastrow As Long 
    
    lastrow = Cells(Rows.Count, "A").End(xlUp).Row 
    N = 1 
    
    For I = 1 To lastrow 
        If I = lastrow Then 
         If Range("A" & I).Value <> Range("A" & I - 1).Value Then 
         Range("A" & N & ":AJ" & I).Select 
         N = I + 1 
         End If 
        Else 
         If Range("A" & I).Value <> Range("A" & I + 1).Value Then 
          Range("A" & N & ":AJ" & I).Select 
         'Lots of stuff manipulating the data range we just selected 
         N = I + 1 
         End If 
        End If 
    Next I 
    End Sub 
    
+0

私がしようとしているのは、複数のデータセットでソルバーを実行することです。データセットは固有のIDで表されます。私はVBAに準じて新しくなっていますので、私はより洗練されたソリューションがわからないので、私が仕事を知っているちょっとした方法にデフォルトする傾向があります。この場合、ソルバーシートにデータを貼り付ける必要があります。ソルバーを実行する - 私はその部分を把握していますが、データの選択には苦労しています。助けてくれてありがとう、私はこれを試してみよう! – Selkie

+0

コードが最後の行を評価しないことに気付きました。最後の行の評価を含めるようにコードを更新しました。 –

+0

ちょっとピート - 本当にありがとうございました。 (更新された!)コードが最後の行を切り捨てているようです。私はN =私は正しい方法だと信じていますか? – Selkie

1

あなたのコードにEnd Ifを追加 - コンパイルエラーに

Sub Selectingabox() 
Dim I As Integer 
Dim N As Integer 
'Defining 
I = 1 
N = 1 
'Initializing 
While I < 3000 
'If I have more than 3k rows I'm in serious trouble anyways 
If Range("A" & I).Select = Range("A" & I + 1).Select Then 
I = I + 1 
Else: Range("A" & N, "AJ" & I).Select 
'Lots of stuff manipulating the data range we just selected 
N = I + 1 
'The new top row 
I = I + 1 
'The new bottom row 
End If ' add this here 

Wend 
End Sub 
関連する問題