Vba excel как найти пустые строки

Михаил, гляньте, как это делается в макросе удаления пустых строк:  
Sub DeleteEmptyRows()  
  ‘—————————————————————————————  
  ‘ Procedure    : DeleteEmptyRows  
  ‘ Author       : The_Prist???  
  ‘ Topic_HEADER : Удаление всех пустых строк в таблице  
  ‘ Topic_URL    :

http://www.planetaexcel.ru/tip.php?aid=31  

  ‘ Post_Author  :  
  ‘ Post_URL     :  
  ‘ DateTime     : 10.09.2006  
  ‘ Purpose      : Удаление всех пустых строк в таблице  
  ‘ Notes        :  
  ‘—————————————————————————————  
  If MsgBox(«Удалить все пустые строки на листе?», vbOKCancel Or vbQuestion Or vbDefaultButton1, «Удалить пустые строки?») = vbCancel Then Exit Sub  
  Dim lLastRow As Long, i As Long  
  lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count  
  Application.ScreenUpdating = False  
  For i = lLastRow To 1 Step -1  
     If Application.CountA(Rows(i)) = 0 Then Rows(i).Delete  
  Next  
  Application.ScreenUpdating = True  
End Sub

На чтение 4 мин. Просмотров 11k.

Что делает макрос: Вы часто можете столкнуться с необходимостью добавить строки или столбцы к существующему набору данных. Этот макрос позволяет автоматически найти и выбрать первую пустую строку или столбец. Он предназначен для использования в сочетании с другими макрокомандами.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Код макроса
  5. Как этот код работает
  6. Как использовать

Как макрос работает

Эти макросы используют элемент Cells и свойство Offset в качестве ключевых инструментов навигации.
Элемент Cells принадлежит объекту Range. Это дает нам чрезвычайно удобный способ выбора диапазонов с помощью кода. Для этого требуется только относительные строки и столбцы в качестве параметров. Cells(5,4) приводит к строке 5, столбцу 4 (или ячейке D5). Cells(16, 4) приводит к строке 16, столбцу 4 (или ячейке D16).
Помимо передачи жестких чисел в элемент Cells, вы также можете передавать выражения.
Cells(Rows.Count, 1) то же самое, что выбрать последнюю строку и первый столбец в таблице. В Excel 2010 переводит к ячейке A1048576.
Cells(1,Columns.Count) выбирает первую строку и последний столбец в таблице. В Excel 2010 приводит к ячейке XFD1.
Объединение оператора Cells со свойством End позволяет перейти к последней использованной строке или столбцу. Это утверждение эквивалентно переходит к ячейке A1048576 и нажав Ctrl + Shift + стрелка вверх на клавиатуре. Excel автоматически переходит к последней использованной строки в столбце A.

Cells(Rows.Count, 1).End(xlUp).Select

Переходит к ячейке XFD1 и нажав Ctrl + Shift + стрелка влево на клавиатуре. Это переводит вас к последней использованной колонке в строке 1.

Cells(1, Columns.Count).End(xlToLeft).Select

Когда вы дойдете до последней строки или столбца, вы сможете использовать свойство Offset для перемещения вниз или к следующей пустой строке или столбцу.
Свойство Offset использует индекс строки и столбца, чтобы указать изменяющуюся базовую точку.Например, оператор выбирает ячейку А2, так как индекс строки в Offset перемещения строки базовой точки на единицу:

Range("A1").Offset(1, 0).Select

Этот оператор выбирает ячейку С4, и перемещает базовую точку на три строки и два столбца:

Range("A1").Offset(3, 2).Select

Используя все эти понятия вместе, мы можем создать макрос, который выбирает первую пустую строку или столбец.

Код макроса

Sub PervayaPustayaStroka()
'Шаг 1: Объявляем переменные
Dim LastRow As Long
'Шаг 2: Захват последнего использованного номера строки
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Шаг 3: Выбираем следующую строку вниз
Cells(LastRow, 1).Offset(1, 0).Select
End Sub

