Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel中,是否有方法使用公式、vb或c添加行或移动行_Excel_Vba_Sorting - Fatal编程技术网

在excel中,是否有方法使用公式、vb或c添加行或移动行

在excel中,是否有方法使用公式、vb或c添加行或移动行,excel,vba,sorting,Excel,Vba,Sorting,我有一个excel表格,其中有一个有序文本列和一个MoveToRow列。表的顺序正确,但我需要通过使用MoveToRow列在值之间添加空行来分隔行 例: excel中是否有方法使用公式或vb或c代码将动物字段移动或复制到第二列中列出的所需行 结果: 1. 2.cat 3.dog 4. 5.rat 或者,如果可能的话,我可以将MoveToRow列更改为InsertThismanyRowAfter列 我认为类似这样的代码会循环通过一个整数列,该列包含要插入的行数,低于当前行

我有一个excel表格,其中有一个有序文本列和一个MoveToRow列。表的顺序正确,但我需要通过使用MoveToRow列在值之间添加空行来分隔行

例:

excel中是否有方法使用公式或vb或c代码将动物字段移动或复制到第二列中列出的所需行

结果:

1.    
2.cat    
3.dog    
4.
5.rat
或者,如果可能的话,我可以将MoveToRow列更改为InsertThismanyRowAfter列

我认为类似这样的代码会循环通过一个整数列,该列包含要插入的行数,低于当前行数,如果值为0,则跳过该列,但如果值>=1,则插入该行数。但这并不能正常工作,因为它添加了太多的行,并且都在同一范围内。这里的逻辑哪里不正确

Sub Test1()
  Dim x As Integer
  Dim y As Integer
  Dim z As Integer
  ' Set numrows = number of rows of data.
  ' NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count
  NumRows = 100
  ' Select cell a1.
  Range("I1").Select
  ' Establish "For" loop to loop "numrows" number of times.
  For x = 1 To NumRows
     ' Insert your code here.
     ' Selects cell down 1 row from active cell.
     y = ActiveCell.Row
     z = ActiveCell.Value
     If z >= 1 Then
        Rows(y & ":" & y + z).Insert Shift:=xlShiftDown
        ActiveCell.Offset(1, 0).Select
     Else
        ActiveCell.Offset(1, 0).Select
     End If
  Next

End Sub

考虑到您发布的示例,这对我来说很好

Public Sub ReverseLoop()

Dim sht As Worksheet
Dim LastRow As Long
Dim r As String
Dim x As Long
Dim NumList As Variant  'Array
Dim RegExpObj As Object
Dim NumStr As Integer

Set sht = ActiveSheet

'Ctrl + Shift + End
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

'Loop Through 0-100 in Reverse Order
For x = LastRow To 1 Step -1

    strIn = Range("A" & x).Value

        Set RegExpObj = CreateObject("vbscript.regexp")
        With RegExpObj
            .Global = True
            .Pattern = "[^\d]+"
            NumStr = .Replace(strIn, " ")
        End With

    Cells(x, 1).EntireRow.Select
    Selection.Cut
    Cells(NumStr, 1).Select
    ActiveSheet.Paste

Next x

End Sub

是的,有办法如果这不是你期望的答案,那么你问错了问题。请注意,因为这不是免费的代码编写服务,所以有必要通过显示代码来显示您迄今为止所做的尝试、遇到的困难或错误,或者至少显示您所做的研究和努力。否则它只是要求我们为你做所有的工作。阅读可以帮助你改进你的问题。你也应该把你的范围缩小到一种语言。你在用VB吗?VBA?还是C?提示:这不能用公式完成。我用当前代码更新了原始帖子。
Public Sub ReverseLoop()

Dim sht As Worksheet
Dim LastRow As Long
Dim r As String
Dim x As Long
Dim NumList As Variant  'Array
Dim RegExpObj As Object
Dim NumStr As Integer

Set sht = ActiveSheet

'Ctrl + Shift + End
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

'Loop Through 0-100 in Reverse Order
For x = LastRow To 1 Step -1

    strIn = Range("A" & x).Value

        Set RegExpObj = CreateObject("vbscript.regexp")
        With RegExpObj
            .Global = True
            .Pattern = "[^\d]+"
            NumStr = .Replace(strIn, " ")
        End With

    Cells(x, 1).EntireRow.Select
    Selection.Cut
    Cells(NumStr, 1).Select
    ActiveSheet.Paste

Next x

End Sub