我有点像Excel菜鸟,所以请耐心等待。我有以下删节表:
const myArray = [
{
"id":25,
"name":"Anakin Skywalker",
"createdAt":"2017-04-12T12:48:55.000Z",
"updatedAt":"2017-04-12T12:48:55.000Z"
},
{
"id":1,
"name":"Luke Skywalker",
"createdAt":"2017-04-12T11:25:03.000Z",
"updatedAt":"2017-04-12T11:25:03.000Z"
}
]
const myOrderedArray = _.sortBy(myArray, o => o.name)
在同一个文件中的另一张表引用名称:
Sheet1
H AP AO
1 Transaction Description Employee Name Type
2 ER 12345678 blank blank
3 ER 13182984 blank blank
4 ER 18213289 blank blank
5 ER 13829429 blank blank
6 ER 89234024 blank blank
我想知道如何从第二张表的匹配报告编号中有效填写第一张excel表的员工姓名和类型列:
Sheet2
E I
1 Expense Report Number Employee Name
2 12345678 Chris Rock
3 13182984 Hank Hill
4 18213289 Tom Sawyer
5 13829429 Elon Musk
6 89234024 Tupac Shakur
到目前为止我的尝试:
Sheet1
H AP AO
1 Transaction Description Employee Name Type
2 ER 12345678 Chris Rock A
3 ER 13182984 Hank Hill A
4 ER 18213289 Tom Sawyer A
5 ER 13829429 Elon Musk A
6 ER 89234024 Tupac Shakur A
正如你所看到的,我在这段代码中很遗憾..非常感谢任何帮助
答案 0 :(得分:1)
在Sheet1的表格中,如果8位数字始终从位置4开始,如您所示,您可以使用下面公式中的MID
函数。如果没有,我们只需将MID
更改为更复杂的内容,具体取决于实际数据。除非文本分析复杂,否则无需REGEX。
根据查找表中Employee Name
和Expense Report Number
的顺序,INDEX(MATCH(...
将成为一种解决方案。
虽然您可以使用LOOKUP
,但使用INDEX(MATCH...
可能更有效。除其他事项外,LOOKUP
要正常工作,需要对查找表进行排序。 INDEX/MATCH
没有必要这样做。
像
这样的东西=INDEX(EmployeeName,MATCH(--MID(H2,4,8),ExpenseReportNumber,0))
为了提高效率,对两列(EmployeeName
和ExpenseReportNumber
)的引用应尽可能短。整个列引用(例如:$E:$E
和$I:$I
将起作用,但执行时间会更长。
答案 1 :(得分:1)
试试这个测试代码
Sub Test()
Dim ddd As Variant ' convert sheet1.columnH into an array
ddd = Sheets("Sheet1").Range("h2:h6").Value ' 2D array 1 x N
ddd = Application.Transpose(ddd) ' 2D array N x 1
ddd = Application.Transpose(ddd) ' this changes to 1D array
Dim i As Integer
For i = 0 To UBound(ddd) ' remove the "ER" from each member of the array
ddd(i) = Split(ddd(i))(1)
Next i
Dim findMe As String
Dim rng As Range
For Each rng In Sheets("Sheet2").Range("e2:e6")
findMe = rng.Value
For i = 1 To UBound(ddd)
If StrComp(findMe, ddd(i), vbTextCompare) = 0 Then
Sheets("Sheet1").Range("ap1").Offset(i) = rng.Offset(0, 4).Value
Sheets("Sheet1").Range("ao1").Offset(i) = "A"
End If
Next i
Next rng
End Sub