Как этот код работает

  1. Шаг 1 первый объявляет переменную Long Integer под названием LastRow — держатель номера строки последней использованной строки.
  2. На шаге 2 мы фиксируем последнюю использованную строку, начиная с самой последней строки в листе и используя свойство End, чтобы перейти к первой непустой ячейке (переход к ячейке A1048576 нажатием Ctrl + Shift + стрелка вверх на клавиатуре).
  3. На этом этапе мы используем свойство Offset для перемещения на одну строку вниз и выбираем первую пустую ячейку в столбце A.

Код макроса

Sub PerviiPustoiStolbec()
'Шаг 1: Объявляем переменные
Dim LastColumn As Long
'Шаг 2: захват последнего использованного номера столбца
LastColumn = Cells(5, Columns.Count).End(xlToLeft).Column
'шаг 3: выбираем следующий пустой столбец
Cells(5, LastColumn).Offset(0, 1).Select
End Sub

Как этот код работает

  1. Сначала мы объявляем переменную Long Integer под названием LastColumn —  держатель номера столбца последнего используемого столбца.
  2. На шаге 2 мы фиксируем последний используемый столбец, начиная с самого последнего столбца в листе и используя свойство End, чтобы перейти к первой непустой колонке
    (эквивалент перейти к ячейке XFD5, нажав Ctrl + Shift + стрелка влево на клавиатуре).
  3. На этом этапе мы используем свойство Offset для перемещения на одну колонку и выбираем первый пустой столбец в строке 5.

Как использовать

Вы можете реализовать эти макросы, вставив их в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

I need to find the first blank row in a workbook and write information to (row, 1) and (row, 2). I think I’m currently pretty stuck…

Function WriteToMaster(num, path) As Boolean

'Declare variables
Dim xlApp As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
Dim infoLoc As Integer

Set xlApp = New Excel.Application

Set wb = xlApp.Workbooks.Open("PATH OF THE DOC")
Set ws = wb.Worksheets("Sheet1")

'Loop through cells, looking for an empty one, and set that to the Num
Cells(1, 1).Select
For Each Cell In ws.UsedRange.Cells
    If Cell.Value = "" Then Cell = Num
    MsgBox "Checking cell " & Cell & " for value."
Next


'Save, close, and quit
wb.Save
wb.Close
xlApp.Quit

'Resets the variables
Set ws = Nothing
Set wb = Nothing
Set xlApp = Nothing

Thanks so much for any help.

asked Sep 19, 2012 at 15:22

okapishomapi's user avatar

2

If you mean the row number after the last row that is used, you can find it with this:

Dim unusedRow As Long
unusedRow = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row

If you mean a row that happens to be blank with data after it… it gets more complicated.

Here’s a function I wrote which will give you the actual row number of the first row that is blank for the provided worksheet.

Function firstBlankRow(ws As Worksheet) As Long
'returns the row # of the row after the last used row
'Or the first row with no data in it
    Dim rw As Range
    For Each rw In ws.UsedRange.Rows
        If rw.Address = ws.Range(rw.Address).SpecialCells(xlCellTypeBlanks). _
            Address Then

                firstBlankRow = rw.Row
                Exit For
        End If
    Next
    If firstBlankRow = 0 Then
        firstBlankRow = ws.Cells.SpecialCells(xlCellTypeLastCell). _
                    Offset(1, 0).Row
    End If
End Function

Usage example: firstblankRow(thisworkbook.Sheets(1)) or pass any worksheet.

Edit: As ooo pointed out, this will error if there are no blank cells in your used range.

answered Sep 19, 2012 at 15:35

Daniel's user avatar

DanielDaniel

13k2 gold badges36 silver badges60 bronze badges

11

I would have done it like this. Short and sweet :)

Sub test()
Dim rngToSearch As Range
Dim FirstBlankCell As Range
Dim firstEmptyRow As Long

