求大佬指导 初学vba 卡住啦
vba吧
全部回复
仅看楼主
level 1
用同一个workbook中sheet1的A列7行开始以下所有的vendor code在sheet2的内容中搜索 如果没有这个code 就pass
如果有 继续判断该code的h列内容是否为JQ 、不是的话pass。是的话 要提示(比如整列标红)、完全没思路呀 大佬们 [泪]
2024年07月03日 09点07分 1
level 5
不知道你代码写到哪步了,具体卡在哪里不会;其实你说的就是思路,只要按照思路一步步实现就行了;用sheets("工作表名称")引用对应工作表,定义一个变量i用for做循环,用range("数据范围")引用对应单元格,用range的value属性可以取到单元格的值,用range的find方法可以查找有对应值的单元格,用range的row属性可以获得单元格所在行,判断用if单元格值="要比较的值",用range的entirecolumn属性引用单元格所在的整列,用range的interior的colorindex属性来设置单元格背景色,循环到有数据的最后一行就行了,可以用range的end(xlup)方法获得,如果有不明白的可以百度搜对应属性或方法的使用方法,另外善用录制宏功能可以让你事半功倍。
2024年07月03日 11点07分 2
感谢 指导!
2024年07月04日 08点07分
我发了我写的内容 但运行不了 求帮助[泪]
2024年07月04日 08点07分
@一隻蠟筆℃º “Ai.value”只是一个普普通通的字符串,你想要的,应该是单元格的值,那就不能这样写,应该是cells(i,"A").Value
2024年07月08日 00点07分
@一隻蠟筆℃º 另外,Find没有结果时返回null,你不判断就会报错。楼上兄弟说的装进字典,我个人觉得更好,比Find好操作
2024年07月08日 01点07分
level 1
绞尽脑汁 写成这样 大佬们请开喷吧 完全运行不了 好像这个赋值不对
2024年07月04日 08点07分 3
level 1
Range("Ai") 是什么
dlfh类型的类型是 string? range?
那个d是要干啥
2024年07月04日 10点07分 4
level 5
Option Explicit
Sub CheckJQ()
  Dim VenderCodeSheet As Worksheet, FindSheet As Worksheet, Row As Long, VenderCode As String, FindCell As Range, FirstFindCellAddress As String
  Set VenderCodeSheet = Sheets(1) '设置CenderCode所在表
  Set FindSheet = Sheets(2) '设置要查找的表
  With VenderCodeSheet
    For Row = 7 To .Range("A" & .Rows.Count).End(xlUp).Row '从第7行开始循环,直到A列不为空的最后一行
      VenderCode = .Range("A" & Row).Value '取A列当前行的VenderCode值
      With FindSheet.UsedRange '设置查找范围
        Set FindCell = .Find(VenderCode) '执行查找
        If Not FindCell Is Nothing Then '如果找到了
          FirstFindCellAddress = FindCell.Address '保存第一个找到的单元格地址
          Do '循环查找
            If .Range("H" & FindCell.Row).Value = "JQ" Then '判断找到的单元格同行的H列是否为JQ
              FindCell.EntireColumn.Interior.Color = vbRed '如果是就标记找到的单元格整列背景为红色
            End If
            Set FindCell = .FindNext(FindCell) '从当前位置继续查找
          Loop Until FindCell.Address = FirstFindCellAddress '直到回到第一个找到的单元格为止
        End If
      End With
    Next Row
  End With
  MsgBox "VenderCode查找完毕"
End Sub
2024年07月04日 10点07分 5
图片中的代码好像和1楼说的需求不太一样,就不细看了,直接按1楼需求写了一个示例,你参考着看看
2024年07月04日 10点07分
不定类型的对象,尽量先赋值给指定类型对象后再使用,这样对象有什么属性什么过程需要哪些参数会有提示,会省不少力气;如果想练习盲打,就另当别论了,就是新手期会比较痛苦
2024年07月04日 10点07分
拼接字符串也算新手期容易犯的错误,引号里面是常量,外面是变量,用&或+连接,多练习练习理解了就好多了;其实复杂字符串谁拼都容易出错,所以很多语言都有模板语法来简化拼接操作,不过vba应该没什么机会享受就是了
2024年07月04日 10点07分
@娜乌_西卡 真的十分感谢
2024年07月08日 07点07分
level 6
把表2数据写入字典,然后循环表1,就直接得出结果了。
2024年07月05日 14点07分 6
level 6
不知道你要匹配表2的哪一列数据。
2024年07月05日 14点07分 7
level 1
这个bug 怎么解决呀
2024年07月08日 07点07分 8
.Rows改成Row
2024年07月08日 08点07分
level 1
@娜乌_西卡 这里报了bug、另外上一句 取下端单元格的话 是不是应该xldown呀
2024年07月08日 08点07分 9
能保证数据肯定有多条,并且都连续,中间没空行的话,也可以从表头行或第一行数据开始用xldown,但是一旦数据为空或只有一条的话,就会出错定位到其他行了,所以一般保险起见,还是从最后一行往上用xlup,当然了,如果表格所有行都被用尽了或者有效数据后有干扰行,用xlup也会出错,那就看具体情况了
2024年07月08日 09点07分
level 6
Sub q47436528()
Dim arr, d, i, s
Set d = CreateObject("scripting.dictionary")
arr = ThisWorkbook.Sheets("sheet2").UsedRange
For i = 2 To UBound(arr)
If arr(i, 1) = "" Then GoTo line
d(arr(i, 1)) = arr(i, 8)
line:
Next i
arr = ThisWorkbook.Sheets("sheet1").UsedRange
For i = 7 To UBound(arr)
s = arr(i, 1)
If s = "" Then GoTo line1
If Not d.exists(s) Then GoTo line1
If d(s) = "JQ" Then
Cells(i, 1).Interior.ColorIndex = 6
End If
line1:
Next i
End Sub
2024年07月09日 13点07分 10
level 3
Sub CompareAndHighlightUsingDictionary()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow1 As Long
Dim lastRow2 As Long
Dim i As Long
Dim key As Variant
Dim dict As Object
' 设置工作表
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
' 获取两个工作表中最后一行的行号
lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
' 创建字典对象
Set dict = CreateObject("Scripting.Dictionary")
' 将表二的A列和B列数据存入字典
For i = 1 To lastRow2
key = ws2.Cells(i, 1).Value & "|" & ws2.Cells(i, 2).Value
dict(key) = i
Next i
' 遍历表一的数据,进行比较并标记
For i = 1 To lastRow1
key = ws1.Cells(i, 1).Value & "|" & ws1.Cells(i, 2).Value
If dict.exists(key) Then
' 标记表一和表二的相同行为红色
ws1.Rows(i).网页链接 = RGB(255, 0, 0)
ws2.Rows(dict(key)).网页链接 = RGB(255, 0, 0)
End If
Next i
End Sub
2024年07月13日 15点07分 11
1