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.
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 :
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.
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.
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.
Conservez la feuille de calcul cible sélectionnée, appuyez sur la touche de raccourci
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 '如果用户选择的单元格不是第1列或者属于第1行 If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then b = True '如果用户选择的单元格数量大于1 If b Then ListBox1.Visible = False '不可见 TextBox1.Visible = False '不可见 Exit Sub '退出程序 End If With Worksheets("示例") '下拉列表来源内容的所在工作表 arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源 End With With TextBox1 .Value = "" .Visible = True '可见 .Top = Target.Top '文本框顶部位置 .Left = Target.Left '文本框左侧位置 .Height = Target.Height '文本框高度 .Width = Target.Width '文本框宽度 .Activate '激活文本框 End With With ListBox1 .Visible = True '可 .Top = Target.Offset(0, 1).Top .Left = Target.Offset(0, 1).Left .Height = Target.Height * 5 .Width = Target.Width .List = arr '写入数据源数据 End With End Sub '根据文本框的输入值动态匹配数据 Private Sub TextBox1_Change() Dim arr, brr, i&, k& With Worksheets("示例") '下拉列表来源内容的所在工作表 arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源 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 '忽略字母大小写 k = k + 1 brr(k) = arr(i, 1) End If Next ListBox1.List = brr '写入匹配后的数据 End Sub '如果双击列表框的内容则写入活动单元格 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ActiveCell = ListBox1.Text With ListBox1 .Clear '清空列表框 .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.
...
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("示例") '下拉列表来源内容的所在工作表 arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源 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!