Set rngToSearch = Sheet1.Range("A:A")
    'Check first cell isn't empty
    If IsEmpty(rngToSearch.Cells(1, 1)) Then
        firstEmptyRow = rngToSearch.Cells(1, 1).Row
    Else
        Set FirstBlankCell = rngToSearch.FindNext(After:=rngToSearch.Cells(1, 1))
        If Not FirstBlankCell Is Nothing Then
            firstEmptyRow = FirstBlankCell.Row
        Else
            'no empty cell in range searched
        End If
    End If
End Sub

Updated to check if first row is empty.

Edit: Update to include check if entire row is empty

Option Explicit

Sub test()
Dim rngToSearch As Range
Dim firstblankrownumber As Long

    Set rngToSearch = Sheet1.Range("A1:C200")
    firstblankrownumber = FirstBlankRow(rngToSearch)
    Debug.Print firstblankrownumber

End Sub

Function FirstBlankRow(ByVal rngToSearch As Range, Optional activeCell As Range) As Long
Dim FirstBlankCell As Range

    If activeCell Is Nothing Then Set activeCell = rngToSearch.Cells(1, 1)
    'Check first cell isn't empty
    If WorksheetFunction.CountA(rngToSearch.Cells(1, 1).EntireRow) = 0 Then
        FirstBlankRow = rngToSearch.Cells(1, 1).Row
    Else

        Set FirstBlankCell = rngToSearch.FindNext(After:=activeCell)
        If Not FirstBlankCell Is Nothing Then

            If WorksheetFunction.CountA(FirstBlankCell.EntireRow) = 0 Then
                FirstBlankRow = FirstBlankCell.Row
            Else
                Set activeCell = FirstBlankCell
                FirstBlankRow = FirstBlankRow(rngToSearch, activeCell)

            End If
        Else
            'no empty cell in range searched
        End If
    End If
End Function

answered Sep 19, 2012 at 16:52

1

Update

Inspired by Daniel’s code above and the fact that this is WAY! more interesting to me now then the actual work I have to do, i created a hopefully full-proof function to find the first blank row in a sheet. Improvements welcome! Otherwise, this is going to my library :)
Hopefully others benefit as well.

    Function firstBlankRow(ws As Worksheet) As Long
'returns the row # of the row after the last used row
'Or the first row with no data in it

    Dim rngSearch As Range, cel As Range

    With ws

        Set rngSearch = .UsedRange.Columns(1).Find("") '-> does blank exist in the first column of usedRange

        If Not rngSearch Is Nothing Then

            Set rngSearch = .UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks)

            For Each cel In rngSearch

                If Application.WorksheetFunction.CountA(cel.EntireRow) = 0 Then

                    firstBlankRow = cel.Row
                    Exit For

                End If

            Next

        Else '-> no blanks in first column of used range

            If Application.WorksheetFunction.CountA(Cells(.Rows.Count, 1).EntireRow) = 0 Then '-> is the last row of the sheet blank?

                '-> yeap!, then no blank rows!
                MsgBox "Whoa! All rows in sheet are used. No blank rows exist!"


            Else

                '-> okay, blank row exists
                firstBlankRow = .UsedRange.SpecialCells(xlCellTypeBlanks).Row + 1

            End If

        End If

    End With

End Function

Original Answer

To find the first blank in a sheet, replace this part of your code:

Cells(1, 1).Select
For Each Cell In ws.UsedRange.Cells
    If Cell.Value = "" Then Cell = Num
    MsgBox "Checking cell " & Cell & " for value."
Next

With this code:

With ws

    Dim rngBlanks As Range, cel As Range

    Set rngBlanks = Intersect(.UsedRange, .Columns(1)).Find("")

    If Not rngBlanks Is Nothing Then '-> make sure blank cell exists in first column of usedrange
        '-> find all blank rows in column A within the used range
        Set rngBlanks = Intersect(.UsedRange, .Columns(1)).SpecialCells(xlCellTypeBlanks)

        For Each cel In rngBlanks '-> loop through blanks in column A

            '-> do a countA on the entire row, if it's 0, there is nothing in the row
            If Application.WorksheetFunction.CountA(cel.EntireRow) = 0 Then
                num = cel.Row
                Exit For
            End If

        Next
    Else

        num = usedRange.SpecialCells(xlCellTypeLastCell).Offset(1).Row                 

    End If


