Как найти не пустые ячейки макрос

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Доброго времени суток!
Есть таблица в которой есть пустые ячейки и те в которых есть цифры и текст (массив), нужно найти не пустые ячейки и вставить 1.
Помогите реализовать макросом, чтобы это можно было делать по нажатию кнопки.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Не скажете, для каких данных и где писать макрос?

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Простите! Вот пример, в непустых ячейках нужно, что бы была “1”.

Прикрепленные файлы

  • Пример.xlsx (12.34 КБ)

 

Sanja

Пользователь

Сообщений: 14849
Регистрация: 10.01.2013

В первой строке тоже?

Согласие есть продукт при полном непротивлении сторон.

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Нет, первая строка “шапка”.

 

Юрий М

Модератор

Сообщений: 60726
Регистрация: 14.09.2012

Контакты см. в профиле

Таблицу будете выделять или нужно будет вычислять её диапазон?

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Нет выделять не хотелось бы, это умная таблица, будет.

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Но количество столбцов может добавиться.

 

Sanja

Пользователь

Сообщений: 14849
Регистрация: 10.01.2013

#9

03.06.2017 00:16:07

Цитата
Olegator77 написал:
это умная таблица, будет
Код
Sub Insert1()
    With ActiveSheet.ListObjects("Таблица1")
        arr = .DataBodyRange
        For I = 1 To UBound(arr, 1)
            For J = 1 To UBound(arr, 2)
                If arr(I, J) <> Empty Then arr(I, J) = 1
            Next
        Next
        .DataBodyRange = arr
    End With
End Sub

Согласие есть продукт при полном непротивлении сторон.

 

gling

Пользователь

Сообщений: 4030
Регистрация: 01.01.1970

#10

03.06.2017 00:20:07

Цитата
Olegator77 написал:
Помогите реализовать макросом,

Здравствуйте. Выделите диапазон–нажмите F5–Выделить–Константы–ОК–жмете клавишу с цифрой 1–зажимаете клавишу Ctrl–жмете Enter. Должно проставить единички. Хотите макрос, тогда перед выполнением написанного включите запись макроса макрорекордером и выключите после нажатия Enter. На вкладке вставка –Фигуры–Нажимаете любую — рисуете её на листе–правой кнопкой мыши на неё–Назначить макрос–Макрос1–ОК. Всё и макрос и кнопка на которую жать готовы.
Для умной наверно этот вариант не прокатит, у неё свои заморочки. В примере обычная таблица, для неё можно использовать предложенное, а диапазон брать с запасом, всё равно пустые не выделятся.

Изменено: gling03.06.2017 00:23:44

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

Огромное, огромное спасибо, вариант

Sanja

более чем. Два дня мучался.
Спасибо, и вариант

gling

тоже работает. Спасибо друзья прямо гора с плеч!

Какие чудесные и умные люди.

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

#12

28.06.2017 23:25:17

Друзья и коллеги, помогите решить ту же задачу только не в Таблице1, а в диапазоне ячеек.

Код
Sub Insert1() 
   With ActiveSheet.ListObjects("Таблица1") 
       arr = .DataBodyRange 
       For I = 1 To UBound(arr, 1) 
           For J = 1 To UBound(arr, 2) 
               If arr(I, J) <> Empty Then arr(I, J) = 1 
           Next 
       Next 
       .DataBodyRange = arr 
   End With 
End Sub 
 

Юрий М

Модератор

Сообщений: 60726
Регистрация: 14.09.2012

Контакты см. в профиле

Olegator77, Вы видели, как код выглядит у других? Ищите такую кнопку и исправьте своё сообщение.
P.S. И строки нумеровать не придётся)

 

Sanja

Пользователь

Сообщений: 14849
Регистрация: 10.01.2013

#14

29.06.2017 08:42:07

На все случаи жизни. Два последних варианта универсальны. Могут применяться как для непрерывных так и для несмежных диапазонов

Скрытый текст

