2013-02-19 9 views
12

To jest jedno pytanie, z którym jestem bardzo zdezorientowany. Coz Szukałem tego tyle razy, ale zawsze znajduję kody związane ze znalezieniem ostatnio używanej lub pierwszej niepustej komórki. Próbowano pod poniższymi kodami. Kody diff zostały rozdzielone przez słowo "jeszcze"Wybierz pierwszą pustą komórkę w kolumnie F, począwszy od wiersza 1. (bez użycia przesunięcia)

iRow = Worksheets("Sheet1").Cells(Rows.Count,1).End(XlUp).Row 

nawet

Sub LastCellBeforeBlankInColumn() 

Range("A1").End(xldown).Select 

End Sub 

nawet

znaleźć bardzo ostatnio używany komórkę w kolumnie:

Sub LastCellInColumn() 

Range("A65536").End(xlup).Select 

End Sub 

nawet

Znajdź ostatnia komórka, przed pustym rzędu:

Sub LastCellBeforeBlankInRow() 

Range("A1").End(xlToRight).Select 

End Sub 

nawet

znaleźć bardzo ostatnio używany komórkę rzędu:

Sub LastCellInRow() 

Range("IV1").End(xlToLeft).Select 

End Sub 

nawet

Worksheets("Sheet1").Range("A1").End(xlDown).Row + 1 

nawet

LastRow = Range("A" & Rows.Count).End(xlUp).Row + 1 
Sheets("SheetName").Range("A" & LastRow).Paste 

nawet

Dim FirstBlankCell as Range 
Set FirstBlankCell=Range("A" & rows.Count).end(xlup).offset(1,0) 
FirstBlankCell.Activate 

'Find the last used row in a Column: column A in this example 
Dim LastRow As Long 
Dim NextRow As Long 
With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row 
End With 
NextRow = LastRow + 1 
+0

Widzieliście to? http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba –

+0

Czy to nie to samo. Chcę wybrać lub aktywować pierwszą pustą komórkę. przykład: Jeśli istnieją wartości do komórki F5, to chcę aktywować komórkę F6 i nie używać Offset podczas tego – Nishant

+0

Jeśli znasz ostatni wiersz, po prostu użyj 'Range (" F "i LastRow) .Aktywuj" Chociaż nie jestem za dużo na rzecz '.Activate' –

Odpowiedz

9

Jeśli wszystko próbują zrobić to wybrać pierwszą pustą komórkę w danej kolumnie, można dać to spróbować:

Kod:

Public Sub SelectFirstBlankCell() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 6 'column F has a value of 6 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    'for every row, find the first blank cell and select it 
    For currentRow = 1 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
     End If 
    Next 
End Sub 

Przed wyborem - pierwsza pusta komórka do wyboru:

enter image description here

Po wybór:

enter image description here

+1

Hej Dzięki Sam To właśnie próbowałem zrobić. Chociaż popatrzyłem na sugestię Siddharth'a i to też zadziałało i już to wykorzystałem. Ale twoje ans'y przydałyby mi się w przyszłości. dziękuje dużo – Nishant

+1

Czy istnieje sposób, aby to zrobić jako formułę, a nie w VBA? – Raj

7

Kodeks Sam jest dobry, ale myślę, że trzeba trochę korekty,

Public Sub SelectFirstBlankCell() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 6 'column F has a value of 6 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    'for every row, find the first blank cell and select it 
    For currentRow = 1 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
      Exit For 'This is missing... 
     End If 
    Next 
End Sub 

Dzięki

+2

i możesz chcieć użyć wartości Long zamiast Integer, ponieważ wiersze mogą być bardzo odległe (lub większe?) –

10

W przypadku jakiegokolwiek jedno potknięcie s po tym jak mam tylko ...

Znajdź pierwszą pustą komórkę w kolumnie (używam kolumna D, ale nie chcą zawierać D1)

NextFree = Range("D2:D" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row 
Range("D" & NextFree).Select 

NextFree jest tylko nazwa, jeśli chcesz, możesz użyć kiełbasek.

+0

pierwsze dwa rozwiązania nie działały, ten był – Kyoujin

0
Public Sub SelectFirstBlankCell() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 6 'column F has a value of 6 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    'for every row, find the first blank cell and select it 
    For currentRow = 1 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
     End If 
    Next 
End Sub 

Jeśli jakakolwiek kolumna zawiera więcej niż jedna pusta komórka ciągle następnie ten kod nie będzie działać poprawnie

4

Jeśli wszystko próbują zrobić to wybrać pierwszą pustą komórkę w danej kolumnie, można dać to spróbować:

Range("A1").End(xlDown).Offset(1, 0).Select 
+0

Zdecydowanie najprostszą odpowiedzią. – Aldentec

1

i dostosowany nieco kod każdego, zrobiliśmy to w funkcji, wykonane szybciej (array) i dodano parametry:

Public Function FirstBlankCell(Optional Sh As Worksheet, Optional SourceCol As Long = 1, Optional ByVal StartRow& = 1, Optional ByVal SelectCell As Boolean = False) As Long 
Dim RowCount As Long, CurrentRow As Long 
Dim CurrentRowValue As String 
Dim Data() 
If Sh Is Nothing Then Set Sh = ActiveSheet 

With Sh 

    rowCount = .Cells(.Rows.Count, SourceCol).End(xlUp).Row 
    Data = .Range(.Cells(1, SourceCol), .Cells(rowCount, SourceCol)).Value2 

    For currentRow = StartRow To RowCount 
     If Data(currentRow, SourceCol) = vbNullString Then 
      If SelectCell Then .Cells(currentRow, SourceCol).Select 
      'if selection is out of screen, intead of .select , use : application.goto reference:=.cells(...), scroll:= true 
      FirstBlankCell = currentRow 
      Exit For 
     End If 
    Next 

End With ' Sh 

Erase Data 
Set Sh = Nothing 
End Function 
3

Jeśli szukasz jednej liniowej (bez nazw i komentarzy) Spróbuj

Dim iRow As Long 
Dim ws As Worksheet 
Set ws = Worksheets("Name") 

    'find first empty cell in column F (coming up from the bottom) and return row number 
iRow = ws.Range("F:F").Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 
Powiązane problemy