Maison  >  Article  >  Les sujets  >  Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

WBOY
WBOYavant
2022-04-24 12:08:275326parcourir

Cet article vous apporte des connaissances pertinentes sur excel, qui présente principalement des problèmes liés à la manière dont Excel crée des menus déroulants à correspondance floue dynamique. Examinons-le ensemble, j'espère que cela sera utile à tout le monde.

Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

Recommandations d'apprentissage associées : Tutoriel Excel

Nous savons que vous pouvez utiliser des fonctions pour créer des menus déroulants à correspondance floue, mais la fonction est petite et intelligente, et la quantité de données est légèrement plus grande, et le l'efficacité est directement au bout de la ligne. Comme nous le savons tous, dans Excel, pour résoudre efficacement des problèmes complexes, il faut toujours s'appuyer sur le stupide et stupide VBA. Aujourd'hui, je vais donc partager avec vous comment utiliser VBA pour créer un menu déroulant de correspondance floue dynamique plus utile.

L'effet terminé est démontré comme suit :

Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

Comme le montre l'image ci-dessus, cliquez sur la cellule de la colonne A et Excel fera automatiquement apparaître une zone de saisie de texte et une zone de liste. Lorsque des données sont saisies dans la zone de texte, les données de la zone de liste seront mises à jour dynamiquement.

1 丨 Étapes de production

Sélectionnez la feuille de calcul cible, accédez à [Outils de développement] → [Insérer] → [Contrôle ActiveX] et insérez une zone de texte et une zone de liste. La taille et l'emplacement de stockage du contrôle sont arbitraires. De toute façon, peu importe ce que vous dites, le code effectuera les ajustements lui-même plus tard.

Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

Il est à noter que si vous ne savez pas comment ajuster le code VBA, le nom de la zone de texte ici doit être TextBox1 et le nom de la list box doit être ListBox1 - Normalement, ces deux noms sont également les valeurs par défaut du système.

Apprenez étape par étape à créer un menu déroulant de correspondance floue dynamique dans Excel

Conservez la feuille de calcul cible sélectionnée, appuyez sur la touche de raccourci pour ouvrir l'éditeur VBE et collez le code suivant dans la fenêtre de code de la feuille de calcul actuelle.

Voir les commentaires pour l'analyse du code

'设置文本框和列表框的大小及位置
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim b As Boolean, arr
    If Target.Column <> 1 Or Target.Row < 2 Then b = True &#39;如果用户选择的单元格不是第1列或者属于第1行
    If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then b = True &#39;如果用户选择的单元格数量大于1
    If b Then
        ListBox1.Visible = False &#39;不可见
        TextBox1.Visible = False &#39;不可见
        Exit Sub &#39;退出程序
    End If
    With Worksheets("示例") &#39;下拉列表来源内容的所在工作表
        arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) &#39;数据源
    End With
    With TextBox1
        .Value = ""
        .Visible = True &#39;可见
        .Top = Target.Top &#39;文本框顶部位置
        .Left = Target.Left &#39;文本框左侧位置
        .Height = Target.Height &#39;文本框高度
        .Width = Target.Width &#39;文本框宽度
        .Activate &#39;激活文本框
    End With
    With ListBox1
        .Visible = True &#39;可
        .Top = Target.Offset(0, 1).Top
        .Left = Target.Offset(0, 1).Left
        .Height = Target.Height * 5
        .Width = Target.Width
        .List = arr &#39;写入数据源数据
    End With
End Sub
&#39;根据文本框的输入值动态匹配数据
Private Sub TextBox1_Change()
    Dim arr, brr, i&, k&
    With Worksheets("示例") &#39;下拉列表来源内容的所在工作表
        arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) &#39;数据源
    End With
    If TextBox1.Text = "" Then ListBox1.List = arr: Exit Sub
    ReDim brr(1 To UBound(arr))
    For i = 1 To UBound(arr)
        If InStr(1, arr(i, 1), TextBox1.Text, vbTextCompare) Then  &#39;忽略字母大小写
            k = k + 1
            brr(k) = arr(i, 1)
        End If
    Next
    ListBox1.List = brr &#39;写入匹配后的数据
End Sub
&#39;如果双击列表框的内容则写入活动单元格
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ActiveCell = ListBox1.Text
    With ListBox1
        .Clear &#39;清空列表框
        .Visible = False
    End With
    With TextBox1
        .Value = ""
        .Visible = False
    End With
End Sub

Fermez enfin VBE et enregistrez le classeur actuel en tant que fichier xlsm.
...

2 丨Autres

Si vous ne comprenez pas VBA, après avoir suivi les étapes ci-dessus, vous devez remplacer "exemple" dans le code par le nom de la feuille de calcul où se trouve la source de données de la liste déroulante localisé et remplacez la partie "d2:d" & . Cells(Rows.Count, "d"), remplacez-la par la colonne où se trouve la source de données réelle.

With Worksheets("示例") &#39;下拉列表来源内容的所在工作表
arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) &#39;数据源
End With

Recommandations d'apprentissage associées : Tutoriel Excel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer