我正在使用VLookup函数,它查找列中存在的多个值.这非常有效,但只需要花费很多时间,因为我在Excel工作表中有100,000行.
有没有办法加快这个代码?
代码基本上在列中查找特定值并获取偏移量.简单的VLookup与此之间的区别在于,如果有多个行具有相同的查找值,则它将获取所有元素.
Function VLookupAll(ByVal lookup_value As String, _
ByVal lookup_column As Range, _
ByVal return_value_column As Long, _
Optional seperator As String = ", ") As String
Dim i As Long
Dim result As String
For i = 1 To lookup_column.Rows.Count
If Len(lookup_column(i, 1).Text) <> 0 Then
If lookup_column(i, 1).Text = lookup_value Then
result = result & (lookup_column(i).Offset(0, return_value_column).Text & seperator)
End If
End If
Next
If Len(result) <> 0 Then
result = Left(result, Len(result) - Len(seperator))
End If …Run Code Online (Sandbox Code Playgroud) 假设我的数据集如下:
John NA kaira
carry John NA
maya Sam maya
leo paty leo
tinker NA tinker
fabo leo maya
Run Code Online (Sandbox Code Playgroud)
我有另一个数据集:
John 1
carry 2
maya 3
leo 4
tinker 5
fabo 6
sam 7
paty 8
kaira 9
Run Code Online (Sandbox Code Playgroud)
我想将上表(df2)的值与第一个表(df1)匹配,所以我的最终表(df)如下所示:
1 NA 9
2 1 NA
3 7 3
4 8 4
5 NA 5
6 4 3
Run Code Online (Sandbox Code Playgroud) 我发现这个 VBA 能够使用一个条件将所有匹配的值返回到一个单元格中进行匹配:
Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
'Update 20150310
Dim rng As Range
Dim xResult As String
xResult = ""
For Each rng In pWorkRng
If rng = pValue Then
xResult = xResult & " " & rng.Offset(0, pIndex - 1)
End If
Next
MYVLOOKUP = xResult
End Function
Run Code Online (Sandbox Code Playgroud)
但是我需要这个 VLOOKUP 来返回与多个匹配条件相比的值。
任何想法如何升级?
谢谢。更新如下:
我需要公式来返回 A1-1A 和 A.0002 匹配的单元格中的值。结果应该是8 3
在过去的一年里,我已经熟练掌握了Excel,我已准备好进行下一步并开始使用VBA.
我尝试实现以下目标:我想创建一个可以Vlookups从不同数据源运行多个工具的工具,并将所有数据合并为一个综合概述.
vlookup在worksheet1使用来自数据worksheet2vlookup在一秒钟内vlookup使用的新参考数据worksheet3现在我尝试使用以下代码:
Dim i As Long, r As Long
r = 4
For i = 1 To 10000
On Error Resume Next
Cells(r, 9).Value = WorksheetFunction.VLookup(Cells(r, 7).Value, Sheets("SPdata").Range("A3:V30321"), 9, 0)
Cells(r, 11).Value = WorksheetFunction.VLookup(Cells(r, 7).Value, Sheets("SPdata").Range("A3:V30321"), 11, 0)
Cells(r, 10).Value = WorksheetFunction.VLookup(Cells(r, 9).Value, Sheets("CREBS").Range("C2:D300"), 2, 0)
r = r + 1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我尝试使用Cells(r, 9)第三个vlookup中的结果来匹配工作表CREBS中的数据.我遇到的问题是第3个vlookup不会产生任何结果.
此外,On Error Resume Next作品很棒,但我想填补空白"不可用"
正如我所说,我对此很陌生.我的方法可能不是最有效的,但如果有人可以帮我解决问题/或者可以提出更有效的代码,我将非常感激.
我有一个看起来像这样的表,我想使用 VLOOKUP 之类的东西来查找非空的第二列值。
一个例子是:
VLOOKUP("Kiwi", Range A:B, 2, 0) 应该返回绿色
VLOOKUP("Apple", Range A:B, 2, 0) 应该返回红色
VLOOKUP("Pineapple", Range A:B, 2, 0) 应该返回 Yellow
请注意,第一次出现的 Pineapple 是空的,但它仍然应该返回 Yellow。而且我不必使用 VLOOKUP,我也对其他方法持开放态度。
我会感谢帮助。
谢谢你。
我知道这个问题已经被问过很多次了,但我还没有找到适合我情况的答案。我尝试过使用 INDEX 和 TRUE 值,但它似乎对我不起作用。我还尝试更改列(日期,然后是项目和成本),但无济于事。
我正在使用 GOOGLE 表格。
该工作簿有两张纸,这张纸称为“参考”。它所称的那个叫“销售”。数据未按项目排序,但按日期排序,但可能存在重复实例。我正在使用这个公式:
=VLOOKUP(A2,Sales!A:C,3,false)
Run Code Online (Sandbox Code Playgroud)
它有效,但它调用了第一个值。我需要最新的值。它需要遍历整个 COLUMN 来搜索该值,然后返回第三列上对应的(最新)值。两张表都有 ITEM 栏;参考的目的是检查销售表中是否存在与现有项目匹配的项目,如果存在,则参考最新值“COST”。由于 ITEM 和 COST 的许多实例都具有不同的值,因此我需要调用最新的数字。
此外,我还有另一个公式,它从另一个工作簿中的另一个工作表调用数据,它几乎执行相同的操作:
=VLOOKUP(A2,importrange("https://docs.google.com/spreadsheets/d/URL/","Sales!A:C"),3,false)
Run Code Online (Sandbox Code Playgroud)
同样,它的作用是获取我需要的值,而不是最新值。该表的格式如下:
(SALES)
ITEM DATE COST
A2 B2 C2
A3 B3 C3
Run Code Online (Sandbox Code Playgroud)
参考表是这样的:
(REFERENCE)
ITEM LOOKUP
A2 B2
A3 B3
Run Code Online (Sandbox Code Playgroud)
您能提供的任何帮助将不胜感激。
我有一个主数据框和三个较小的数据框。最终,我想在主数据框中创建一个新列,指示每行是否满足两个条件。
为了简单起见,我只包含了较小的数据帧之一。
data = [['Tom', 10], ['Nick', 15], ['Juli', 14], ['Tom', 7], ['Juli', 9]]
main_df = pd.DataFrame(data, columns=['A', 'B'])
A B
0 Tom 10
1 Nick 15
2 Juli 14
3 Tom 7
4 Juli 9
data1 = [[5, 'Juli'], [17, 'Tom'], [6, 'Juli'], [8,'Tom']]
df1 = pd.DataFrame(data1, columns=['AA', 'BB'])
AA BB
0 5 Juli
1 17 Tom
2 6 Juli
3 8 Tom
Run Code Online (Sandbox Code Playgroud)
我希望我的最终数据框看起来像这样:
A B …Run Code Online (Sandbox Code Playgroud) 我有不同的,例如,语言相同的id,并希望Vlookup或索引,匹配或其他方式来找到正确的翻译行,并显示该行的相应的ID号.我可以使用1个列表,但以3种语言为例.
如何找到正确的翻译号码并获得正确的号码?
我尝试使用VLOOKUP函数预处理一些excel文档.
免责声明:这不是我需要处理的真实数据,而是一些具有相同问题的演示数据!

左列的vlookup函数是
=VLOOKUP(B7;$D$6:$E$10;2;1)
Run Code Online (Sandbox Code Playgroud)
对于正确的一个是
=VLOOKUP(K11;$M$8:$N$13;2;1)
Run Code Online (Sandbox Code Playgroud)
(当然,第一个数字正在改变,B7,B8,...... K11,K12 ......)
怎么了:
在左侧,出现没有键,但是是.
在lidija的右侧,值应为j而不是y.
即使我在网上搜索了很多,我也找不到有什么问题.
有人认为(从图片和描述中很明显)我已经检查过:
(并且它被称为最常见的问题)
我锁定了单元格(参见上面的代码)
密钥存在 - 您可以在表中看到密钥,我可以通过复制和粘贴来完成
这不是空间问题(我检查没有一个单元格末尾有空格)