根据行索引转换Excel列表

我试图在Excel VBA中转换一个列表,如下所示:

我原来的名单在一个灰色的颜色。 它显示了一个序列。 我想根据每个号码位置生成右侧的列表。

样本列表和输出

例如:
3是左边列表中的第二个 ,所以2是右边列表中的第三个位置;
6是左列表中的第四位 ,所以4位于右列表中的第六位置…

我尝试在VBA中使用“For”循环,但是它变得有点复杂,有没有办法通过在VBA中使用数组来实现呢?

这将工作,只需根据需要设置第一个,最后一个和范围。

 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 

一个公式可以轻松实现这一点。 假设数据在A1:A8中,在B1中复制下来:

 =MATCH(ROW(),A$1:A$8,0) 
 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