所以一点介绍: 我有一张约15或16张的工作簿。这些数据是住在我酒店的人的日志,因此每张床单都以客人住宿的名称和年份(即2017年3月)命名,并有4列(客人姓名,入住日期,退房日期,房间)。 在另一张名为“Dados”的表格中,我有每位客人给我们的评论。现在,此评论数据通过用户表单通过用户插入。
我想做什么: 用户在表单中引入的每个评论,都会在月份表中查看来宾的信息。
我尝试运行Vlookup但失败了,因为我的问题是用户有时只会引入来宾的姓氏,并且在客人名称的单元格中我们会有类似“john Smith”的内容
我通过谷歌查看,发现这可能是通过“喜欢”命令完成的,但这并不是找到匹配。这是我目前编译的代码:
Option Explicit
Sub Data()
Dim ws As Worksheet
Dim wn As Worksheet
Dim sh As Worksheet
Dim shName As String
Dim cData As Variant
Dim sLastRow As Long, s As Long
Dim lLastRow As Long, j As Long
Dim LastRow As Long, i As Long
Set ws = ThisWorkbook.Worksheets("Dados")
Set wn = ThisWorkbook.Worksheets("List")
lLastRow = Cells(wn.Rows.Count, "D").End(xlUp).Row + 1
With ws
LastRow = Cells(.Rows.Count, "A").End(xlUp).Row + 1
For i = 1 To LastRow
For j = 2 To lLastRow
shName = wn.Cells(j, 4).Value
Set sh = Worksheets(shName)
sLastRow = Cells(sh.Rows.Count, "A").End(xlUp).Row + 1
For s = 2 To sLastRow
If sh.Cells(s, 1) Like "*" & .Cells(i, 1) & "*" Then cData = sh.Cells(s, 3)
If IsDate(cData) = True Then Exit For
Next s
If IsDate(cData) = True Then Exit For
Next j
Next i
End With
End Sub
在工作表“列表”中,我有通过另一个子工作表生成的所有工作表的列表。 (因为它运行得很好所以我不会打扰你这个代码)这样我就可以将客人名称与所有表格进行比较。这个数字是:
lLastRow = Cells(wn.Rows.Count, "D").End(xlUp).Row + 1
首先,我想为我的代码粗糙道歉,我一直在学习自己编写vba代码。其中大部分来自此处和其他网站的帖子。
如果你们中的任何一个人能帮助我完成这项工作,我很高兴。这样:
If sh.Cells(s, 1) Like "*" & .Cells(i, 1) & "*" Then cData = sh.Cells(s, 3)
没有让我在比赛中的任何地方。
处理代码所花费的时间也是巨大的,你可以想象,如果你们能够提供一种更简单的方法来实现这一目标,我将非常感激(我已经在互联网上无处不在,无处可寻找任何更简单的东西)
提前致谢, 佩德罗
答案 0 :(得分:0)
您可以使用InStr函数在字符串中查找字符串。 InStr(1,sh.Cells(s,1),. Cell(i,1),1)。这将返回一个数值。
If InStr(1, UCase(sh.Cells(s, 1), UCase(.Cells(i, 1)) <> 0 Then cData = sh.Cells(s, 3)
答案 1 :(得分:0)
您的Like
支票没问题
但您必须明确且正确地限定要引用的工作表对象
这样:
lLastRow = Cells(wn.Rows.Count, "D").End(xlUp).Row + 1
变为:
lLastRow = wn.Cells(wn.Rows.Count, "D").End(xlUp).row + 1
和
sLastRow = Cells(sh.Rows.Count, "A").End(xlUp).Row + 1
变为:
sLastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).row + 1
答案 2 :(得分:0)
我使用Instr和LCase进行字符串搜索。 LCase使搜索案例不敏感。
If InStr(1, LCase(sh.Cells(s, 1), LCase(.Cells(i, 1)) Then cData = sh.Cells(s, 3)