私は以下のINPUTを持っています。インデントされた階層リストを親メンバーに基づく列に分割する
私のINPUTデータには、列Aにはインデントレベルの異なるデータが含まれています。
基本的にコードはこの範囲で実行し、最も高いレベルのインデントをチェックし、最も高いレベルのインデントについてはマッピング2、3、および4の「マッピング1」ヘッダーとそれに続く下位レベルに配置する必要があります。
OUTPUT: ファイル名を指定して実行時エラー1004:私は下記の行に私にエラーを与えているコードを開発した
If currVal > arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
全体コード: -
Sub transposerowcolmulti()
Dim arr(1 To 8, 0 To 3) As Variant
Dim i As Long, j As Long
ActiveWorkbook.Sheets("Input").Activate
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 1) = range("A6").Offset(i, 0).Value
arr(i, 2) = IsBold(range("A6").Offset(i, 0))
arr(i, 3) = Level(range("A6").Offset(i, 0))
Next i
Dim k As Long, l As Long
Dim prevVal As Long, currVal As Long
k = 0
l = 0
ActiveWorkbook.Worksheets.Add
For i = LBound(arr, 1) To UBound(arr, 1)
If l = 0 Then
currVal = arr(i, 3)
l = l + 1
End If
If currVal = arr(i, 3) Then
ActiveCell.Offset(k, currVal - 1).Value = arr(i, 1)
End If
If currVal > arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
If currVal < arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
currVal = arr(i, 3)
k = i
Next i
End Sub
Function Level(Optional cCell As range)
' LEVEL returns the outline level of the current row. It will not automatically update and therefore
' a recalculation Ctrl-Alt-F9 is required.
If cCell Is Nothing Then
Set cCell = Application.Caller
End If
Level = cCell.Rows.IndentLevel
End Function
Function IsBold(ByVal Cell As range) As Boolean
IsBold = Cell.Font.Bold
End Function
この行をどのように変更するべきですか? – Stacey
私のコードが間違っていると、共有している出力が得られませんか?このコードの背後にある私のコンセプトは、2次元配列を作成し、インデントに基づいて行から列にデータを転置することです。 – Stacey
このコードを修正して、必要な結果を得るように提案してください – Stacey