Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 组合框项目比较和匹配-VBA_Excel_Vba - Fatal编程技术网

Excel 组合框项目比较和匹配-VBA

Excel 组合框项目比较和匹配-VBA,excel,vba,Excel,Vba,我有两张excel表格:一张包含源数据,另一张包含目标数据。我已经创建了包含组合框(dropdownlists)和导入按钮的userform 有些组合框包含源工作表第一行的名称,有些组合框包含目标工作表第一行的名称 我想比较组合框中的名称(源名称和目标名称),如果它们相等,则进行匹配 当我点击导入按钮时,源excel工作表中的所有内容都将导入到目标excel工作表的正确位置。 我该怎么做 我试过这个密码 dim sh =ThisWorkbook.Sheets("sourcedata&q

我有两张excel表格:一张包含源数据,另一张包含目标数据。我已经创建了包含组合框(dropdownlists)和导入按钮的userform

有些组合框包含源工作表第一行的名称,有些组合框包含目标工作表第一行的名称

我想比较组合框中的名称(源名称和目标名称),如果它们相等,则进行匹配 当我点击导入按钮时,源excel工作表中的所有内容都将导入到目标excel工作表的正确位置。 我该怎么做

我试过这个密码

dim sh =ThisWorkbook.Sheets("sourcedata")
dim sh2= ThisWorkbook.Sheets("goaldata")
dim i,j as integer

for i = 1 to Application.WorksheetFunction.CountA(sh.Range("1:1"))
for j = 1 to Application.WorksheetFunction.CountA(sh2.Range("1:1"))  
     if sh.cells(1,i).value = sh2.cells(1,j).value then

          Me.comboBox1.value = sh.cells(1,i)
          Me.comboBox2.value = sh2.cells(1,j)
          Me.comboBox3.value = sh.cells(1,i)
          Me.comboBox4.value = sh.cells(1,j) 
end if
next
next 
end sub 
问题是我在所有的组合框中通常得到相同的值。 我想在所有的组合框中得到两张表中的行的名称

例如,我有源工作表的行名称:日期、事件和地点 目标工作表中的行名称为:仅日期和事件 例如:在combobox1.value=Date中也应该在comboBox2.value=Date中(因为日期在两张表中都存在) Combox3.value=事件,Combox4.value应为事件

我想插入Combobox5.value=place(Combobox5包含仅存在于一张工作表中的名称,它们没有任何匹配项)


有什么帮助吗?

我想我理解了3个组合框部分,但不完全理解“应该复制哪些数据”部分,所以让我们继续讨论组合框部分

关于代码的一些注释:

  • 当您在dim中未提及数据类型时,默认情况下变量在variant type=>中,例如dim i=>与dim i as variant相同。虽然不总是一个问题,但它可能导致意外行为
  • “combobox.value”用于获取combobox的选定值,而不是向其中添加项目。看看你的描述和代码,我想你是有意添加项目的
因此,以下是基于我的假设的修订版本。我没有使用“add..Item”,而是将表单元格分配给数组,这样我们就可以直接在内存中操作这些数组,允许进行比较、复制等操作。。要执行得快得多

Option Explicit
Sub UserForm_Initialize()
    Dim arr, arr2
    arr = Sheet1.Range("A1:c1").Value2
    Me.ComboBox1.List = Application.WorksheetFunction.Transpose(arr)
    
    arr2 = Sheet2.Range("A1:c1").Value2
    Me.ComboBox2.List = Application.WorksheetFunction.Transpose(arr2)
    
    Dim i As Long, arr3, ii As Long: ii = 1
    ReDim arr3(1 To 1, 1 To UBound(arr, 2))
    For i = 1 To UBound(arr, 2)
        If arr(1, i) <> arr2(1, i) Then
            arr3(1, ii) = arr(1, i)
            ii = ii + 1
        End If
    Next i
    Me.ComboBox3.List = Application.WorksheetFunction.Transpose(arr3)
End Sub
选项显式
子用户表单_初始化()
暗arr,arr2
arr=表1.范围(“A1:c1”).值2
Me.ComboBox1.List=Application.WorksheetFunction.Transpose(arr)
arr2=表2.范围(“A1:c1”).值2
Me.ComboBox2.List=Application.WorksheetFunction.Transpose(arr2)
尺寸i等长,arr3,ii等长:ii=1
重拨arr3(1对1,1对UBound(arr,2))
对于i=1至UBound(arr,2)
如果arr(1,i)arr2(1,i),那么
arr3(1,ii)=arr(1,i)
ii=ii+1
如果结束
接下来我
Me.ComboBox3.List=Application.WorksheetFunction.Transpose(arr3)
端接头

看一看,让我知道它是怎么回事。

你应该发布你尝试过的代码。我已经发布了代码。你知道吗?