End With

answered Sep 19, 2012 at 15:37

Scott Holtzman's user avatar

Scott HoltzmanScott Holtzman

27k5 gold badges36 silver badges72 bronze badges

11

I know this is an older thread however I needed to write a function that returned the first blank row WITHIN a range. All of the code I found online actually searches the entire row (even the cells outside of the range) for a blank row. Data in ranges outside the search range was triggering a used row. This seemed to me to be a simple solution:

Function FirstBlankRow(ByVal rngToSearch As Range) As Long
   Dim R As Range
   Dim C As Range
   Dim RowIsBlank As Boolean

   For Each R In rngToSearch.Rows
      RowIsBlank = True
      For Each C In R.Cells
         If IsEmpty(C.Value) = False Then RowIsBlank = False
      Next C
      If RowIsBlank Then
         FirstBlankRow = R.Row
         Exit For
      End If
   Next R
End Function

answered Mar 7, 2014 at 17:31

user3393711's user avatar

ActiveSheet.Range("A10000").End(xlup).offset(1,0).Select

SheetJS's user avatar

SheetJS

22.3k12 gold badges64 silver badges75 bronze badges

answered Oct 18, 2013 at 19:24

Josh Z's user avatar

very old thread but .. i was lookin for an «easier»… a smaller code

i honestly dont understand any of the answers above :D
— i´m a noob

but this should do the job. (for smaller sheets)

Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add

reads every cell in col 1 from bottom up and stops at first empty cell

intRow = 1
Do until objExcel.Cells(intRow, 1).Value = ""
   intRow = intRow + 1
Loop

then you can write your info like this

objExcel.Cells(intRow, 1).Value = "first emtpy row, col 1"
objExcel.Cells(intRow, 2).Value = "first emtpy row, col 2"

etc…

and then i recognize its an vba thread … lol

answered Jul 3, 2014 at 15:43

ultr4low's user avatar

1

Very old thread but a simpler take :)

Sub firstBlank(c) 'as letter
    MsgBox (c & Split(Range(c & ":" & c).Find("", LookIn:=xlValues).address, "$")(2))
End Sub
Sub firstBlank(c) 'as number
    cLet = Split(Cells(1, c).address, "$")(1)
    MsgBox (cLet & Split(Range(cLet & ":" & cLet).Find("", LookIn:=xlValues).address, "$")(2))
End Sub

answered Feb 3, 2017 at 2:22

quantum285's user avatar

quantum285quantum285

1,0322 gold badges11 silver badges22 bronze badges

Function firstBlankRow() As Long
Dim emptyCells As Boolean

    For Each rowinC In Sheet7.Range("A" & currentEmptyRow & ":A5000")   ' (row,col)

        If rowinC.Value = "" Then
            currentEmptyRow = rowinC.row
            'firstBlankRow = rowinC.row 'define class variable to simplify computing complexity for other functions i.e. no need to call function again
            Exit Function   
        End If
    Next

End Function

answered Feb 1, 2018 at 22:15

user8453101's user avatar

Найти в VBA пустые строки

aghient

Дата: Четверг, 30.03.2017, 21:33 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Здравствуйте, подскажите, пожалуйста, как можно найти пустые строки в VBA? На картинке они выделены синим.

К сообщению приложен файл:

5938212.jpg
(58.8 Kb)

 

Ответить

Gustav

Дата: Четверг, 30.03.2017, 23:00 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

985

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Насколько понимаю, у Вас в начале синих строк по 4 или 5 пробелов — скорее, всего результат нажатия клавиши Tab в редакторе. Можно так 4 пробела в поиск и забить.

А конечная цель какая такого мероприятия? А то ведь можно скопировать текст модуля VBA и вставить на рабочий лист Excel, там что-нибудь поделать и обратным копированием вернуть измененный текст программы назад в модуль.


МОИ: Ник, Tip box: 41001663842605

 

Ответить

aghient

