吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 699|回复: 14
收起左侧

[求助] VBA提取两列部分相同内容

[复制链接]
yeyazi520 发表于 2024-9-23 10:51
25吾爱币
求助VBA提取两列部分相同内容,需要提取两列中相同文字,或者高亮显示两列中相同的文字,谢谢大佬。

最佳答案

查看完整内容

这个也可以啊 要在Excel中使用VBA提取两列中的相同内容或高亮显示相同的文字,可以使用以下代码。这个代码会比较两列中的每个单元格,并在第三列显示相同的内容,或者高亮显示相同的单元格。 ### 提取两列中相同的内容 ```vba Sub ExtractCommonValues() Dim ws As Worksheet Dim rngA As Range, rngB As Range, cellA As Range, cellB As Range Dim result As Range Dim dict As Object S ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wdpjplc 发表于 2024-9-23 10:51
这个也可以啊
要在Excel中使用VBA提取两列中的相同内容或高亮显示相同的文字,可以使用以下代码。这个代码会比较两列中的每个单元格,并在第三列显示相同的内容,或者高亮显示相同的单元格。

### 提取两列中相同的内容

```vba
Sub ExtractCommonValues()
    Dim ws As Worksheet
    Dim rngA As Range, rngB As Range, cellA As Range, cellB As Range
    Dim result As Range
    Dim dict As Object
   
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你的工作表名称
    Set rngA = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
    Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
    Set result = ws.Range("C1") ' 结果输出到C列
    Set dict = CreateObject("Scripting.Dictionary")
   
    ' 将A列内容添加到字典
    For Each cellA In rngA
        If Not dict.exists(cellA.Value) Then
            dict.Add cellA.Value, 1
        End If
    Next cellA
   
    ' 检查B列内容是否在字典中
    For Each cellB In rngB
        If dict.exists(cellB.Value) Then
            result.Value = cellB.Value
            Set result = result.Offset(1, 0)
        End If
    Next cellB
End Sub
```

### 高亮显示两列中相同的内容

```vba
Sub HighlightCommonValues()
    Dim ws As Worksheet
    Dim rngA As Range, rngB As Range, cellA As Range, cellB As Range
   
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你的工作表名称
    Set rngA = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
    Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
   
    ' 清除之前的高亮
    rngA.Interior.ColorIndex = xlNone
    rngB.Interior.ColorIndex = xlNone
   
    ' 比较两列并高亮相同的单元格
    For Each cellA In rngA
        For Each cellB In rngB
            If cellA.Value = cellB.Value And cellA.Value <> "" Then
                cellA.Interior.Color = RGB(255, 255, 0) ' 黄色高亮
                cellB.Interior.Color = RGB(255, 255, 0) ' 黄色高亮
            End If
        Next cellB
    Next cellA
End Sub
```

### 使用方法
1. 打开Excel并按 `Alt + F11` 进入VBA编辑器。
2. 插入一个新模块 (`Insert > Module`)。
3. 将上述代码复制并粘贴到模块中。
4. 关闭VBA编辑器并返回Excel。
5. 按 `Alt + F8` 打开宏对话框,选择相应的宏 (`ExtractCommonValues` 或 `HighlightCommonValues`),然后点击“运行”。

希望这些代码能帮到你!如果有任何问题或需要进一步的帮助,请随时告诉我。&#128522;

fuxingjun674 发表于 2024-9-23 13:30
本帖最后由 fuxingjun674 于 2024-9-23 14:21 编辑

chatGPT 回答的!!希望能解决你的要求!
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub ExtractMatchingValues()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim dict As Object
    Dim col1 As Range, col2 As Range
    Dim resultCol As Range
    Dim value As Variant
 
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你要操作的工作表名称
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 假设数据从第一列开始,可以根据实际情况修改
 
    ' 将两列存放到 Range 对象中
    Set col1 = ws.Range("A1:A" & lastRow) ' 第一列的范围
    Set col2 = ws.Range("B1:B" & lastRow) ' 第二列的范围
 
    ' 创建一个字典用于存放相同的数值
    Set dict = CreateObject("Scripting.Dictionary")
 
    ' 创建一个新列来存放结果
    Set resultCol = ws.Cells(1, 3)  ' 放到第三列,可以根据实际情况修改
 
    ' 遍历第一列,将值存放到字典中
    For i = 1 To lastRow
        dict(col1.Cells(i, 1).Value) = True
    Next i
 
    ' 遍历第二列,如果值在字典中存在,则写入到新列中
    For i = 1 To lastRow
        If dict.Exists(col2.Cells(i, 1).Value) Then
            resultCol.Cells(i, 1).Value = col2.Cells(i, 1).Value
        End If
    Next i
 
    ' 释放对象
    Set dict = Nothing
    Set resultCol = Nothing
    Set col1 = Nothing
    Set col2 = Nothing
    Set ws = Nothing
End Sub

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Amarry + 1 + 1 用心讨论,共获提升!

查看全部评分

zengyi2020 发表于 2024-9-23 13:32
xiugou 发表于 2024-9-23 13:49
很少用VB了, 确实很强。
kingc138 发表于 2024-9-23 15:19
有没有模板发个过来,要达成什么效果在模板里面标注清楚。
kingc138 发表于 2024-9-23 15:20
fuxingjun674 发表于 2024-9-23 13:30
chatGPT 回答的!!希望能解决你的要求!
[mw_shl_code=asm,true]Sub ExtractMatchingValues()
    Dim w ...

有没有调试一下?能不能正常运行,
fuxingjun674 发表于 2024-9-23 15:32
kingc138 发表于 2024-9-23 15:20
有没有调试一下?能不能正常运行,

当然有调式过
解决第一,二列相同内容的,提取至第三列
 楼主| yeyazi520 发表于 2024-9-25 10:52
wdpjplc 发表于 2024-9-23 18:24
这个也可以啊
要在Excel中使用VBA提取两列中的相同内容或高亮显示相同的文字,可以使用以下代码。这个代码 ...

好像提示出错了,是不是那一步不对呢

提示错误

提示错误
wdpjplc 发表于 2024-9-25 11:05
这个是对比的sheet1 中a列和和b列的内容 一个提取到c列中 另一个是高亮a列中重复的,我用的2016 office测试正常,你用的什么版本? 可以调试看看哪一步出错了? 确保a列和b列中有数据
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-5 15:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表