Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 835|回复: 2

[已解决]跳过栏位,后面所有空白数值往前补上

[复制链接]
发表于 2022-9-13 14:53 | 显示全部楼层 |阅读模式
本帖最后由 lkk0063 于 2022-9-16 14:56 编辑

1.檔案 "In"傳送資料至"Out", 跳过栏位,后面所有空白数值往前补上
2. 若要实现多个栏位,是否直接修改 i 的数量
If i = 5 Or i = 8 Or i = 9 Then GoTo 10

1.jpg

  1. <div class="cl" style="zoom: 1; color: rgb(0, 0, 0); margin-top: 15px;">Private Sub CommandButton2_Click()
  2.     Dim Arr, Brr, i&, j%, xE As Range
  3.     Arr = [A3:J17]
  4.     ReDim Brr(1 To 2, 1 To [A:bx].Columns.Count)
  5.     Brr(1, 1) = Split([G1], "-")(0) & "-FQC"
  6.     Brr(1, 2) = Year([C1])
  7.     Brr(1, 3) = [C1]
  8.     Brr(1, 4) = [E1]

  9.     For i = 0 To UBound(Arr) - 1
  10.         If i = 5 Or i = 9 Then GoTo 10
  11.         If i >= UBound(Arr) - 1 Then
  12.             For j = 5 To 6: Brr(1, i * 5 + j) = Arr(i + 1, j + 1): Next j
  13.         Else
  14.             For j = 5 To 9: Brr(1, i * 5 + j) = Arr(i + 1, j + 1): Next j

  15.         End If
  16. 10    Next i

  17.     Dim xN$, xB As Workbook, xS As Worksheet, xF As Range
  18.     xN = "Out.xlsm"
  19.     On Error Resume Next
  20.     Set xB = Workbooks(xN)
  21.     If xB Is Nothing Then Set xB = Workbooks.Open(ThisWorkbook.Path & "" & xN)
  22.     On Error GoTo 0
  23.     If xB Is Nothing Then MsgBox "can't find〔" & xN & "〕file": Exit Sub

  24.     Set xS = xB.Sheets("BB")
  25.     Set xF = xS.[A:A].Find(Split(Brr(1, 1), "-")(0), Lookat:=xlPart)
  26.     If Not xF Is Nothing Then MsgBox "Two lots": xB.Close 0: Exit Sub
  27.     Set xE = xS.[A65536].End(xlUp)(2)
  28.     If xE.Row < 6 Then Set xE = xE(2)
  29.     xE.Resize(2, UBound(Brr, 2)) = Brr
  30.     xB.Close 1
  31. End Sub</div>
复制代码


最佳答案
2022-9-14 18:03
本帖最后由 zjdh 于 2022-9-14 18:21 编辑

若要实现多个栏位,则直接修改 i 的数量
If i = 5 Or i = 8 Or i = 9  Or.......Then GoTo 10

若采用在k列做标记的话,就比较简单了。
假设跳过的行,在k列输入“F“,则

Private Sub CommandButton2_Click()
Dim Arr, Brr, i&, j%, xE As Range
Arr = [A3:K17]
ReDim Brr(1 To 2, 1 To [A:bx].Columns.Count)
Brr(1, 1) = Split([G1], "-")(0) & "-FQC"
Brr(1, 2) = Year([C1])
Brr(1, 3) = [C1]
Brr(1, 4) = [E1]
k = 0
For i = 0 To UBound(Arr) - 1

   If Arr(i+1, 11) = "F" Then GoTo 10
   
    If i >= UBound(Arr) - 1 Then
       For j = 5 To 6: Brr(1, k * 5 + j) = Arr(i + 1, j + 1): Next j
    Else
       For j = 5 To 9: Brr(1, k * 5 + j) = Arr(i + 1, j + 1): Next j
    End If
    k = k + 1
10     Next i
.................
End Sub



T.zip

79.34 KB, 下载次数: 3

发表于 2022-9-14 17:47 | 显示全部楼层
本帖最后由 zjdh 于 2022-9-14 17:51 编辑

重新设置一个变量,有效数据按顺序复制到数组Brr。
Private Sub CommandButton2_Click()
    Dim Arr, Brr, i&, j%, xE As Range, K&
    Arr = [A3:J17]
    ReDim Brr(1 To 2, 1 To [A:bx].Columns.Count)
    Brr(1, 1) = Split([G1], "-")(0) & "-FQC"
    Brr(1, 2) = Year([C1])
    Brr(1, 3) = [C1]
    Brr(1, 4) = [E1]
    K = 0
    For i = 0 To UBound(Arr) - 1
        If i = 5 Or i = 9 Then GoTo 10
        If i >= UBound(Arr) - 1 Then
            For j = 5 To 6: Brr(1, K * 5 + j) = Arr(i + 1, j + 1): Next j
        Else
            For j = 5 To 9: Brr(1, K * 5 + j) = Arr(i + 1, j + 1): Next j

        End If
        K = K + 1
10    Next i

    Dim xN$, xB As Workbook, xS As Worksheet, xF As Range
    xN = "Out.xlsm"
    On Error Resume Next
    Set xB = Workbooks(xN)
    If xB Is Nothing Then Set xB = Workbooks.Open(ThisWorkbook.Path & "\" & xN)
    On Error GoTo 0
    If xB Is Nothing Then MsgBox "can't find〔" & xN & "〕file": Exit Sub

    Set xS = xB.Sheets("BB")
    Set xF = xS.[A:A].Find(Split(Brr(1, 1), "-")(0), Lookat:=xlPart)
    If Not xF Is Nothing Then MsgBox "Two lots": xB.Close 0: Exit Sub
    Set xE = xS.[A65536].End(xlUp)(2)
    If xE.Row < 6 Then Set xE = xE(2)
    xE.Resize(2, UBound(Brr, 2)) = Brr
    xB.Close 1
End Sub
回复

使用道具 举报

发表于 2022-9-14 18:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2022-9-14 18:21 编辑

若要实现多个栏位,则直接修改 i 的数量
If i = 5 Or i = 8 Or i = 9  Or.......Then GoTo 10

若采用在k列做标记的话,就比较简单了。
假设跳过的行,在k列输入“F“,则

Private Sub CommandButton2_Click()
Dim Arr, Brr, i&, j%, xE As Range
Arr = [A3:K17]
ReDim Brr(1 To 2, 1 To [A:bx].Columns.Count)
Brr(1, 1) = Split([G1], "-")(0) & "-FQC"
Brr(1, 2) = Year([C1])
Brr(1, 3) = [C1]
Brr(1, 4) = [E1]
k = 0
For i = 0 To UBound(Arr) - 1

   If Arr(i+1, 11) = "F" Then GoTo 10
   
    If i >= UBound(Arr) - 1 Then
       For j = 5 To 6: Brr(1, k * 5 + j) = Arr(i + 1, j + 1): Next j
    Else
       For j = 5 To 9: Brr(1, k * 5 + j) = Arr(i + 1, j + 1): Next j
    End If
    k = k + 1
10     Next i
.................
End Sub



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 17:27 , Processed in 0.556074 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表