真的需要您关于VBA的帮助

如何解决真的需要您关于VBA的帮助

我有三张纸:1)1张纸; 2)表2; 3)表3。 我想比较工作表1的A列和工作表2的B列。如果有相似的值,我不想打印这些值。我只想打印工作表2上的值,而不打印工作表3上的工作表1上的值。

我花了很多时间在此上,但是我什么都没想出来。

我在这里编写的代码在第3页上打印了公共值和唯一值。但是我不希望有公共值。如果您能帮助我,将不胜感激!

Sub GetUniques()
    Dim data1 As Long,data As Long,merged As Long
    Dim i As Long
    data = Cells(Rows.Count,"A").End(xlUp).Row
    data1 = Cells(Rows.Count,"C").End(xlUp).Row
    merged = 1

    For i = 1 To data1
        Cells(merged,"E").Value = Cells(i,"A").Value
        merged = merged + 1
    Next i
    For i = 1 To data1
        Cells(merged,"C").Value
        merged = merged + 1
    Next i

    Range("E:E").RemoveDuplicates Columns:=1,Header:=xlNo
End Sub

解决方法

如果您有O365,则可以使用类似的内容:

=LET(x,FILTER(Sheet2!B1:B1000,(Sheet2!B1:B1000<>"")* ISERROR(MATCH(Sheet2!B1:B1000,Sheet1!A1:A1000,0))),IF(x="","",x))

如果您拥有Excel 2007+,则可以使用:

=IFERROR(INDEX(Sheet2!B1:B1000,AGGREGATE(15,6,1/((Sheet2!B1:B1000<>"")*ISERROR(MATCH(Sheet2!B1:B1000,0)))*ROW($B$1:$B$1000),ROW(INDEX($A:$A,1):INDEX($A:$A,1000)))),"")

在某些版本中,您可能必须使用ctrl + shift + enter在多个行上以数组形式输入此公式;或使用INDEX函数显示返回数组的各个元素。

如果您必须具有vba解决方案,我建议

  • 将每一列读入vba数组(比在工作表中工作要快得多/
  • 使用Sheet1列A中的唯一条目创建字典D1
  • 在Sheet2列B中创建第二个项字典,其中不包括在D1中找到的任何项(或在sheet2中重复的项)
  • 在sheet3上输出结果

例如:

Option Explicit
Sub getUniques()
    Dim WS1 As Worksheet,WS2 As Worksheet,WS3 As Worksheet
    Dim V1 As Variant,V2 As Variant,vResults As Variant
    Dim D1 As Object,dResults As Object
    Dim V As Variant,I As Long
    
Set WS1 = ThisWorkbook.Worksheets("sheet1")
Set WS2 = ThisWorkbook.Worksheets("Sheet2")
Set WS3 = ThisWorkbook.Worksheets("Sheet3")

With WS1
    V1 = .Range(.Cells(1,1),.Cells(.Rows.Count,1).End(xlUp))
End With

With WS2
    V2 = .Range(.Cells(1,2),2).End(xlUp))
End With

Set D1 = CreateObject("Scripting.Dictionary")
    D1.CompareMode = TextCompare
    
    For Each V In V1
        If Not D1.Exists(V) Then D1.Add V,V
    Next V
    
Set dResults = CreateObject("scripting.dictionary")
    dResults.CompareMode = TextCompare
    
    For Each V In V2
        If Not D1.Exists(V) And Not dResults.Exists(V) Then dResults.Add V,V
    Next V
    
ReDim vResults(1 To dResults.Count,1 To 1)
I = 0
For Each V In dResults.Keys
    I = I + 1
    vResults(I,1) = V
Next V

Application.ScreenUpdating = False
With WS3.Range("M1").Resize(rowsize:=UBound(vResults))
    .EntireColumn.Clear
    .Value = vResults
    .EntireColumn.AutoFit
End With

End Sub

,

如果还没有let函数,则可以在工作表2的c列中使用此公式。如果在sheet1或sheet3的a列中找不到该值,它将说“唯一”,否则将重复。

使用Ctrl + Shift + Enter进入

=IF(OR(ISNUMBER(FIND(B1,Sheet1!A:A)),ISNUMBER(FIND(B1,Sheet3!A:A))),"duplicate","unique")
,

通过2数组Match()

比较工作表列

我只想打印在工作表2上而不是在工作表1上的值〜>在工作表3上。

我演示了两个数据字段数组的Match()比较, 其中base代表sheet2上的值,comp代表要与sheet1上进行比较的列。

结果数组是找到的duplo索引和Error 2042的混合,如果没有发现, 因此显示出一个独特的基础物品。因此,最终的数组可以通过简单的循环填充唯一性 只能拾取独特的物品。

请注意,此示例调用通过项目工作表的代码(名称)引用工作表。

Sub CompareSheetColumns()
'[1]get column data and assign them to arrays
    Dim base: base = getColRange(Sheet2,"B").Value
    Dim comp: comp = getColRange(Sheet1,"A").Value
'[2]compare both column values,where Sheet2 represents base data
    comp = Application.Transpose(Application.Match(base,comp,0))
'[3]get uniques
    Dim i As Long,ii As Long
    For i = 1 To UBound(comp)
        If IsError(comp(i)) Then    ' uniques stand out by Error 2042 instead of found index
            ii = ii + 1             ' increment uniques counter
            comp(ii) = base(i,1)   ' get unique item
        End If
    Next
    ReDim Preserve comp(1 To ii)    ' reduce to final count
'[4]write results to any target
    Sheet3.Range("M2").Resize(UBound(comp),1) = Application.Transpose(comp)
    
End Sub

帮助功能getColRange()

返回给定列的基于1的2维数据字段数组,并精简主代码以使其更具可读性:

Function getColRange(mySheet As Worksheet,_
                     Optional ByVal myColumn As Variant = "A",_
                     Optional ByVal Startrow As Long = 2) As Range
    With mySheet
        'a) get last row in given column
        Dim lastRow As Long
        lastRow = .Cells(.Rows.Count,myColumn).End(xlUp).Row
        'b) return data range as function result
        Set getColRange = .Range(myColumn & Startrow & ":" & myColumn & lastRow)
    End With
End Function

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res