根据行索引转换 Excel 列表
Converting an Excel list according to row indexes
我正在尝试按如下方式转换 Excel VBA 中的列表:
我原来的清单在灰色的那个。它显示了一个序列。
我想根据每个数字位置生成右边的列表。
例如:
3
在左侧列表中是 second 所以 2
在右侧列表中是 third 位置;
6
在左侧列表中 第四 所以 4
在右侧列表中 第六 位置 ...
我尝试在 VBA 中使用 'For' 循环,但它变得有点长和复杂,有没有办法通过在 VBA 中使用数组来实现?
一个公式就可以轻松实现。假设数据在 A1:A8,在 B1 并向下复制:
=MATCH(ROW(),A:A,0)
这会起作用,只需根据需要设置第一个、最后一个和范围。
Private Sub cbSort_Click()
Dim wArray As Variant, dArray As Variant
Dim first As Integer, last As Integer
Dim i As Integer, j As Integer
first = 1
last = 8
Set wArray = Range("A" & first & ":A" & last)
ReDim dArray(1 To last - first + 1, 1 To 1)
j = 1
For i = first To last
dArray(wArray(i, 1), 1) = j
j = j + 1
Next i
Range("B" & first & ":B" & last) = dArray
End Sub
Option Explicit
Sub Main()
Dim source As Range
On Error GoTo ErrTransformIt
Set source = Application.InputBox(prompt:="Source", Type:=8)
TransformIt source
Exit Sub
ErrTransformIt:
MsgBox Err.Description
End Sub
Private Sub TransformIt(ByVal source As Range)
Dim target As Range
Dim c As Range
Dim i As Integer
Dim firstRow As Long
firstRow = source(1).Row
i = 1
For Each c In source.Cells
Set target = ActiveSheet.Cells(firstRow + c.Value - 1, c.Column + 1)
If target.Value <> "" Then
MsgBox "Target is already used by [" & target.Value & "]", vbExclamation
Exit Sub
End If
target.Value = i
i = i + 1
Next c
End Sub
我正在尝试按如下方式转换 Excel VBA 中的列表:
我原来的清单在灰色的那个。它显示了一个序列。 我想根据每个数字位置生成右边的列表。
例如:
3
在左侧列表中是 second 所以 2
在右侧列表中是 third 位置;
6
在左侧列表中 第四 所以 4
在右侧列表中 第六 位置 ...
我尝试在 VBA 中使用 'For' 循环,但它变得有点长和复杂,有没有办法通过在 VBA 中使用数组来实现?
一个公式就可以轻松实现。假设数据在 A1:A8,在 B1 并向下复制:
=MATCH(ROW(),A:A,0)
这会起作用,只需根据需要设置第一个、最后一个和范围。
Private Sub cbSort_Click()
Dim wArray As Variant, dArray As Variant
Dim first As Integer, last As Integer
Dim i As Integer, j As Integer
first = 1
last = 8
Set wArray = Range("A" & first & ":A" & last)
ReDim dArray(1 To last - first + 1, 1 To 1)
j = 1
For i = first To last
dArray(wArray(i, 1), 1) = j
j = j + 1
Next i
Range("B" & first & ":B" & last) = dArray
End Sub
Option Explicit
Sub Main()
Dim source As Range
On Error GoTo ErrTransformIt
Set source = Application.InputBox(prompt:="Source", Type:=8)
TransformIt source
Exit Sub
ErrTransformIt:
MsgBox Err.Description
End Sub
Private Sub TransformIt(ByVal source As Range)
Dim target As Range
Dim c As Range
Dim i As Integer
Dim firstRow As Long
firstRow = source(1).Row
i = 1
For Each c In source.Cells
Set target = ActiveSheet.Cells(firstRow + c.Value - 1, c.Column + 1)
If target.Value <> "" Then
MsgBox "Target is already used by [" & target.Value & "]", vbExclamation
Exit Sub
End If
target.Value = i
i = i + 1
Next c
End Sub