Excel 保留副本,但要区分它们

Excel 保留副本,但要区分它们,excel,vba,duplicates,userform,Excel,Vba,Duplicates,Userform,我有一个很简单的问题。我将简化这个例子。我得到了两列的excel表格。在第一列中,我想保留重复的项目,比如“apple”。但在另一个专栏中,它们有所不同,比如说“绿色”、“红色”等等 我有带有combobox和textbox的userform。Combobox与包含苹果的列相关,textbox与包含不同值的列相关-颜色。当我在组合框中选择项时,它将在文本框中显示相关值。但每次我在combobox中选择“苹果”,在这种情况下,它只会显示最后一个选项--“红色” 有没有办法治疗这个问题 A列中的项目

我有一个很简单的问题。我将简化这个例子。我得到了两列的excel表格。在第一列中,我想保留重复的项目,比如“apple”。但在另一个专栏中,它们有所不同,比如说“绿色”、“红色”等等

我有带有combobox和textbox的userform。Combobox与包含苹果的列相关,textbox与包含不同值的列相关-颜色。当我在组合框中选择项时,它将在文本框中显示相关值。但每次我在combobox中选择“苹果”,在这种情况下,它只会显示最后一个选项--“红色”

有没有办法治疗这个问题

A列中的项目必须相同,不能是
apple1
apple2

一列中会有更多的项目,所有项目都可以重复,比如
apple
apple
pear
orange
orange
orange

这是一个糟糕的例子,但我希望它有意义

请帮忙:)


下面是一个非常简单的例子,说明如何解决这个问题。我建议对类别(苹果、梨、橙)使用
组合框
,对不同的产品使用
列表框

示例数据,如:

Userform-Like:

类似以下代码:

结果:


你目前尝试的工作方式效率很低,但下面是你如何解决这一问题的方法(不过@Peh他的建议更有效)

其他类型的用户表单:

新代码:

Private Sub UserForm_Initialize()

With 'Change according to your sheets CodeName
    Dim lr As Long: lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Dim arr As Variant: arr = .Range("A2:A" & lr)
    Me.ComboBox1.List = arr
End With

End Sub

Private Sub ComboBox1_Change()

With Sheet1 'Change according to your sheets CodeName
    Me.TextBox1.Value = .Cells(Me.ComboBox1.ListIndex - 1, 2).Value
End With

End Sub

使用多列组合框并从组合框的第二列填充文本框。否则,您无法将
Apple
Apple
区分开来

有关如何填充多列框的详细信息,请参见

使用以下代码填充组合框选择中的文本框:

Private Sub ComboBox1_Change()
    Me.TextBox1.Text = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1)
End Sub

如果希望第二列不可见,只需将其宽度设置为
0

填充组合框的另一个简单方法是使用:


请注意,组合框的值将自动成为数据的第一列。如果需要更改,请对数据列重新排序。

您也可以使用单列组合框

以下是用户表单代码窗格中的全部代码:

Option Explicit

Dim fruits As Variant, colors As Variant

Private Sub ComboBox1_Change()
    If Me.ComboBox1.ListIndex <> -1 Then Me.TextBox1.Value = colors(Me.ComboBox1.ListIndex + 1, 1)
End Sub


Private Sub UserForm_Initialize()
    With Sheets("List1")
        With .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))
            fruits = .Value
            colors = .Offset(, 1).Value
        End With
    End With
    Me.ComboBox1.List = fruits
 End Sub
选项显式
以暗淡的水果为变体,以颜色为变体
专用子组合框1_Change()
如果Me.ComboBox1.ListIndex-1,则Me.TextBox1.Value=颜色(Me.ComboBox1.ListIndex+1,1)
端接头
私有子用户表单_初始化()
附页(“列表1”)
带.Range(“A2”,.Cells(.Rows.Count,“A”).End(xlUp))
水果=.价值
颜色=.Offset(,1).Value
以
以
Me.ComboBox1.List=水果
端接头

当文本框在每次组合框更改时被填充时,您不需要按下按钮,请回答您的问题并显示您的代码。如何填写组合框?如何获取文本框的值?阅读可能会帮助你改进你的问题。利用
自动筛选
获取你的
组合框所需的行,但正如@P所述ᴇʜ,如果没有您当前的代码以及如何获取您的值,很难更具体。对不起,这部分的代码很简单,我没有意识到它有那么重要,而且我正在打电话,因为计算机未联机:),但我将编辑that@Majkl必须使用多列组合框,并从组合框的第二列填充文本框。否则你就无法区分“苹果”和“苹果”。请看•由于您没有显示如何填充组合框(请参阅我之前的评论),我们无法对此进行更详细的说明。我知道,我正在处理:)但在手机上很糟糕:染料看起来很好,效果也很好,但我知道这在这里可能没有意义,但我每次只想显示一种“颜色”。所以“盲目”选择第二个“梨”,它只会显示“蓝色”,当我选择第三个“梨”时,它只会显示“红色”等。这就是我使用textbox的原因:)@Majkl正如我之前所说:因此,你必须使用多列组合框,第一列列出水果名称,第二列列出其颜色。否则你无法区分它们。好的,谢谢你,也许我会考虑ListBox,我会考虑它,但无论如何谢谢你的努力:)Majkl,我已经用另一个章节编辑了答案来告诉你如何去接近你正在前进的方向。然而,正如佩赫所提到的,你觉得你将如何区分相同类型的类别?现在,我强烈建议您重新思考您的方法。是的,也许这是最好的解决方案,感谢您出色的可视化:)
Private Sub UserForm_Initialize()

With 'Change according to your sheets CodeName
    Dim lr As Long: lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Dim arr As Variant: arr = .Range("A2:A" & lr)
    Me.ComboBox1.List = arr
End With

End Sub

Private Sub ComboBox1_Change()

With Sheet1 'Change according to your sheets CodeName
    Me.TextBox1.Value = .Cells(Me.ComboBox1.ListIndex - 1, 2).Value
End With

End Sub
Private Sub ComboBox1_Change()
    Me.TextBox1.Text = Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1)
End Sub
Private Sub UserForm_Initialize()
    Dim DataRange As Range
    Set DataRange = ThisWorkbook.Worksheets("Sheet1").Range("A2:D7")

    With Me.ComboBox1
        .RowSource = DataRange.Address
        .ColumnCount = 4
        .ColumnWidths = "40;50;50;100"
        .ColumnHeads = True
    End With
End Sub
Option Explicit

Dim fruits As Variant, colors As Variant

Private Sub ComboBox1_Change()
    If Me.ComboBox1.ListIndex <> -1 Then Me.TextBox1.Value = colors(Me.ComboBox1.ListIndex + 1, 1)
End Sub


Private Sub UserForm_Initialize()
    With Sheets("List1")
        With .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))
            fruits = .Value
            colors = .Offset(, 1).Value
        End With
    End With
    Me.ComboBox1.List = fruits
 End Sub