比较两个工作表时,VBA根据条件替换和添加单元格

拖把

我有一个主体工作表(启动跟踪器),需要从数据库中进行更新。我已将数据库的提取放在相邻的工作表(LAT-主数据)上。

我想做的是,如果H,O,Q列的值相似,则它将替换(启动跟踪器)上从“ E”列到“ AL”的行,如果没有匹配项,我会希望将整个行添加到(启动跟踪器)工作表的末尾。

我已经有进行测试时正在运行的代码,但是现在看来似乎无法正常工作,而且我不知道为什么。

Option Explicit
Option Base 1
Dim Ttrak_concat, Tdata_concat, Derlig As Integer
Sub General_update()
Dim Cptr As Integer, D_concat As Object, Ref As String, Ligne As Integer, Lig As Integer
Dim Start As Single
Dim test 'for trials
    Start = Timer
    Application.ScreenUpdating = False
    Call concatenate("LAT - Master Data", Tdata_concat)
    Call concatenate("Launch Tracker", Ttrak_concat)
    'collection
    Set D_concat = CreateObject("scripting.dictionary")
    For Cptr = 1 To UBound(Ttrak_concat)
    Ref = Ttrak_concat(Cptr, 1)
        If Not D_concat.exists(Ref) Then: D_concat.Add Ref, Ttrak_concat(Cptr, 2)
    Next
    'comparison between the sheets
    Sheets("LAT - Master Data").Activate
    For Cptr = 1 To UBound(Tdata_concat)
        Ref = Tdata_concat(Cptr, 1) 'chaineIPR feuil data
        Ligne = Tdata_concat(Cptr, 2) 'localisation sheet data
        If D_concat.exists(Ref) Then
                Lig = D_concat.Item(Ref) 'localisation sheet track
        Else
                Lig = Derlig + 1
        End If
        Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AL")).Copy _
                    Sheets("Launch Tracker").Cells(Lig, "E")
    Next
    Sheets("Launch Tracker").Activate
    Application.ScreenUpdating = False
    MsgBox "mise à jour réalisée en: " & Round(Timer - Start, 2) & " secondes"
End Sub
'---------------------------------------
Sub concatenate(Feuille, Tablo)
Dim T_coli, T_colp, T_colr, Cptr As Integer
Dim test
 With Sheets(Feuille)
        'memorizing columns H O Q
        Derlig = .Columns("H").Find(what:="*", searchdirection:=xlPrevious).Row
        T_coli = Application.Transpose(.Range("H3:H" & Derlig))
        T_colp = Application.Transpose(.Range("O3:O" & Derlig))
        T_colr = Application.Transpose(.Range("Q3:Q" & Derlig))
        'concatenate for comparison
        ReDim Tablo(UBound(T_colr), 2)
        For Cptr = 1 To UBound(T_colr)
           Tablo(Cptr, 1) = T_coli(Cptr) & " " & T_colp(Cptr) & " " & T_colr(Cptr)
           Tablo(Cptr, 2) = Cptr + 2
       Next
    End With
End Sub

有人可以解决我的问题吗?

先感谢您 :)

编辑11:48

实际上,代码现在可以运行,但是它无法按我需要的方式工作。当三个列H,O和Q相同时,我想从LAT-主数据表更新我的工作表启动跟踪器上的信息。问题是运行宏后,我已经检查过,并且LAT-主数据表中存在的某些行没有添加到启动跟踪器表中。有人知道为什么吗?

阿加特人

拱廊区

类型不匹配意味着您为函数提供了类型错误的参数。在您的情况下,这意味着UBound无法处理T_colrReDim无法处理UBound(T_colr)由于Ubound始终返回整数,因此必须为T_colr

如果Derlig=3然后Application.Transpose(.Range("Q3:Q" & Derlig))将不会返回一个数组,但单个值(DoubleString或其他)。那就是UBound抛出错误的时候

您还将收到错误的T_coli(Cptr)etc。

为防止这种情况,您可以做的是Derlig = 3单独检查是否有这种情况。

If Derlig = 3 Then
    ReDim Tablo(1, 2)
    Tablo(1, 1) = T_coli & " " & T_colp & " " & T_colr
    Tablo(1, 2) = 3
Else
    ReDim Tablo(UBound(T_colr), 2)
    For Cptr = 1 To UBound(T_colr)
       Tablo(Cptr, 1) = T_coli(Cptr) & " " & T_colp(Cptr) & " " & T_colr(Cptr)
       Tablo(Cptr, 2) = Cptr + 2
    Next Cptr
End If

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel 2010 VBA:根据两个相邻单元格的比较插入空白单元格

根据它们的颜色比较两个单元格

使用for循环和数组比较来自不同工作表的两个单元格

根据VBA中的两个条件为单元格着色

如何在两个不同的Excel工作表中比较两个单元格区域?

使用 VBA 从两个不同的工作表复制粘贴单元格

Splunk:如何添加两个表的单元格

VBA复制和粘贴仅根据活动工作表选择2个单元格

Excel VBA代码-当工作表2中的两个单元格相等时,如何清除工作表1列的值?

在Numpy中比较两个单元格之间的值并根据条件分配值的有效方法

比较两个表并根据条件添加行

根据单元格值以更有效的方式删除两个不同工作表上的行[VBA Excel]

如何使用VBA进行VLookup比较两个不同的表并删除单元格表匹配的行?

如何在具有单元格可以满足两个条件的OR条件的Goole工作表中使用COUNTUNIQUEIFS

VBA-根据用户窗体条件插入两个新行,并复制单元格区域的excel公式

如何在Excel 2013中的IF中比较和求和两个单元格的值并使用多个条件

在 Excel 中,如何根据任一单元格的条件突出显示两个单元格?

尝试使用两个单元格值重命名工作表时出现运行时错误9

比较两个工作簿中的A列,查找相邻的单元格数据

可以将工作表中两个单元格之间的范围与另一工作表中两个单元格的地址进行分类

Excel条件比较两个单元格然后获取数据

Excel VBA:比较两个单元格的公式/公式结构

使用VBA比较Excel中两个单元格的数字格式

使用Select Case或If Then VBA比较两个单元格

VBA CODE根据2个不同列中的条件替换单元格内容

比较两个单元格并将HTML标记添加到匹配值

比较表格单元格的两个值以添加类如果相同

在Excel中如何用两个条件替换单元格内部颜色

通过比较两个单元格之间的值来索引表的行