Excel 如何使用数组替换值&;射程?

Excel 如何使用数组替换值&;射程?,excel,vba,Excel,Vba,我可以通过一个接一个地提及这些值来替换它们 我想将(oldarray)替换为(newarray),因为它们都是从范围派生的。 i、 e.oldarray=(“a2:a5”)和newarray=(“b2:b5”),而不是逐个编写它们 我还需要用相邻的单元格值替换每个旧值 i、 e.a2替换为b2,a3替换为b3 可能吗 Sub ReplaceValues() Dim NewValues() As String Dim NewValues() As String

我可以通过一个接一个地提及这些值来替换它们

我想将(oldarray)替换为(newarray),因为它们都是从范围派生的。 i、 e.oldarray=(“a2:a5”)和newarray=(“b2:b5”),而不是逐个编写它们

我还需要用相邻的单元格值替换每个旧值
i、 e.a2替换为b2,a3替换为b3

可能吗

Sub ReplaceValues()
    
    Dim NewValues() As String
    Dim NewValues() As String
    
    OldValues = Split("BMV,MERCE", ",")
    NewValues = Split("Jack,Sally", ",")
    
    
    For i = 0 To UBound(OldValues)
        With sheets("destination").Columns("Z:Z")
        .Replace What:=OldValues(i), Replacement:=NewValues(i), LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True
        End With
        Next
        
End Sub

像这样的方法应该会奏效:

Sub-ReplaceValues()
标注旧值、新值、ws-As工作表
设置ws=Thisworkbook.worksheets(“配置”)或任意一张工作表。。。
OldValues=ws.Range(“A2:A5”).Value'这给出了一个2d数组
NewValues=ws.Range(“B2:B5”)。值“这也是
对于i=1到UBound(旧值,1)
带图纸(“目的地”)。列(“Z:Z”)
.替换内容:=旧值(i,1),替换:=新值(i,1)_
LookAt:=xlother,SearchOrder:=xlByRows,MatchCase:=True
以
下一个
端接头

下面的代码将A2:A6中的数据读取到一个数组
SrcArr
中,将B2:B6中的数据读取到另一个我称为
ModArr
的数组中。然后它创建第三个与源大小相同的数组(
OutArr
),并将
SrcArr
中的数据写入其中,并根据
ModArr
中的数据进行修改。最后,将
OutArr
写入D列。这是设置和结果

这是实现这一点的代码

Sub ReplaceArray()
    ' 138

    Dim SrcArr      As Variant              ' Source
    Dim ModArr      As Variant              ' Modifier
    Dim OutArr      As Variant              ' Output
    Dim R           As Long                 ' loop counter: rows
    
    With ActiveSheet
        SrcArr = .Range("A2:A6").Value
        ModArr = .Range("B2:B6").Value
        ReDim OutArr(1 To UBound(SrcArr), 1 To UBound(SrcArr, 2))
        
        For R = 1 To UBound(SrcArr)
            If ModArr(R, 1) = True Then
                OutArr(R, 1) = SrcArr(R, 1) * 12
            Else
                If IsEmpty(ModArr(R, 1)) Then
                    OutArr(R, 1) = "No data"
                Else
                    OutArr(R, 1) = 0
                End If
            End If
        Next R
        
        .Cells(2, "D").Resize(UBound(SrcArr), UBound(SrcArr, 2)).Value = OutArr
    End With
End Sub
搜索并替换(
应用程序.匹配
  • 如果在
    Search
    列(
    a
    )中找到
    Destination
    列(
    Z
    )中的值,则该值将替换为
    Replace
    列(
    B
    )中同一行的值
  • 此搜索(
    Application.Match
    )不区分大小写,即
    A=A
  • 调整常量部分中的值
  • 仅运行
    replaceValues
    ;其余的都被它调用了
代码

Option Explicit

Sub replaceValues()
    
    ' Define constants.
    
    ' Source
    Const srcName As String = "Sheet1"
    Const sFirst As String = "A2"
    Const rFirst As String = "B2"
    ' Destination
    Const dstName As String = "Sheet2"
    Const dFirst As String = "Z2"
    ' Workbook
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    ' Write from worksheets to arrays.
    
    Dim ws As Worksheet   ' Each Worksheet
    Dim rng As Range      ' Each Column Range
    ' Source
    Dim sData As Variant  ' Search Data Array
    Dim rData As Variant  ' Replace Data Array
    Dim ColOffset As Long ' Search and Replace Column Offset
    Set ws = wb.Worksheets(srcName)
    Set rng = getColumnRange(getCellRange(ws, sFirst))
    ColOffset = getCellRange(ws, rFirst).Column - rng.Column
    sData = getColumn(rng)
    rData = getColumn(rng.Offset(, ColOffset))
    ' Destination
    Dim dData As Variant  ' Destination Array
    Set ws = wb.Worksheets(dstName)
    Set rng = getColumnRange(getCellRange(ws, dFirst))
    dData = getColumn(rng)
    
    ' Search and replace (in arrays).
    
    Dim mData As Variant ' Match Data Array
    mData = Application.Match(dData, sData, 0)
    Dim cMatch As Variant
    Dim i As Long
    For i = 1 To UBound(dData, 1) ' or 'UBound(mData, 1)'
        cMatch = mData(i, 1)
        If IsNumeric(cMatch) Then
            dData(i, 1) = rData(cMatch, 1)
        End If
    Next i
    
    ' Write from Destination Array to Destination Range.
    
    rng.Value = dData

End Sub

Function getCellRange( _
    ws As Worksheet, _
    ByVal CellAddress As String) _
As Range
    On Error Resume Next
    Set getCellRange = ws.Range(CellAddress)
    On Error GoTo 0
End Function

Function getColumnRange( _
    FirstCell As Range) _
As Range
    If Not FirstCell Is Nothing Then
        With FirstCell
            Dim rng As Range
            Set rng = .Resize(.Worksheet.Rows.Count - .Row + 1)
            Set rng = rng.Find("*", , xlFormulas, , , xlPrevious)
            If Not rng Is Nothing Then
                Set getColumnRange = .Resize(rng.Row - .Row + 1)
            End If
        End With
    End If
End Function

Function getColumn( _
    rng As Range) _
As Variant
    If Not rng Is Nothing Then
        If InStr(rng.Address, ":") > 0 Then
            getColumn = rng.Value
        Else
            Dim Data As Variant
            ReDim Data(1 To 1, 1 To 1)
            Data(1, 1) = rng.Value
            getColumn = Data
        End If
    End If
End Function

@41686d6564我正在尝试逐单元格替换值,而不是(复制和粘贴)非常感谢:D这正是我所需要的。感谢您的时间和努力,请检查@VBASIC208答案。感谢您的时间和努力,请检查@VBASIC208答案。