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 如果单元格A1大于B1,则将行剪切并粘贴到第一个空行_Excel_Vba - Fatal编程技术网

Excel 如果单元格A1大于B1,则将行剪切并粘贴到第一个空行

Excel 如果单元格A1大于B1,则将行剪切并粘贴到第一个空行,excel,vba,Excel,Vba,如果列I1-I14中的单元格大于列J1-J14中的单元格,我希望剪切整行并将值粘贴到第一个空行。(从第16行及以下) 如果单元格i大于单元格j,则剪切行并将值粘贴到第一个空行(本例中为第16行) 此代码仅粘贴在第一行: Sub Knapp6_Klicka() 我想我会坚持多久 Dim j尽可能长 j=1 对于i=3到500 如果单元格(i,9).Value>单元格(i,10).Value则 单元格(i、12).全流道切割板材(“Blad1”).范围(“A”和“j”) j=j+1 如果结束 接下

如果列I1-I14中的单元格大于列J1-J14中的单元格,我希望剪切整行并将值粘贴到第一个空行。(从第16行及以下)

如果单元格i大于单元格j,则剪切行并将值粘贴到第一个空行(本例中为第16行)

此代码仅粘贴在第一行:

Sub Knapp6_Klicka()
我想我会坚持多久
Dim j尽可能长
j=1
对于i=3到500
如果单元格(i,9).Value>单元格(i,10).Value则
单元格(i、12).全流道切割板材(“Blad1”).范围(“A”和“j”)
j=j+1
如果结束
接下来我
端接头
我试着用两种不同的溶液混合糊状物

像这样的一个,我录制了一个宏,然后转到最后一个单元格,然后转到第一个空单元格:

范围(“A1048576”)。选择
选择。结束(xlUp)。选择
ActiveCell.Offset(1,0).范围(“A1”).选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
Application.CutCopyMode=False
我在Excel社区中找到了一个解决方案:

子比较结果()
将行1设置为整数
将行2设置为整数
第2行=1
对于第1行=8到500
如果sheet1.Cells(第1行,第11行).value>sheet1.Cells(第1行,第9行).value,则
sheet1.单元格(第1行,第1行).EntireRow.Copy Sheets(第11行).单元格(第2行,第1行)
第2行=第2行+第1行
如果结束
下一行1
端接头
试试这个

这是基于你给出的范围。跳过第1行,因为其中有标题

Dim i As Long, lRow As Long, ws As Worksheet

Set ws = Sheets("Blad1") 'Your sheet name
lRow = ws.Range("I" & Rows.Count).End(xlUp).Row + 1 'Finding the last row
If lRow < 16 Then lRow = 16 'The starting row you want to cut to

For i = 2 To 14 'Your range of rows to check
    If ws.Range("I" & i) > ws.Range("J" & i) Then
        ws.Range("I" & i).EntireRow.Cut ws.Range("A" & lRow) 'Cutting the whole row so you use column A to cut to
        lRow = lRow + 1 'Move down 1 row for where to cut to
    End If
Next i
如果列I1-I14中的单元格大于列J1-J14中的单元格,我希望剪切整行并将值粘贴到第一个空行。(第16行及以下)

这里有一个不在循环中剪切和粘贴的方法。由于您没有删除该行或“剪切并插入”该行,因此这里有一个简单的方法。下面的代码遵循一个基本逻辑

逻辑

  • 循环并确定范围
  • 如果找到,则在1 go中复制范围
  • 最后清除已复制的范围(如果已复制)
  • 代码

    Option Explicit
    
    Sub Sample()
        Dim ws As Worksheet
        Dim rngToCopy As Range
        Dim i As Long
        
        '~~> Change this to relevant sheet
        Set ws = Sheet1
        
        With ws
            '~~> Loop and identify the range
            For i = 2 To 14
                If .Range("I" & i).Value2 > .Range("J" & i).Value2 Then
                    If rngToCopy Is Nothing Then
                        Set rngToCopy = .Rows(i)
                    Else
                        Set rngToCopy = Union(rngToCopy, .Rows(i))
                    End If
                End If
            Next i
            
            '~~> If found then copy and clear
            If Not rngToCopy Is Nothing Then
                rngToCopy.Copy .Rows(16)
                rngToCopy.Clear
            End If
        End With
    End Sub
    
    编辑:

    合并新编辑

    很好用!谢谢!:)我未能充分描述我的问题。。我还需要将其粘贴为特殊(仅粘贴值,不粘贴公式)。你有什么快速的解决办法吗?-约翰5小时前

    替换

    rngToCopy.Copy .Rows(16)
    


    您的代码注定要失败,因为您没有考虑到您正在剪切找到的行。想想这意味着什么。包含In、Out的行是第15行,您希望粘贴到第16行。如果剪切第5行(例如),则第15行和第16行将成为第14行和第15行。这也意味着您的下一行(您认为将是第6行)实际上将是剪切前的第7行。

    我没有得到您真正想要在其上执行操作的行。你说检查1-14,然后削减到16,但你的代码从3或8开始,到500。您的第一次尝试也会粘贴到第1行,因为您设置了
    j=1
    。您需要找到我可以帮助的最后一行,但您的实际范围是什么?您需要计算列中的行数,我尝试以下操作<代码>范围(“A”和单元格(rows.count,“I”)。结束(xlup)。row+1)哇,谢谢!真的很感激!我现在唯一需要的就是贴上特殊的。。我完全忘了在我的帖子里解释那个部分。我所说的“post value”是指粘贴special,只粘贴值而不是forumlas。但现在我发现我的表述非常模糊!你知道如何解决这一部分吗?是的,我会很快改变。为了清楚起见,您只想剪切而不是删除行,对吗?因为您将留下空白行。当然,你可能出于你的目的想要它,但只是检查一下。太好了:)是的,我只是想把行剪掉,让它们空着。稍后我将尝试创建一个按钮来对行进行排序,或者尝试找出一种方法,使其使用与剪切和粘贴相同的按钮对行进行排序。先堆叠已填充的行,中间没有空行。但这是以后的一个项目:)您仍然可以在同一个子系统中执行,只需在循环完成后执行即可。如果要删除循环中的行(仅供参考),则需要向后执行。ie而不是
    对于i=1到10
    你可以
    对于i=10到1步骤-1
    。这是因为当您删除一行时,下面的行将上移1,因此在正常循环中,您将跳过它下面的行,因为它现在与您刚才删除的行位于同一位置。
    如果您剪切第5行(例如),那么第15行和第16行将变为第14行和第15行。
    否,这不是真的。剪切和粘贴时,直到在新目标处剪切和插入行时,才会删除该行。请参阅我文章的前两行。在剪切粘贴操作之后,如果粘贴的目标行是第16行?直到您没有在第16行中插入复制的行,这些行将不会移动。试试看:)@freeflow它是剪切和粘贴的,不会删除或插入行,因此行号不会改变。@freeflow正如Siddharth所说。你为什么不试试呢。剪切和粘贴时,如果插入,则仅删除剪切行。如果您在VBA中使用
    .cut
    ,则使用目标选项,它不会删除行。工作正常!谢谢!:)我未能充分描述我的问题。。我还需要将其粘贴为特殊(仅粘贴值,不粘贴公式)。你有什么快速的解决办法吗?是的。我已经更新了帖子。您可能需要刷新页面才能看到更新的帖子。
    rngToCopy.Copy .Rows(16)
    
    rngToCopy.Copy
    DoEvents
    .Rows(16).PasteSpecial Paste:=xlPasteValues