Дата: Пятница, 31.03.2017, 03:17 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Gustav, я имею ввиду не пробелы, а сами пустые строки, расстояние между двумя вставками формул, то что делается не пробелами, а Enter.

Сообщение отредактировал aghientПятница, 31.03.2017, 04:26

 

Ответить

K-SerJC

Дата: Пятница, 31.03.2017, 07:22 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

Замечаний:
0% ±


Excel 2013


тогда как Gustav, предложил копируйте текст кода или в переменную, или в любой редактор, в буфер обмена
затем или кодом или вручную обрабатывайте и копируйте обратно.
в тексте можно искать символ chr$(13)


Благими намерениями выстелена дорога в АД.

 

Ответить

aghient

Дата: Четверг, 06.04.2017, 04:46 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо, очень помогли.

 

Ответить

I have a column A in my sheet like this :

line 1: hello
line 2: hello
line 3:
line 4: hello
line 5: 
line 6: hello
line 7: 
line 8: hello
line 9: hello

I would like to have a function which return for a specific row, the row of the first empty cell starting from the specific row.

For example :

If I specify row 1, I would like to get row 3
If I specify row 6, I would like to get row 7

Thanks in advance for your help

Community's user avatar

asked Feb 19, 2015 at 12:40

user2443476's user avatar

2

How about this? (assumes your data is in column A)

Function GetNextEmptyCell(sht as worksheet, rw As Long) As Long
    With sht //Change sheet to suit your needs
        GetNextEmptyCell = IIf(IsEmpty(.Range("A" & rw).Offset(1, 0)), rw + 1, .Range("A" & rw).End(xlDown).Row + 1)
    End With
End Function

Sub Test()
    Debug.Print GetNextEmptyCell(1) // prints 3
    Debug.Print GetNextEmptyCell(4) // prints 5
End Sub

answered Feb 19, 2015 at 16:22

Alex P's user avatar

Alex PAlex P

12.2k5 gold badges51 silver badges69 bronze badges

0

Студворк — интернет-сервис помощи студентам

Помогите! У меня имеется таблица с 3 стобцами. В первом фамилии, во втром и третьем числа. Необходимо найти строки где обе ячейки во втором и третьем стобце будут пустые и удалить это все вместе с соответсявующей ячейкой первого столбца. Не могу правильно организовать цикл.
For i = 2 To 106
If ActiveSheet.Range(«B» & i).Value = «» And ActiveSheet.Range(«C» & i).Value = «» Then
ActiveSheet.Range(«A» & i).EntireRow.Delete
End If
Next i

Пожалуйста помогите, потому что понимаю, что несложно, но мозг кипит

Добавлено через 18 минут
For i = 2 To 106
If (ActiveSheet.Range(«B» & i).Value = «») And (ActiveSheet.Range(«C» & i).Value = «») Then
ActiveSheet.Range(«B» & i).EntireRow.Delete
End If
Next i

это работает, но почему если несколько раз нажимать кнопку, то тогда остаются строки те, которые нужны. а так он по одной удаляет

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Поиск первой пустой строки и растягивание в Excel’е. Как?

Мучения мои продолжаются. Не то чтобы не хватает знаний, но их просто нет, а сделать очень надо :-)

Необходима такая замудреная вещь:

Поиск в таблице первой строки, в которой содержится пустая ячейка в столбце 3, затем растягивание (копирование и вставка следующего значения – в моем случае это названия месяцев и формулы) предыдущей строки в эту пустую строку.

Посмотрите, так ли я вообще мыслю:

Указание пустых?:

For rwIndex = 190 To 230

For colIndex = 3 To 3

If rw.Cells(1, 1).Value = 0 Then Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!???

Это растягивание, но конкретных ячеек, а не найденных:

Range(«D208»).Select

Selection.AutoFill Destination:=Range(«D208:D209»), Type:=xlFillDefault

Спасибо за ответы


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 13:24

строка = Application.CountA(Sheets(«ТвойЛист»).Columns(3))

так ищут первую пустую строку