Изменено: Sanja29.06.2017 09:36:54

Согласие есть продукт при полном непротивлении сторон.

 

SAS888

Пользователь

Сообщений: 757
Регистрация: 01.01.1970

#15

29.06.2017 10:02:54

Если значения ячеек таблицы не являются результатом функции (формулы), то можно существенно проще:

Код
Sub Test()
    On Error Resume Next
    [A1:E5, G2:H10].SpecialCells(xlCellTypeConstants).Value = 1
End Sub

В квадратных скобках – диапазон(ы) ячеек.
On Error Resume Next – на случай, если указанный диапазон полностью  пуст.

Чем шире угол зрения, тем он тупее.

 

Olegator77

Пользователь

Сообщений: 17
Регистрация: 04.02.2015

#16

29.06.2017 21:14:19

Огромное спасибо, честно говоря, предложенные решения прямо заставляют расширить возможности задачи.
Еще раз спасибо!

Елена_88

1

Поиск непустой ячейки в столбце

11.02.2009, 07:42. Показов 19791. Ответов 6


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

Приветствую !
Понимаю, задачка смешная, но мне, как новичку очень нужна помощь
Нужно написать функцию, которая будет возвращать значение первой непустой ячейки сверху.
т.е., например, стоим на А10, первая заполненная у нас А3, так как вытащить ее значение ?

Добавлено через 20 минут 39 секунд
Можно ли потом найти вторую заполненную ячейку ?

Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

12.02.2009, 01:31

2

Вот из этой простенькой «сабрутины» я и предлагаю сваять нужную Вам функцию. Отзовитесь, ау!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub FindAndCountEmptyCells(): Static k As Long 'если файл не пуст, то +1 при каждом вызове
 
 
If k = 0 Then  'а это так: 1) при первом вызове данной функции; 2) ещё не придумал
 
    Range("a1").Activate                            'проверка ячейки A1
    If Not IsEmpty(ActiveCell) Then k = k + 1       'если в A1 не пусто, то счёт ведётся с неё
    k = k + 1
    Application.FindFormat.NumberFormat = "General" 'аналог нажатия <Ctrl>+<F> (формат "Общий")
    
    'Активация k-й непустой ячейки.
    Cells.Find(What:="*", SearchFormat:=True, SearchOrder:=xlByColumns).Activate
 
Else
 
    Cells.FindNext(After:=ActiveCell).Activate 'при повторных вызовах - поиск следующей непустой
    k = k + 1
    If ActiveCell.Column & ":" & ActiveCell.Row = "1:1" Then k = 1 'это когда прошли всю таблицу
End If
 
 
MsgBox "Это " & k & "-я непустая ячейка (" & ActiveCell.Column & ":" & ActiveCell.Row & ")."
'здесь вместо этого мэссиджа Вы можете присваивать функции значение выделенной (активной) ячейки
 
End Sub

Вот тут действительно функция! Функциональность её та же.
Что делает основная программа (Sub), ясно из её названия.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Function FindAndCountNotEmptyCells()
'функция ищет на листе Excel k-ю (при k-м вызове) непустую ячейку (по столбцам)
  
Static firstfoundRow As Long, firstfoundCol As Long 'координаты первой найденной непустой ячейки
Static k As Long 'если файл не пуст, то при каждом вызове возвращает № очередной непустой ячейки
     
 
If k = 0 Then  'а это так при первом вызове функции и при возврате по GoTo (когда всё обыскано)
        Cells.Find(What:="*", SearchOrder:=xlByColumns).Activate 'Активация 1-й непустой ячейки.
          
        If Not IsEmpty(Cells(1, 1)) Then 'если в A1 не пусто, то при 1-м вызове считаем с неё
            firstfoundRow = 1: firstfoundCol = 1    'Запомнили координаты 1-й ячейки: (1, 1) -
            Cells.FindPrevious(After:=ActiveCell).Activate                  'и вернулись в неё.
        Else
            firstfoundRow = ActiveCell.Row: firstfoundCol = ActiveCell.Column
        End If
