使用空白中间单元格复制粘贴整行

约翰22

我有一个用作电话簿的文件,在 A 和 B 列中有姓氏和姓名,而在 C 列中有固定电话号码,在 D 中有手机号码。如果C列中没有固定号码进行搜索,它甚至不显示手机,是否可以更正此错误?谢谢

Set intervallo = Sheets(4).Range("A2", Sheets(4).Range("A1").End(xlDown)) ``
For Each Cognome In intervallo ``
If Cognome Like Sheets(1).Ricerca & "*" ``
Sheets(4).Range(Cognome, Cognome.End(xlToRight)).Copy ``
Sheets(1).Range("A" & (Rows.Count)).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues ``
变异

对于此解决方案,我在单元格 B2 中创建了一个带有验证下拉列表的工作表,允许选择“姓名”或“姓氏”。我还在 A2 中输入了文本“查找联系人”作为空白单元格 A3 的标题。A3 以下的所有行也是空白的。

请注意,代码中按名称引用了单元格 A3 和 B2。您可以通过更改代码中常量的值将它们的功能转移到同一工作表上的任何其他单元格。您还可以更改其中的列数(现在为 4,正如您所指定的)和包含您的电话列表的工作表的名称(Worksheets("Sheet4")现在)以及指定它的语法。

ActiveSheet由代码的位置指定。将其粘贴到您的代码标识为Sheets(1)的工作表的代码表中这个位置至关重要。如果您将代码粘贴到标准代码模块(名称类似于Module1),它将失去其自动化功能。

正确安装后,它将对 A3 和 B2 的变化做出反应。假设您在 B2 中选择了“姓氏”并在 A3 中输入“迈克”,代码将列出所有匹配的数字在 A3:D3 及以下,最多 20 个(您可以在代码中取消或增加) . 但是,“迈克”不是姓氏。因此,代码可能会返回“未找到匹配项”。您现在可以将 B2 中的搜索字段选择器更改为“名称”。这将导致代码在另一列中查找“Mike”并列出找到的所有 Mike。无需再次输入搜索条件。

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 284
    
    Const TriggerAddress    As String = "A3"        ' change to suit
    Const LookUpSpec        As String = "B2"        ' which column to search: change to suit
    Const ClmCount          As Long = 4             ' 4 data columns ("A:D")
    
    Dim Ws                  As Worksheet            ' data source
    Dim LookUpClm           As Long
    Dim Rng                 As Range                ' working range
    Dim Fnd                 As Range                ' search result range
    Dim FirstFound          As Long
    Dim Output              As Variant              ' (maximum 20 rows)
    Dim i                   As Long                 ' index of Output
    Dim C                   As Long                 ' loop counter: columns
    
    With Target
        If .Address = Range(TriggerAddress).Address Or _
           .Address = Range(LookUpSpec).Address Then
           Set Target = Range(TriggerAddress)
        Else
            Exit Sub
        End If
    End With

    Set Ws = Worksheets("Sheet4")           ' change to suit
    LookUpClm = 2 + (StrComp(Range(LookUpSpec).Value, "name", vbTextCompare) = 0)
    ' change LookupSpec colour
    Range(LookUpSpec).Font.Color = Array(12611584, 3506772)(LookUpClm - 1)
    
    With Ws
        ' exclude row 1 (column headers)
        Set Rng = .Range(.Cells(2, LookUpClm), _
                         .Cells(.Rows.Count, LookUpClm).End(xlUp))
    End With
    ReDim Output(1 To ClmCount, 1 To 20)     ' maximum = 20: modify here
    Output(1, 1) = Target.Value
    Output(3, 1) = "No match found"
            
    Set Fnd = Rng.Find(What:=Target.Value, After:=Rng.Cells(Rng.Cells.Count), _
                       LookIn:=xlValues, LookAt:=xlPart, _
                       SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                       MatchCase:=False, SearchFormat:=False)
    If Not Fnd Is Nothing Then
        FirstFound = Fnd.Row
        Do
            ' collect all occurrences
            i = i + 1
            For C = 1 To ClmCount
                Output(C, i) = Ws.Cells(Fnd.Row, C).Value
            Next C
            
            Set Fnd = Rng.FindNext(Fnd)
            If Fnd Is Nothing Then Exit Do
        Loop While Fnd.Row > FirstFound
    End If
            
    Set Rng = Range(Target, Cells(Rows.Count, 1).End(xlUp))
    ' delete previous display
    If Rng.Row >= Target.Row Then Rng.Resize(, ClmCount).ClearContents

    If i = 0 Then i = 1
    ReDim Preserve Output(1 To ClmCount, 1 To i)
    
    ' prevent the next action from calling this procedure
    With Application
        .EnableEvents = False
        Target.Resize(UBound(Output, 2), UBound(Output)).Value = .Transpose(Output)
        .EnableEvents = True
    End With
End Sub

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单元格边框未使用特殊粘贴复制

根据单元格内容复制粘贴图表的宏

由于合并的单元格,复制粘贴导致的错误范围

当它们等于另一个电子表格时,使用宏复制粘贴单元格

如何使用Powershell复制和粘贴没有单元格公式的单元格?

如何复制粘贴列可调整带有图像的单元格的高度而不会扭曲图像。(Excel VBA)

通过范围单元格进行复制粘贴:Excel VBA

复制粘贴循环VBA-覆盖当前单元格

如何在Google表格中将带有超链接文本的单元格复制粘贴?

在QTableWidget单元格PyQt5中的标签中复制粘贴文本

复制/粘贴范围(单元格(

需要基于单元格值添加行,并从上方复制粘贴数据并将其转置

Libreoffice calc复制粘贴时的相对和绝对单元格引用

Excel宏搜索列D单元格1复制粘贴列B单元格7

使用单元格编号复制和粘贴工作表

复制并粘贴多个单元格

尝试在单独的工作表中复制粘贴单元格时的VBA运行时错误1004

Microsoft Excel-在保留对单个单元格的引用的同时复制粘贴

从特定单元格复制整行

复制/粘贴单元格和价值

复制粘贴取决于两个区域中的单元格值

在两个不同的工作簿之间的错误单元格区域中复制粘贴

复制粘贴的单元格每粘贴4个单元格就会更改列

在Excel单元格和浏览器文本输入框之间最快/最简单的复制粘贴方式

如何复制粘贴单元格值,如果单元格包含大于 0,则通过循环粘贴到另一个单元格

excel vba复制粘贴单元格而不引起用户注意

如果单元格在 excel 中具有红色/绿色/黄色,则复制粘贴整行

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

根据单元格值查找行,然后根据找到的行值复制粘贴 - 未设置对象变量