2017-07-06 7 views
0

紳士、次のループの問題のために

私は小さな問題で苦労し、彼らのためにクレージーを取得します。私は本当にあなたのアドバイスを感謝します。

私はブックに「najemcy」というワークシートを持っています。このワークシートでは、A2 = 3、A7 = 2、A12 = 1です。以下のセルがマージされます。A2:A6、A7:A11、A12:A16列Gには、G2 = 550、G3 = 55、G7 = 650、G8 = 11G12 = 550という値がある。

マクロは、範囲A2:A6、A7:A11、A12:A16の最後の値を見つける必要があります。つまり、アドレスが$ G $ 4、$ G $ 8、$ G $ 12ですが、$ G $ 12の代わりに$ G $ 1048576というメッセージボックスを3回受け取ることを意味します。

Public Sub helpMe() 

Dim najemcy As Worksheet 
Dim pokoj As Range 
Dim pokNr As Integer 
Dim obecnyLok As Range 

    For pokNr = 3 To 1 Step -1 
     Set najemcy = Sheets("Najemcy") 

     Set pokoj = najemcy.Range("A1:A100").Find(What:=pokNr, LookIn:=xlValues, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 
'   MsgBox pokoj.Address 

     Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address).End(xlDown) 
     MsgBox obecnyLok.Address 

    Next 
End Sub 
+0

Cześćチェックすることです。 'pokoj'は' najemcy'シートのセルです。このセルから6セル右に移動し、そのセルからアドレスを取得し、このアドレスに 'najemcy.Range'を実行します。だからあなたは同じ細胞に戻って行きます。代わりに 'Set obecnyLok = pokoj.Offset(0、6).End(xlDown)'を使うことができます。 –

+0

良い点!ありがとうございました。 – neke

答えて

0

あなたはそれが空白行を打つが、現在の下に最初の行が空白の場合、それはちょうど行き続けるだろうまで、それは下がるだろう(xlDown)を.END使用する場合。設定しobecnyLok` `であなたは奇妙な何かがあります)、この周り

一つの方法は、次の行がダウン(xlDown)を.END使用する前に、空白の場合

Public Sub helpMe() 

Dim najemcy As Worksheet 
Dim pokoj As Range 
Dim pokNr As Integer 
Dim obecnyLok As Range 

For pokNr = 3 To 1 Step -1 
    Set najemcy = Sheets("Najemcy") 

    Set pokoj = najemcy.Range("A1:A100").Find(What:=pokNr, LookIn:=xlValues, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 
     'MsgBox pokoj.Address 

    If najemcy.Range("G" & pokoj.Row + 1).Value = "" Then 
     Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address) 
    Else 
     Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address).End(xlDown) 
    End If 
    MsgBox obecnyLok.Address 

Next 
End Sub