По комментариям вы поймете, что вопросы "пожалуйста, решите мою проблему для меня" не популярны.
Я догадываюсь, что вы не знаете, с чего начать, и даст вам некоторые начальные рекомендации.
Зайдите в Google и введите "учебник по Excel VBA".Вам будет предложено много сайтов.Все они разные, поэтому попробуйте несколько и найдите тот, который подходит именно вам.
Попробуйте макро-рекордер.Я настроил рабочий лист, соответствующий вашему описанию, включил регистратор макросов, выбрал столбец A, щелкнул Ctrl+F
, чтобы открыть экран поиска, и нажал кнопку параметров, чтобы отобразить все параметры.Результат:
Посмотрите на варианты.Например, важен ли случай?Выберите по мере необходимости.Я поставил галочку «соответствовать всему содержимому ячейки», ввел «k» и нажал Find Next
.Курсор перепрыгнул на ячейку, содержащую «k».Затем я выключил устройство записи макросов.
Сохраненный для меня код:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 27/02/2012 by Tony Dallimore
'
Columns("A:A").Select
Selection.Find(What:="k", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
End Sub
Это допустимый VBA, но не очень хороший VBA.Макро-рекордер записал каждое действие, когда вы его выполняли.Он не знает ваших намерений.Поэтому нам нужно привести в порядок этот код.
Ключевые изменения:
- Мы не хотим выбирать столбец A или активировать ячейку, содержащую найденное значение.
- Нам нужно разрешить, чтобы значение не было найдено.
Скопируйте приведенный ниже макрос в модуль, в котором устройство записи макросов сохранило свой код.Я создал этот макрос, внеся изменения в сохраненный код, чтобы создать тестовую машину для игры.Он запрашивает значение, ищет его в столбце A и сообщает, было ли это значение найдено или нет.Это основа кода, который вам нужен.
Sub PlayMacro()
Dim Prompt As String
Dim RetValue As String
Dim Rng As Range
Dim RowCrnt As Long
Prompt = ""
' The macro recorder has used the active worksheet. This says which
' worksheet is to be used whether it is active or not. Change "Sheet4"
' to the name of your worksheet.
With Sheets("Sheet4")
' This will loop forever unless a statement within
' the loop exits the Do.
Do While True
RetValue = InputBox(Prompt & "Give me a value to look for")
'RetValue will be empty if you click cancel
If RetValue = "" Then
Exit Do
End If
' I do not wish to active the cell containing the required value.
' I want to know where it is.
Set Rng = .Columns("A:A").Find(What:=RetValue, After:=.Range("A1"), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Rng Is Nothing Then
' The entered value could not be found
Prompt = "I could not find """ & RetValue & """"
Else
' The entered value was found
RowCrnt = Rng.Row
Prompt = "I found """ & RetValue & """ on row " & RowCrnt
End If
Prompt = Prompt & vbLf
Loop
End With
End Sub
Теперь снова включите видеорегистратор.Поместите курсор в столбец A ниже любых строк со значениями.Нажмите Ctrl+UpArrow
.Курсор переместится к последнему значению в столбце A. Выключите устройство записи макросов.
Сохраненный код будет выглядеть следующим образом:
Sub Macro2()
'
' Macro2 Macro
' Macro recorded 27/02/2012 by Tony Dallimore
'
'
Range("A64").Select
Selection.End(xlUp).Select
Range("A28").Select
End Sub
End(xlUp)
- это VBA для Ctrl+UpArrow
,Это самый простой способ найти последнюю использованную строку.
Чтобы добавить новую строку, которую вы хотите сделать, если значение не найдено:
RowCrnt = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(RowCrnt,1),Value = "Key"
.Cells(RowCrnt,2),Value = "Value"
Если вы посмотрите на другиевопросы, которые вы обнаружите, что End
иногда не даст ожидаемого результата.Попробуйте Ctrl+DownArrow
и Ctrl+UpArrow
для пустого столбца, столбца с одним, затем двумя значениями вверху, столбца с одним, затем двумя значениями внизу и столбца с несколькими значениями, разделенными пустыми строками.
Это должно помочь вам начать.Добро пожаловать в программирование Excel.Удачи.