диапазон=»C» & строка & «:C» & строка+1

Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 22.09.2003 (Пн) 13:50

Штурман писал(а):строка = Application.CountA(Sheets(«ТвойЛист»).Columns(3))
так ищут первую пустую строку
диапазон=»C» & строка & «:C» & строка+1
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Уважаемый Штурман!

Я ж написал выше: Не то чтобы не хватает знаний, но их просто нет.

Поэтому подскажите, пжлста, это все в виде готового кода.

Мне надо не просто найти первую пустую строку на листе, а первую пустую в таблице (перед этой таблицей много пустого места).

Эту строку как перевести на русский?:

диапазон=»C» & строка & «:C» & строка+1

Слова «Строка», «диапазон» по-русски писАть или как-нибудь определять необходимо?


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 13:59

а перед таблицей всегда одно и тоже количество пустых строк,или меняется?

строка и диапазон,это переменные, можно обзывать хоть по русски,хоть по английски,главно чтоб не совпадали со словами,которые использует VBA(Cells,Range, и тд)


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 22.09.2003 (Пн) 14:14

Перед таблицей постоянное число строк.

Вот тут мне в другом форуме подсказали:

Dim i As Long

i = 190

While IsEmpty(Cells(i, 1))

i = i + 1

Wend

Rows(CStr(i + 1) + «:» + CStr(i)).Select

Selection.FillDown

Cells(i, 2).Value = «C149»

Только этот код немного не то делает. Он 190 ячейку копирует в 191 (а там данные), а нужно найти первое пустое значение (у меня это строка 209), и скопировать 208 строку в 209-ю.


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 14:27

ну я думаю,тада счетчик нужен

For i=a To b’вместо а подставить номер первой не пустой строки,вместо b номер строки,которую точно не перепрыгнешь,3000 например

строка=Cells(i,3)

If строка=»» Then GoTo ПРИПЛЫЛИ

Next

диапазон=»C» & i & «:C» & i+1

Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 14:29

For i=a To b’вместо а подставить номер первой не пустой строки,вместо b номер строки,которую точно не перепрыгнешь,3000 например

строка=Cells(i,3)

If строка=»» Then GoTo ПРИПЛЫЛИ

Next

ПРИПЛЫЛИ:

диапазон=»C» & i & «:C» & i+1

Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Ссори,забыл вставить


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 22.09.2003 (Пн) 14:38

Dim строка

Dim i As Long

строка = Cells(i, 3)

If строка = «» Then GoTo

Next