Else
    Cells.FindNext(After:=ActiveCell).Activate 'поиск следующей ячейки при повторных вызовах
End If
 
 
If (ActiveCell.Column = firstfoundCol) And (ActiveCell.Row = firstfoundRow) And (k > 1) Then
    k = 0       'сброс k; функция обошла ("просканировала") все ячейки активного листа
    FindAndCountNotEmptyCells = "I HAVE RETIRED)"
    Exit Function                                   'завершение работы функции: она всё обыскала
End If
  
 
FindAndCountNotEmptyCells = ActiveCell 'функция принимает значение очередной непустой ячейки
  
k = k + 1
 
MsgBox k & "-я непустая ячейка листа """ & ActiveSheet.Name & """ содержит: " & ActiveCell _
& vbCr & "(формат этого значения - """ & ActiveCell.NumberFormat & """)"
End Function
  
  
  
Sub I_seek_for_the_2_first_negative_cells_in_ActiveSheet()
  
Dim the1StNegativeCell, the2NdNegativeCell '1-е и 2-е отриц. числа (если есть) или что найдётся
  
Do
    the1StNegativeCell = FindAndCountNotEmptyCells
    If IsNumeric(the1StNegativeCell) And the1StNegativeCell < 0 Then Exit Do
Loop Until the1StNegativeCell = "I HAVE RETIRED)"
'выходим из цикла, как только находим в таблице ПЕРВОЕ отрицательное число, или когда его там нет
  
 
If the1StNegativeCell <> "I HAVE RETIRED)" Then 'то есть 1-е отриц. число всё же найдено
''''''''' продолжаем вызывать функцию поиска ''''''''''''''
    Do
    the2NdNegativeCell = FindAndCountNotEmptyCells
    If IsNumeric(the2NdNegativeCell) And the2NdNegativeCell < 0 Then Exit Do
    Loop Until the2NdNegativeCell = "I HAVE RETIRED)"
    'выходим из цикла, как только находим в таблице ВТОРОЕ отриц. число, или когда его там нет
    
    If the2NdNegativeCell = "I HAVE RETIRED)" Then _
        the2NdNegativeCell = "Второго отрицательного числа у вас в таблице (пока) нет."
Else
    MsgBox "На рабочем листе """ & ActiveSheet.Name & """ вашей таблицы отрицательных чисел нет."
    Exit Sub
End If
  
 
MsgBox "the1StNegativeCell = " & the1StNegativeCell 'сообщение, чему = 1-е отриц. число (в столбце)
MsgBox "the2NdNegativeCell = " & the2NdNegativeCell 'сообщение, чему = 2-е отриц. число (следующее)
End Sub

Это более-менее работоспособный вариант.

Классики Си! Видите, сколько мороки на бэйсике? Где ж ваше веское слово… Ну хотя бы просто в поиске первой ячейки, с содержимым.



0



Супер-модератор

8783 / 2536 / 144

Регистрация: 07.03.2007

Сообщений: 11,873

15.02.2009, 05:11

3

а если перед поиском сделать фильтр. так ты найдешь адрес первой непустой ячейки. потом фильтр можно снять



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

15.02.2009, 15:49

4

Я и без фильтра нашёл: по контрол-F в Excel.

И вообще, это Елена ищет. А форум что-то молчит, хоть и просмотров под полторы сотни.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

18.02.2009, 20:23

5

Я и без фильтра нашёл: по контрол-F в Excel.

А форум всё молчит, хоть и просмотров за две сотни.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

05.03.2009, 16:26

6

Вот черновой вариант. Повторяю, поскольку на прежних сломалась кнопка запуска.



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

05.03.2009, 16:51

7

Или, скорее, так: назначенная макросу кнопка, при архивировании, теряет связь с макросом.

Поэтому-то и прошу — поискать непустые ячейки на Си, ассемблере и пр.

Не будешь же (в жизни) каждый раз объяснять пользователю, мол, жми альт-F8, щёлкай по имени, жми кнопку Выполнить, — нудно!



0



I have two columns of data, A and B. I want to find blank cells in column B and then copy data from corresponding cell in column A if A is not also blank.

Community's user avatar

asked Jun 18, 2013 at 14:00

user2497437's user avatar

2

I’d use SpecialCells:

Sub fillblanks()
Dim rngBlanks As Range
Dim rng As Range
Dim cl As Range

Set rng = ActiveSheet.UsedRange.Columns(2)
Set rngBlanks = rng.SpecialCells(xlCellTypeBlanks)
For Each cl In rngBlanks.Cells
    With cl
        If (.Value = "") And (.Offset(0, -1).Value <> "") Then
            .Value = .Offset(0, -1).Value
        End If
    End With
Next

End Sub

answered Jun 18, 2013 at 14:26

David Zemens's user avatar

David ZemensDavid Zemens

52.9k11 gold badges80 silver badges129 bronze badges

5

Sub Sample2()

On Error Resume Next

With Columns("B").SpecialCells(xlCellTypeBlanks)
    .FormulaR1C1 = "=RC[-1]"
    .Value = .Value
End With

End Sub

This doesn’t do EXACTLY as you ask as if does not skip a blank cell if the cell in A is blank, This is because I fail to see why replacing and blank with another blank would be an issue. if it is there is a very easy fix by simply modifying .FormulaR1C1 = "=RC[-1]" to take into account the blanks.

answered Jun 18, 2013 at 14:30

user2140261's user avatar

user2140261user2140261

7,8357 gold badges32 silver badges45 bronze badges

No need for VBA. Select ColumnB, HOME > Editing, Find & Select, Go To Special…, Select Blanks (only),

=  

, Ctrl+Enter.

answered Sep 12, 2015 at 2:05

pnuts's user avatar

pnutspnuts

58.1k11 gold badges86 silver badges138 bronze badges

I need to create a macro in Excel which could check if cell contents are not blank then I needed a border.

I have tried this macro:

Sub testborder()

    Dim rRng As Range

    Set rRng = Sheet1.Range("B2:D5")

    'Clear existing
    rRng.Borders.LineStyle = xlNone

    'Apply new borders
    rRng.BorderAround xlContinuous
    rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
    rRng.Borders(xlInsideVertical).LineStyle = xlContinuous

End Sub

pnuts's user avatar

pnuts

58.1k11 gold badges86 silver badges138 bronze badges

asked Aug 18, 2013 at 6:55

user2693393's user avatar

Try the following:

Sub testborder()

    Dim rRng As Range, row As Range, c As Range
    Set rRng = Sheet1.Range("B2:D5")
    'Clear existing
    rRng.Borders.LineStyle = xlNone

    For Each row In rRng.Rows
      For Each c In row.Columns
        'Apply new borders
        If (c.Value > "") Then c.BorderAround xlContinuous
      Next c
    Next row

End Sub

Or, with an even simpler loop:

    For Each c In rRng.Cells
      'Apply new borders
      If (c.Value > "") Then c.BorderAround xlContinuous
    Next c

answered Aug 18, 2013 at 7:12

Carsten Massmann's user avatar

Carsten MassmannCarsten Massmann

26.1k2 gold badges21 silver badges43 bronze badges

2

You can do whatever test you want. In this example, it checks to see if there is any text in each cell, if so it puts a border around it.

Sub BorderForNonEmpty()

    Dim myRange As Range
    Set myRange = Sheet1.Range("B2:D5")

    ' Clear existing borders
    myRange.Borders.LineStyle = xlLineStyleNone


    ' Test each cell and put a border around it if it has content
    For Each myCell In myRange
        If myCell.Text <> "" Then
            myCell.BorderAround (xlContinuous)
        End If
    Next

End Sub

answered Aug 18, 2013 at 7:19

RobM's user avatar

RobMRobM

3,5902 gold badges18 silver badges14 bronze badges

Допустим, в диапазоне существует много несмежных пустых ячеек, и теперь вам нужно выбрать все ячейки с текущим содержимым. Как легко выбрать все непустые ячейки в Excel? Есть несколько уловок, чтобы решить эту проблему.

  • Выберите непустые ячейки в диапазоне с помощью специальной функции Перейти
  • Выберите непустые ячейки в диапазоне с помощью VBA
  • Выберите непустые ячейки в диапазоне с помощью Kutools for Excel (только один шаг)

Выберите непустые ячейки в диапазоне с помощью специальной функции Перейти

Функция Go To Special может помочь нам выбрать непустые ячейки в выбранном диапазоне с помощью следующих шагов.

1. Выберите диапазон, из которого вы выберете все непустые ячейки, и нажмите F5 Клавиша открытия диалогового окна “Перейти”. Затем нажмите кнопку Особый кнопку, чтобы открыть диалоговое окно Перейти к специальному.

Внимание: Вы также можете открыть Перейти к специальному диалоговое окно, щелкнув Главная > Найти и выбрать > Перейти к специальному.

2. В диалоговом окне “Перейти к специальному” установите флажок Константы вариант, Номера вариант, Текст вариант, Логика вариант, и ошибки и нажмите OK кнопку.

Теперь вы увидите, что только непустые ячейки с содержимым выбраны в указанном диапазоне. См. Скриншоты ниже:

Один щелчок, чтобы выбрать все непустые ячейки в диапазоне в Excel

Kutools for ExcelАвтора Выбрать непустые ячейки Утилита может помочь вам быстро выбрать все непустые ячейки из выбранного диапазона одним щелчком мыши.

ad выберите непустые ячейки

Выберите непустые ячейки в диапазоне с помощью VBA

Здесь мы предоставляем макрос VBA для выбора всех непустых ячеек из указанного диапазона. Пожалуйста, сделайте следующее:

1, нажмите другой + F11 клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.

2, Нажмите Вставить > Модули, а затем вставьте следующий код VBA в открывающееся окно модуля.

VBA: выберите непустые ячейки из диапазона

Sub SelectNonBlankCells()
Dim Rng As Range
Dim OutRng As Range
Dim InputRng As Range
Dim xTitle As String
On Error Resume Next
xTitle = Application.ActiveWindow.RangeSelection.Address
Set InputRng = Application.InputBox("Range :", "KutoolsforExcel", xTitle, Type:=8)
Set InputRng = Application.Intersect(InputRng, Application.ActiveSheet.UsedRange)
For Each Rng In InputRng
If Not Rng.Value = "" Then
If OutRng Is Nothing Then
Set OutRng = Rng
Else
Set OutRng = Application.Union(OutRng, Rng)
End If
End If
Next
If Not (OutRng Is Nothing) Then
OutRng.Select
End If
End Sub

3, нажмите F5 ключ или щелкните Run кнопку для запуска этого VBA.

4. В открывшемся диалоговом окне укажите диапазон, в котором вы будете выбирать только непустые ячейки, и нажмите кнопку OK кнопку.

Теперь все непустые ячейки выбираются сразу в указанном диапазоне.


Выберите непустые ячейки в диапазоне с помощью Kutools for Excel

Kutools for ExcelАвтора Выбрать непустые ячейки Утилита позволяет выбрать все непустые ячейки из определенного диапазона одним щелчком мыши.

Выберите диапазон, в котором вы выберете только непустые ячейки, и нажмите кнопку Кутулс > Выберите > Выбрать непустые ячейки.

Теперь все непустые ячейки в указанном диапазоне выбираются сразу.

Kutools for Excel – Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Демонстрация: выделение непустых ячеек в диапазоне в Excel


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (0)


Оценок пока нет. Оцените первым!

Добавить комментарий