-1

嗨,所以我有一组要复制的数据。基本上我想创建一个 if 函数。如果我们在 B 列中搜索一个空白行并且它是空白的,则循环到下一行,并继续直到第一个非空白行。如果我们点击非空白复制列 c 中所有空白行中的所有单元格。

    Sub NotReadys()

 ' NotReadys Macro'
Dim Z As Integer 'Supplier Beginning Row'
Dim X As Integer 'Next Non Blank row'
Dim Q As Integer '# of suppliers'
Dim Y As Integer 'Paste Row'
Y = 6
'For T = 1 To 195


ActiveWindow.SmallScroll Down:=-33


Range("B" & Y).Select
Selection.Copy

Range("E" & Y).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("F" & Y).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=TEXTJOIN(CHAR(10),FALSE,RC[-3]:R[30]C[-3])"
Range("F" & Y).Select
ActiveWindow.SmallScroll Down:=-30
Range("F" & Y).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Y = Y + 1
    Next T

    End Sub

http://imgur.com/XGwB4XR

4

1 回答 1

0

我很难理解您的数据结构,但使用For Each x In Selection可能会对您有所帮助。我假设您的数据至少类似于下面的数据,其中供应商名称在 A 列中,而 PO 在 B 列中

     | 一个 | 乙| C | D |
-----|-------|-------|--------|-------|
  1 | s1 | PO1 | | |
-----|-------|-------|--------|-------|
  2 | s2 | PO2 | | |
-----|-------|-------|--------|-------|
  3 | s3 | | | |
-----|-------|-------|--------|-------|
  4 | s4 | PO3 | | |
-----|-------|-------|--------|-------|

此代码会将任何供应商和 PO(其中 PO 不为空白)复制到 C 和 D 列:

outRow = 1  ' Set this to the index of the first row you want to output to

' Run through each cell in Selection, left to right, top to bottom
For Each selCell In Selection
  ' Check for non-blank, but only if we're looking at column 2 (B)
  If selCell.Column = 2 & selCell <> "" then
    ' Store the selected Row and Column
    sRow = selCell.Row
    sCol = selCell.Column

    ' Has the effect of prefixing ActiveSheet to any values that start with "."
    With ActiveSheet
      ' Copy value from cols 1 and 2 (A & B) to col 3 and 4 (C & D)
      .Cells(outRow, 3).Value = .Cells(sRow, sCol - 1).Value
      .Cells(outRow, 4).Value = selCell.Value
    End With

    outRow = outRow +1  ' Moves to next output row
  End If
Next

在我的示例中,假设您在运行该函数之前选择了 A1:B4,您将获得以下输出。

     | 一个 | 乙| C | D |
-----|-------|-------|--------|-------|
  1 | s1 | PO1 | s1 | PO1 |
-----|-------|-------|--------|-------|
  2 | s2 | PO2 | s2 | PO2 |
-----|-------|-------|--------|-------|
  3 | s3 | | s4 | PO3 |
-----|-------|-------|--------|-------|
  4 | s4 | PO3 | | |
-----|-------|-------|--------|-------|

我猜您正在使用宏录制选项来生成您拥有的代码;这是了解 VBA 工作原理的好方法(我们大多数人都曾在某些时候这样做过),但不会产生好的代码。Excel 中的内置文档实际上非常好,当您遇到记录器的限制时值得一看。

编辑:我越看你的问题,我就越不确定你在问什么,但希望以上内容至少能把你推向正确的方向。

于 2017-03-29T16:50:39.027 回答