Vba 创建新列并基于另一列插入值
我需要帮助 目前,我需要优化编码方式和流程。有没有其他方法可以让我这样做?唯一区别数值的方法是从第一位到第二位。还有上百个超价值。正如您在代码中所看到的,99将被赋值为1042,95将被赋值为261,这将继续下去。我如何使它更容易,以便我必须手动输入值。提前感谢各位Vba 创建新列并基于另一列插入值,vba,excel,Vba,Excel,我需要帮助 目前,我需要优化编码方式和流程。有没有其他方法可以让我这样做?唯一区别数值的方法是从第一位到第二位。还有上百个超价值。正如您在代码中所看到的,99将被赋值为1042,95将被赋值为261,这将继续下去。我如何使它更容易,以便我必须手动输入值。提前感谢各位 Sub Netting() Dim Found As Range Dim LR As Long Dim ws As Worksheet Dim cell As Range Dim a As Variant, v As V
Sub Netting()
Dim Found As Range
Dim LR As Long
Dim ws As Worksheet
Dim cell As Range
Dim a As Variant, v As Variant
Set ws = Sheets("PAYABLES - OUTFLOWS")
Set Found = ws.Rows(1).Find(What:="Invoice amount", _
LookIn:=xlValues, lookat:=xlWhole)
If Found Is Nothing Then Exit Sub
a = [{"HI99162152",1042;"HI99162159",1042;"99162161",1042;"HI95400159",261; "HI95400164", 261; "HI97500493",3004;"HI97500497", 3004 }] 'create 2-d lookup array
LR = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
Found.Offset(0, 1).EntireColumn.Insert
ws.Cells(1, Found.Column + 1).Value = "Netting"
For Each cell In ws.Range(ws.Range("C2"), ws.Cells(LR, 3))
v = Application.VLookup(cell.Value, a, 2, False)
cell.EntireRow.Cells(Found.Column + 1).Value = IIf(IsError(v), "", v)
Next cell
End Sub
如果数组中有大量值,则将其作为工作表上的表进行管理可能更容易。使用
Mid(cell.value,3,2)
仅提取两位数字并将其传递给查找。如何实现这一点?很抱歉,我对VBAFrom完全是个新手,您发布的代码似乎不是这样的…只需编辑2d数组,使其仅包含两位代码及其映射值,然后根据该值查找Mid()的结果。我从多人那里得到了帮助。好吧,我试试看!谢谢!谢谢你,伙计。真的很感激!我有一个问题,如果我想把前两位数改成前三位数,我需要做什么改变?以备将来需要。num=Cstr(Mid(cell.Value,3,3))
Sub Netting()
Dim Found As Range
Dim LR As Long
Dim ws As Worksheet
Dim cell As Range
Dim a As Variant, v As Variant, num
Set ws = Sheets("PAYABLES - OUTFLOWS")
Set Found = ws.Rows(1).Find(What:="Invoice amount", _
LookIn:=xlValues, lookat:=xlWhole)
If Found Is Nothing Then Exit Sub
a = [{"99",1042;"95",261;"97",3004}] 'create 2-d lookup array
LR = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
Found.Offset(0, 1).EntireColumn.Insert
ws.Cells(1, Found.Column + 1).Value = "Netting"
For Each cell In ws.Range(ws.Range("C2"), ws.Cells(LR, 3))
num = Cstr(Mid(cell.Value, 3, 2))
v = Application.VLookup(num, a, 2, False)
cell.EntireRow.Cells(Found.Column + 1).Value = IIf(IsError(v), "", v)
Next cell
End Sub