Поиск ячейки и замена значения в строке листа VBA EXCEL

Программирование на Visual Basic for Applications
khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Поиск ячейки и замена значения в строке листа VBA EXCEL

Сообщение khall » 23.02.2006 (Чт) 9:51

Помогите, пожалуйста, с задачкой.
Как найти ячейку со значением, например, город, и очистить эту ячейку, а также зависимые с ней ячейки, расположенные на той же строке, что и найденная ячейка в диапазоне G8:G43 и E8:E43?

Этот код очищает все найденные ячейки со значением город, но не очищает те ячейки, которые находятся в той строке, что и ячейка со значением город.
Sub Поиск()

Dim c As Range
For Each c In [I8:I43]
If c.Value Like "город" Then
c.Value = ""
End If
Next
End Sub

Может быть так или есть код покрасивее? При этом остается проблема: если курсор не находится в ячейке диапазона I8:J20, появляется сообщение об ошибке. Ошибка появляется и тогда, когда в ячейках больше нет данных в диапазоне I8:J20. Как это все исправить?

Public Sub Поиск2()

Dim rng As Range

Set rng = Range("I8:J20").Find(What:="город", After:=ActiveCell, LookIn:=xlValues, _
MatchCase:=True)
Range("I8:J20").FindNext(After:=ActiveCell).Activate

If Not (rng Is Nothing) Then
Cells(ActiveCell.Row, ActiveCell.Column - 1).Select
ActiveCell = ""
Cells(ActiveCell.Row, ActiveCell.Column - 1).Select
ActiveCell = ""
Cells(ActiveCell.Row, ActiveCell.Column + 4).Select
ActiveCell = ""
Else
MsgBox "Не найдено значение"
End If

End Sub

Ниже все в одном файле
Вложения
search.rar
Здесь пример все в одном файле
(8.18 Кб) Скачиваний: 239

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

Сообщение GSerg » 23.02.2006 (Чт) 11:38

Код: Выделить всё
Sub sdfsdf()
  Dim f As Excel.Range, w As Excel.Range
 
  Set w = Range("I8:I43")
  Set f = w.Find("город", , xlValues, xlWhole)
 
  Do Until f Is Nothing
    Range(f.Offset(0, -4), f).Value = Empty
    Set f = w.FindNext
  Loop
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Усовершенствование кода предыдущей задачи

Сообщение khall » 24.02.2006 (Пт) 8:31

Код работает просто СУППЕР! Я его поместил в стандартный модуль Module1 с названием процедуры Поиск. К нему обращаются процедуры рабочих листов при наступлении события Worksheet_Change любого активного рабочего листа через Call Поиск. Теперь при наступлении изменения в ячейках D62 или D63, а соответственно и D65, автоматически удаляются названия "Телефон" и "город", а также сумма в грн. Это приводит к появлению только одной записи. Это мне и нужно!

Вот код рабочего листа Лист1. Такой же код присутствует и в других листах: Лист2...

В будущем, пожалуйста, проявляйте уважение к читающим и пользуйтесь форматированием кода.
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Range)

Dim тф As Range, i As String
Set тф = Range("D62:D65")

    If Not (Application.Intersect(Target, тф) Is Nothing) Then
        Call Поиск
       
        i = 8
        While Sheets("Лист1").Range("E" + LTrim$(Str$(i))) <> ""
        i = i + 1
        Wend
        Sheets("Лист1").Range("E" + LTrim$(Str$(i))) = Range("D65").Value
        Sheets("Лист1").Range("G" + LTrim$(Str$(i))) = "Телефон"
        Sheets("Лист1").Range("I" + LTrim$(Str$(i))) = "город"
    End If

End Sub


Стандартный модуль
Код: Выделить всё
Public Sub Поиск()

  Dim f As Excel.Range, w As Excel.Range
 
  Set w = Range("I8:J20")
  Set f = w.Find("город", , xlValues, xlWhole)

    Do Until f Is Nothing
      Range(f.Offset(0, -4), f).Value = Empty
      Set f = w.FindNext
    Loop
End Sub


Но я обнаружил особенность, которую теперь нужно устранить.
Иногда может получиться, что или ячейка D62 или D63 могут стать пустыми, что сделает пустой и ячейку D65. В этом случае значение ячейки, содержащей сумму расхода в грн. "Телефон" и "город", очищается, но остаются названия "Телефон" и "город" в ячейках столбцов G и I.

ВОПРОС: Как сделать, чтобы при удалении значения из ячейки с суммой в грн. удалялись и теперь ненужные записи "Телефон" и "город", которые были связаны с удаленной записью суммы в грн.

Как усовершенствовать код?
Вложения
search2.rar
(13.32 Кб) Скачиваний: 224

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

Сообщение GSerg » 24.02.2006 (Пт) 13:21

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

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Сообщение khall » 24.02.2006 (Пт) 14:09

Извини, пожалуйста, не знаю, как сделать, чтобы код удобно читался. Что нужно сделать?
[/b]

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

Сообщение GSerg » 24.02.2006 (Пт) 14:48

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

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Сообщение khall » 24.02.2006 (Пт) 15:04

Спасибо тебе за терпение! Я только учусь!
Кое-что будет экспериментом.
Во всяком случае, спасибо за твой код, который работает исключительно.
Код: Выделить всё
Public Sub Поиск()

  Dim f As Excel.Range, w As Excel.Range
 
  Set w = Range("I8:J20")
  Set f = w.Find("город", , xlValues, xlWhole)

    Do Until f Is Nothing
      Range(f.Offset(0, -4), f).Value = Empty
      Set f = w.FindNext
    Loop
End Sub


Получилось!!!

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Сообщение khall » 24.02.2006 (Пт) 15:05

Я уже подготовил для тебя вопрос. Чуть позже отправлю. Хорошо?

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

Сообщение GSerg » 24.02.2006 (Пт) 15:11

Специфика общения на форуме несколько иная.
Во-первых, не мне, а нам, и во-вторых, спрашивать разрешения на вопрос не надо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Сообщение khall » 24.02.2006 (Пт) 16:12

Понял

Igor[hw]
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.08.2006 (Пн) 12:59

Сообщение Igor[hw] » 14.08.2006 (Пн) 13:25

Привет всем.

А как можно сделать поиск двух разных слов например "город" и "улица" ?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.08.2006 (Пн) 13:28

Одновременно? Да никак, пожалуй.
Но ты можешь перебирать ячейки, или искать вначале одно слово, затем другое.
Lasciate ogni speranza, voi ch'entrate.

Igor[hw]
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.08.2006 (Пн) 12:59

Сообщение Igor[hw] » 14.08.2006 (Пн) 15:15

Да одну и ту де процедуру пришлось запускать с разным параметром поиска. Ну а так все работает. Спасибо за ответ !

Vladimir87
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 08.11.2006 (Ср) 21:03

Сообщение Vladimir87 » 08.11.2006 (Ср) 21:25

Здравствуйте! У меня такая проблема. Есть 4 столбца НАИМЕНОВАНИЯ ЦЕНА НАИМЕНОВАНИЯ1 ЦЕНА1 вопрос вот в чём есть ли такая возможность сопоставить значения столбца НАИМЕНОВАНИЯ со значением НАИМЕНОВАНИЯ1, а всё что помимо удалить (Тоесть то чего нет ни в том ни в другом столбце) но при этом ЦЕНА должна остаться привязана к значению в столбце НАИМЕНОВАНИЕ? За ранее спасибо!


Вернуться в VBA

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

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

    TopList