Cells(строка, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Ругается. Говорит, синтаксическая ошибка в If строка = «» Then GoTo


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 14:43

я забыл вначале вставить куда именно GoTo,смотри второй вариант


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 22.09.2003 (Пн) 15:04

Вот код:

Dim строка

Dim i As Long

Dim диапазон

Dim ПРИПЛЫЛИ

For i = 190 To 230

строка = Cells(i, 3)

If строка = «» Then GoTo ПРИПЛЫЛИ

Next

ПРИПЛЫЛИ:

диапазон = «C» & i & «:C» & i + 1

Cells(строка, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Выделяет желтым строку:

Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Чего не нравится ему, не пойму.


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 22.09.2003 (Пн) 15:14

опять прошу прощения,двадцатью делами сразу занимаюсь

Cells(i,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 22.09.2003 (Пн) 16:06

Так. всем миром сделали вот что:

Dim i As Long

i = 190

While Not IsEmpty(Cells(i, 3))

i = i + 1

Wend

Rows(CStr(i — 1) + «:» + CStr(i)).Select

Selection.FillDown

Range(«C149»).Select

Selection.Copy

Cells(i, 3).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone

Штурман, как Вашу строку

Cells(i, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

прикрутить вместо

Selection.FillDown

, а то этот код не растягивает, а копирует предыдущую один в один.


Евген
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 66
Зарегистрирован: 01.07.2003 (Вт) 14:13
Откуда: СПб
  • ICQ

Сообщение Евген » 23.09.2003 (Вт) 7:25

Код: Выделить всё
While Not IsEmpty(Cells(i, 3))
i = i + 1
Wend

— так ты найдешь только первую и единственную пустую ячейку!

Код: Выделить всё
Range("D190:D191").AutoFill Destination:=Range("D192:D230"), Type:=xlFillDefault

— можно и так…

Ёж птица гордая, пока не пнешь — не полетит!


Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Штурман » 23.09.2003 (Вт) 8:31

тада,чтоб растягивалось,а не копировалось вместо

Type:=xlFillDefault,поставь Type:=xlFillSeries


Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва
  • Сайт

Сообщение Disintegrator » 23.09.2003 (Вт) 9:16

Маленькая радость. Все получилось. Что значит с утра работать.

Вот код, который отлично работает (Штурману большой фенкс):

Dim строка

Dim i As Long

Dim j As Long

Dim диапазон

Dim диапазон2

Dim ПРИПЛЫЛИ

For i = 190 To 230

For j = 1 To 4

строка = Cells(i, 3)

If строка = «» Then GoTo ПРИПЛЫЛИ

Next

Next

ПРИПЛЫЛИ:

диапазон = «A» & i — 1 & «:D» & i

диапазон2 = «A» & i — 1 & «:D» & i — 1

Range(диапазон2).Select

Selection.AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Range(диапазон).Select

Range(«C149»).Select

Selection.Copy

Cells(i, 3).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone

End Sub


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.09.2003 (Вт) 10:25

Код: Выделить всё
Sub DoIt(where As Excel.Range)
  On Error GoTo oops
  With where.Rows(where.Columns(3).Find(vbNullString, , xlValues, xlWhole).Row - where.Row)
    .AutoFill Union(.Offset(0), .Offset(1)), xlFillSeries
  End With
oops:
End Sub

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Определение с помощью кода VBA Excel, что диапазон ячеек пуст, то есть, ни одна из ячеек диапазона (строки, столбца) не содержит отображаемого значения.

Определение пустого диапазона

Определить в VBA Excel, что диапазон ячеек пуст, можно с помощью функции рабочего листа WorksheetFunction.CountA или свойства диапазона ячеек Range.Text.

Пример 1

Определение, что диапазон ячеек пуст, с помощью функции рабочего листа WorksheetFunction.CountA:

Sub Primer1()

    If WorksheetFunction.CountA(Range(«A1:L8»)) = 0 Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

Функция WorksheetFunction.CountA подсчитывает количество ячеек, содержащих значения, в том числе нули и формулы, возвращающие пустые строки. Если хотя бы одна ячейка в диапазоне будет содержать пустую строку, возвращенную формулой, то код первого примера определит, что диапазон не пуст.

Пример 2

Определение, что диапазон ячеек пуст, с помощью свойства Text объекта Range:

Sub Primer2()

    If Range(«A1:L8»).Text = «» Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

Свойство Text объекта Range возвратит пустую строку только в том случае, если все ячейки диапазона будут содержать пустые строки и (или) значение Empty. Если одна или более ячеек в диапазоне будут содержать пустую строку, возвращенную формулой, то код второго примера все-равно определит, что диапазон пуст.

Определение пустой строки

Определение пустой строки в VBA Excel с помощью свойства Range.Text:

Sub Primer3()

    If Rows(5).Text = «» Then

        MsgBox «Указанная строка пуста»

    Else

        MsgBox «Указанная строка не пуста»

    End If

End Sub

Данное определение пустой строки используется в коде для удаления пустых строк из таблицы.

Определение пустого столбца

Определение пустого столбца в VBA Excel с помощью свойства Range.Text:

Sub Primer4()

    If Columns(7).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub

или

Sub Primer5()

    If Columns(«G»).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub


Фразы для контекстного поиска: диапазон пустой, строка пустая, столбец пустой.


Понравилась статья? Поделить с друзьями:
  • Vba excel как найти пустую строку
  • Vba excel как найти значение в столбце
  • Vba excel как назначить макрос кнопке
  • Vba excel как копировать лист в другую книгу
  • Vba excel как изменить шрифт ячейки