Использование поля ввода для всех переменных в выражении VBA - PullRequest
0 голосов
/ 04 февраля 2020

Я попытался закодировать макрос, в котором выполняется поиск по заданному c тексту. A) Столбец для поиска, B) Столбец, в котором должен появиться результат, и C) Текст, по которому проводится поиск. Все обозначены соответствующими полями ввода. В поле ввода для столбцов, в которых необходимо выполнить поиск, и в том месте, где должен располагаться вывод , нужно только имя столбца (а не диапазон) , обозначенное буквами (текст и т. Д.) В качестве значения. Например, если необходимо выполнить поиск в столбце Y, в поле ввода необходимо ввести только букву «Y». Я пробовал различные перестановки, но не смог заменить Y2: Y & LastRow в приведенном ниже коде, поэтому он относится к вводу из поля ввода для столбца для поиска.

Код выглядит следующим образом: -

Sub CountIfAllVariablesFromInputBox()
    Dim LastRow    As Long
    Dim ChkColumn  As String
    'display an input box asking for column
    ChkColumn = InputBox( _
    "Please enter column to check")
    'if no input stop
    ColumnNumber = Columns(ChkColumn).Column
    If Len(ChkColumn) = 0 Then
        MsgBox "No column entered"
        Exit Sub
    End If

    Dim InputColumn    As String
    'display an input box asking for column
    InputColumn = InputBox( _
    "Please enter column to insert results")
    'if no input stop
    If Len(InputColumn) = 0 Then
        MsgBox "No column entered"
        Exit Sub
    End If
'inputbox for text string to search for    
    Dim SuccessKeyWord As String
    SuccessKeyWord = InputBox(Prompt:="Enter KeyWord For Success", _
    Title:="KeyWord For Success", Default:="WOW!!")

    LastRow = Range(ChkColumn & Rows.Count).End(xlUp).Row

    Range(InputColumn & "1").Formula = "=COUNTIF(Range("Y2:Y"&LastRow),""" & SuccessKeyWord & """)"
 End With
End Sub

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

Я был бы очень благодарен за вашу любезную помощь.

Я разместил снимок экрана. Иногда мне нужно искать в столбце "W", а в других - в столбце "Y". , Мне нужна эта гибкость, используя поле ввода.

Снимок экрана столбцов

Ошибка после замены последней строки кода на: -

Range(InputColumn & "1").Formula = "=COUNTIF(Range(""" & ChkColumn & 2 & ":" & ChkColumn & """&LastRow),""" & SuccessKeyWord & """)"

или

Range(InputColumn & "1").Formula = "=COUNTIF(Range(""" & ChkColumn & 2 & ":" & ChkColumn &LastRow & """),""" & SuccessKeyWord & """)"

Примечание: -

Поиск в столбце W

Результат в столбце AA

Текст в поиск WOW !!

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Предполагается, что вы хотите, чтобы пользователь выбрал столбцы

Sub CountIfAllVariablesFromInputBox()
    Dim LastRow As Long, Rng As Range
    Dim ChkColumn As Range
    Dim InputColumn As Range
    Dim SuccessKeyWord As String


    'display an input box asking for column
    Set ChkColumn = Application.InputBox("Please enter column to check", Type:=8)
    'if no input stop
    If Len(ChkColumn) = 0 Then
        MsgBox "No column entered"
        Exit Sub
    End If

    ColumnNumber = ChkColumn.Column

    'display an input box asking for column
    Set InputColumn = Application.InputBox( _
                      "Please enter column to insert results", Type:=8)
    'if no input stop
    If InputColumn Is Nothing Then Exit Sub
    'inputbox for text string to search for
    SuccessKeyWord = InputBox(Prompt:="Enter KeyWord For Success", _
                              Title:="KeyWord For Success", Default:="WOW!!")

    LastRow = Cells(Rows.Count, ColumnNumber).End(xlUp).Row
    Set Rng = Range(Cells(1, ColumnNumber), Cells(LastRow, ColumnNumber))
    Cells(1, InputColumn.Column) = "=COUNTIF(" & Rng.Address & ",""" & SuccessKeyWord & """)"

End Sub
0 голосов
/ 04 февраля 2020

О, наконец-то все заработало

Sub CountIfAllVariablesFromInputBox()
        Dim LastRow    As Long
        Dim ChkColumn  As String
        Dim InputColumn  As String
        Dim SuccessKeyWord As String
        Dim rng As Range
        'display an input box asking for column
        ChkColumn = Application.InputBox("Please enter column to check")
        'if no input stop
        On Error Resume Next
        ColumnNumber = Columns(ChkColumn).Column
        If Err.Description <> "" Then
            MsgBox "No column entered or Something Error"
            Exit Sub
        End If
        On Error GoTo 0
        'display an input box asking for column
        On Error Resume Next
        InputColumn = Application.InputBox( _
        "Please enter column to insert results")
        'if no input stop
        If Err.Description <> "" Then
            MsgBox "No column entered or Something Error"
            Exit Sub
        End If
        On Error GoTo 0
    'inputbox for text string to search for
        SuccessKeyWord = Application.InputBox(Prompt:="Enter KeyWord For Success", _
        title:="KeyWord For Success", Default:="WOW!!")
        LastRow = Range(ChkColumn & Rows.Count).End(xlUp).Row
       Set rng = Range(ChkColumn & 2 & ":" & ChkColumn & LastRow)
        Range(InputColumn & "1").Value = WorksheetFunction.CountIf(rng, SuccessKeyWord)
    End Sub

Спасибо @JvdV @chrisneilsen @ user11982798 @ Davesexcel

0 голосов
/ 04 февраля 2020

Некоторые изменения из вашего кода линии:

Sub CountIfAllVariablesFromInputBox()
    Dim LastRow    As Long
    Dim ChkColumn  As String
    'display an input box asking for column
    ChkColumn = InputBox( _
    "Please enter column to check")
    'if no input stop
    On Error Resume Next
    ColumnNumber = Columns(ChkColumn).Column
    If Err.Description <> "" Then
        MsgBox "No column entered or Something Error"
        Exit Sub
    End If
    On Error GoTo 0
    Dim InputColumn  As String
    'display an input box asking for column
    On Error Resume Next
    InputColumn = InputBox( _
    "Please enter column to insert results")
    'if no input stop
    If Err.Description <> "" Then
        MsgBox "No column entered or Something Error"
        Exit Sub
    End If
    On Error GoTo 0


'inputbox for text string to search for
    Dim SuccessKeyWord As String
    SuccessKeyWord = InputBox(Prompt:="Enter KeyWord For Success", _
    Title:="KeyWord For Success", Default:="WOW!!")

    LastRow = Range(ChkColumn & Rows.Count).End(xlUp).Row

    Range(InputColumn & "1").Formula = "=COUNTIF(Range(""" & ChkColumn & 2 & ":" & ChkColumn &LastRow & """),""" & SuccessKeyWord & """)"
 'End With
End Sub
...