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
Vba 创建行并将行添加到工作表_Vba_Excel - Fatal编程技术网

Vba 创建行并将行添加到工作表

Vba 创建行并将行添加到工作表,vba,excel,Vba,Excel,我对VBA编码相当陌生。我想设置一个模板,并希望创建一个查看B列的宏。然后为B中的不同输入创建新的工作表。最后,它会将值为“B1”的所有行拉入相应的工作表中 (例如,如果不清楚)B列包括值1和2。代码然后创建名为“1”和“2”的工作表。然后获取列B中包含1的所有行,并将它们放入工作表“1”,类似于值“2” 谢谢这就是我移动行的原因: Dim contract As String Imprt = Worksheets("ImportSheet").UsedRange.Rows.Count S

我对VBA编码相当陌生。我想设置一个模板,并希望创建一个查看B列的宏。然后为B中的不同输入创建新的工作表。最后,它会将值为“B1”的所有行拉入相应的工作表中

(例如,如果不清楚)B列包括值1和2。代码然后创建名为“1”和“2”的工作表。然后获取列B中包含1的所有行,并将它们放入工作表“1”,类似于值“2”


谢谢

这就是我移动行的原因:

Dim contract As String
Imprt = Worksheets("ImportSheet").UsedRange.Rows.Count
   Srtd = Worksheets(contract)"enter code here"
   If Srtd = 1 Then Srtd = 0
    For x = Imprt To 2 Step -1
        If Range("J" & x).Value = contract Then
            Rows(x).Cut Destination:=Worksheets(contract).Range("A" & Srtd + 1)
            Srtd = Srtd + 1
            Else:
        End If
    Next x
尝试下面的代码(代码内部的解释为注释):

选项显式
分页()
暗淡的光线和长的一样
作为对象的Dim Dict
变暗键作为变量
最后一排一样长
以工作表的形式显示
作为字符串的Dim ShtName
Set Dict=CreateObject(“Scripting.Dictionary”)
带有工作表(“导入表”)
'从第2行循环到最后一行,数据在列“B”中'
对于lRow=2到.Cells(.Rows.Count,“B”).End(xlUp).Row
'将唯一值从列B复制到字典中
如果不存在Dict.exists(.Range(“B”)和lRow.value),则
如果.Range(“B”&lRow).value”,则指定添加.Range(“B”&lRow).value、.Range(“B”&lRow).value
如果结束
下一条路
'为字典中的每个唯一键创建新工作表
对于Dict中的每个键
Worksheets.Add(之后:=Sheets(Sheets.Count)).Name=Key
下一键
'循环遍历B列中的所有单元格,并将每一行复制到相关工作表中
对于lRow=.Cells(.Rows.Count,“B”).End(xlUp)。行到2步骤-1
如果.Range(“B”和lRow).value“”则
ShtName=.Range(“B”&lRow).value
Set DestSht=工作表(ShtName)
LastRow=DestSht.Cells(DestSht.Rows.Count,“B”)。结束(xlUp)。行+1
.Rows(lRow).Copy Destination:=DestSht.Range(“A”和LastRow)
.Rows(lRow).删除xlShiftUp
如果结束
下一条路
以
端接头

it@fungrymonster“导入表”中是否有标题行(第1行)?那么这些值从第2行开始?是的,它们从第2行开始2@fungrymonster不客气,请注明答案。Y单击我答案旁边的V
Dim contract As String
Imprt = Worksheets("ImportSheet").UsedRange.Rows.Count
   Srtd = Worksheets(contract)"enter code here"
   If Srtd = 1 Then Srtd = 0
    For x = Imprt To 2 Step -1
        If Range("J" & x).Value = contract Then
            Rows(x).Cut Destination:=Worksheets(contract).Range("A" & Srtd + 1)
            Srtd = Srtd + 1
            Else:
        End If
    Next x
Option Explicit

Sub Sheet()

Dim lRow    As Long
Dim Dict    As Object
Dim Key     As Variant
Dim LastRow As Long
Dim DestSht As Worksheet
Dim ShtName As String

Set Dict = CreateObject("Scripting.Dictionary")

With Worksheets("ImportSheet")

    ' loop from row 2 until last row with data in Column "B"
    For lRow = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row          
        ' copy unique values from column B into dictionary
        If Not Dict.exists(.Range("B" & lRow).value) Then
            If .Range("B" & lRow).value <> "" Then Dict.Add .Range("B" & lRow).value, .Range("B" & lRow).value
        End If
    Next lRow

    ' create a new worksheet per unique key in Dictionary
    For Each Key In Dict
        Worksheets.Add(After:=Sheets(Sheets.Count)).Name = Key
    Next Key

    ' loop through all cells in Column B, and copy each row to relevant worksheet
    For lRow = .Cells(.Rows.Count, "B").End(xlUp).Row To 2 Step -1
        If .Range("B" & lRow).value <> "" Then
            ShtName = .Range("B" & lRow).value
            Set DestSht = Worksheets(ShtName)
            LastRow = DestSht.Cells(DestSht.Rows.Count, "B").End(xlUp).Row + 1
            .Rows(lRow).Copy Destination:=DestSht.Range("A" & LastRow)
            .Rows(lRow).Delete xlShiftUp
        End If
    Next lRow
End With

End Sub