2017-07-06 55 views
0

紳士,對於下一個環路問題

我爲一個小問題而鬥爭,並因爲他們而變得易怒。我真的很感謝你的建議。

我在工作簿中有一個名爲「najemcy」的工作表。在此工作表中:A2 = 3,A7 = 2,A12 = 1。以下單元格合併:A2:A6,A7:A11,A12:A16。在列G中的值如下:G2 = 550,G3 = 55,G7 = 650,G8 = 11 G12 = 550

宏應找到列G中的最後一個值:範圍A2:A6,A7:A11,A12:A16。這意味着我希望得到3次msgbox與地址:$ G $ 4,$ G $ 8,$ G $ 12,而不是$ G $ 12我得到$ G $ 1048576

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ść;)有你在'設置obecnyLok'奇怪的事情。 'pokoj'是'najemcy'表中的一個單元格。從這個單元格中,你右移6個單元格,從該單元格中取出地址,並用'najemcy.Range'去到這個地址。所以你只是回到同一個單元格。你可以用它來代替:'Set obecnyLok = pokoj.Offset(0,6).End(xlDown)'。 –

+0

好點!謝謝。 – neke

回答

0

當您使用.END(xlDown),它會往下走,直到遇到一個空行,但如果當前的下面第一行是空白的它只會繼續下去。解決此

一種方法是檢查是否下一行是使用.END(xlDown)之前的空白

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