Excel 如何使用数组替换值&;射程?
我可以通过一个接一个地提及这些值来替换它们 我想将(oldarray)替换为(newarray),因为它们都是从范围派生的。 i、 e.oldarray=(“a2:a5”)和newarray=(“b2:b5”),而不是逐个编写它们 我还需要用相邻的单元格值替换每个旧值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
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答案。