【发布时间】:2016-05-26 14:09:34
【问题描述】:
如果在 Sheet1!A:A 上的字符串中找到 Sheet2!A2 值,则 Sheet1!"B2" = Offset(Sheet2!"A2",0,1) 即,我在 Sheet2 上有一个值范围,它们是 Sheet1 范围内值的一部分。如果在 Sheet1 上的值范围内找到 Sheet2 上的值,那么我希望我的结果是 Sheet1 上的相邻值是 Sheet2 的相邻值。 这在 VBA 中如何最好地完成?
这是我需要将公式合并到的代码: 代码现在可以正常工作了
Sub ListAllFiles()
Dim objShell As Object
Dim objFolder As Object
Dim objFile As Object
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
Dim myExt1 As String
Dim myExt2 As String
myExt1 = "pptx"
myExt2 = "pdf"
Set ws = Sheets("Sheet1")
Set objShell = CreateObject("Shell.Application")
'Get the folder object associated with the directory
Set objFolder = objShell.Namespace("\\sitefs\www\htdocs\c13\comm\IMS\Schedules\")
Dim objFolderItems As FolderItems
Dim objFolderItem As FolderItem
Set objFolderItems = objFolder.Items()
'Loop through the Files collection
Dim fOwner As String
Dim fAuthor As String
Dim dlm As String
ws.UsedRange.Clear
ws.Cells(1, 1).Value = "The current files found in " & objFolder & " are:"
ws.Cells(1, 2).Value = "Date Last Modified"
ws.Cells(1, 3).Value = "Owner"
ws.Cells(1, 5).Value = "Report Date:"
ws.Cells(1, 6).Value = Now
Range("A1").EntireRow.Font.Bold = True
For Each objFile In objFolder.Items
dlm = objFolder.GetDetailsOf(objFile, 3)
If InStr(objFile.Name, "FINAL") Then GoTo 50
If Year(CDate(dlm)) < Year(Now) Then GoTo 50
If InStr(objFile.Name, myExt1) Or InStr(objFile.Name, myExt2) Then
Dim x As Integer
x = ws.UsedRange.Rows.Count + 1
ws.Cells(x, 1).Value = objFile.Name
'Link cell to file
Cells(x, 1).Select
Selection.Hyperlinks.Add Anchor:=Selection, Address:=objFile.Path
ws.Cells(x + 0, 2).Value = dlm
End If
50 Next
'Added this and it's now working
Dim oRng As Range
Dim cRng As Range
x = ws.UsedRange.Rows.Count
Set oRng = Range("C2")
Set cRng = Range("C2:C" & x)
oRng.FormulaArray = _
"=OFFSET(INDEX(Sheet2!$A$2:$A$19,MATCH(TRUE,INDEX((ISNUMBER(SEARCH(Sheet2!$A$2:$A$19,a2))),),0)),,2)"
cRng.FillDown
Columns("A:B").Sort key1:=Range("B2"), _
order1:=xlDescending, Header:=xlYes
Columns.AutoFit
'Clean up!
Set objFolder = Nothing
Set objFile = Nothing
Set objFSO = Nothing
Set oRng = Nothing
Set cRng = Nothing
End Sub
【问题讨论】:
-
(您可以复制/粘贴您的 Sheet1 和 Sheet2 表格吗?它将帮助我们将数据放入 Excel 以帮助您!)
-
您在哪一行看到正在使用的公式?
-
@ScottCraner OP 说这是模仿您在下面询问的公式的代码。并不是真的试图将其合并到代码中。
-
@findwindow 在我阅读代码时,OP 正在加载 sheet1 列 A 与文件的链接。这就是代码当前正在做的事情。现在 OP 想弄清楚如何将这些文件名称中的关键字与另一个电子表格中的表匹配,并将电子表格 B 列中的值返回到工作表 1 的 B 列中。该部分不存在于上面的当前代码。不,不需要
>0,任何大于 0 的都将解析为 true。 -
您可以随时使用 Worksheet.Evaluate
Cells(x, 3).Value = ws.Evaluate("=INDEX(Sheet2!$B$2:$B$9,MATCH(TRUE,INDEX((ISNUMBER(SEARCH(Sheet2!$A$2:$A$9," & Cells(x, 1).Address(0,0) & "))),),0))")
标签: excel excel-formula vba