如何将行中的单元格连接到第一个空白单元格

时间:2016-11-07 20:44:08

标签: excel vba excel-vba excel-formula

我目前第一次潜入代码/ VBA编码。我有一个文件,我转储到工作表中,目前我手动组织和推出。放入工作表时,它会跨单元格划分自己。前2-4个单元格始终是名称的一部分。每次我在给定的日期获取它并转储到工作表中时,此转储文件将具有不同的行和列长度。例如,有一天它可能是二十行,一天它可能是三十。

这是数据外观的粗略说明,但我的代码可能与下面的示例不匹配 - 我只是想提供一个视觉效果:

screenshot of the spreadsheet, showing current vs desired result

所以,我想要创建从A1开始的代码并连接它后面的单元格,直到它遇到该行中的空白单元格。然后,它将连接的数据放入单元格A1,并删除从中提取名称片段的值,并将所有数据滑动到左侧。之后,它在下一行继续相同的操作,直到它遇到最后一行。正如您在图像中看到的那样,我不希望空白单元格之后的任何数据受到影响。

这是我第一次编程,所以当你提供帮助时,请你解释一下你的代码,这样我才能学到这些概念?以下是我认为到目前为止的工作方式......我只是坚持如何进行连接。

我目前的代码:

Sub DN_ERROR_ORGANIZER()
  Dim row As Integer
  NumRows = Range("A1", Range("A1").End(xldown)).Rows.Count
  Range("A1").Select
  For row = 1 To NumRows
      Do Until IsEmpty(ActiveCell)
          ' Code to concatenate
          ActiveCell.Offset(1, 0).Select
      Loop
      ActiveCell.Offset(1, 0).Select
  Next
End sub

2 个答案:

答案 0 :(得分:0)

你可以尝试一下,让我知道你是怎么过的?根据您的精确布局,可能需要一些调整。我的方法略有不同。

 Sub x()

Dim n As Long, r1 As Range, r2 As Range, v

For n = 1 To Range("A" & Rows.Count).End(xlUp).Row
    On Error Resume Next
    Set r1 = Cells(n, 1).EntireRow.SpecialCells(xlCellTypeConstants).Areas(1)
    Set r2 = Cells(n, 1).EntireRow.SpecialCells(xlCellTypeConstants).Areas(2)
    If Not r1 Is Nothing And Not r2 Is Nothing Then
        v = Join(Application.Transpose(Application.Transpose(r1)), ", ")
        Cells(n, 1) = WorksheetFunction.Proper(v)
        Cells(n, 2).Resize(, r1.Count).Clear
        r2.Cut Cells(n, 3)
    End If
Next n

End Sub

答案 1 :(得分:0)

以下是查看问题的另一种方法:假设您在Sheet2上有表格,结果会反映在Sheet1上。

Sub PutInOrder()
  filledcells = 0
  '''lastrow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

  For i = 1 To 100
     If Sheet2.Cells(i, 1) = "" Then Exit For 
     For a = 1 To 4
        If Sheet2.Cells(i, a) = "" Then Exit For
          If Sheet2.Cells(i, a) <> "" Then
             filledcells = filledcells + 1
        End If
    Next

Select Case filledcells
    Case Is = 2

        Sheet1.Cells(i, 1) = Sheet2.Cells(i, 1) + ", " + Sheet2.Cells(i, 2)
        Sheet1.Cells(i, 3) = Sheet2.Cells(i, 4)
        Sheet1.Cells(i, 4) = Sheet2.Cells(i, 5)
        Sheet1.Cells(i, 5) = Sheet2.Cells(i, 6)
        Sheet1.Cells(i, 6) = Sheet2.Cells(i, 7)


    Case Is = 3

        Sheet1.Cells(i, 1) = Sheet2.Cells(i, 1) + ", " + Sheet2.Cells(i, 2) + " " + Sheet2.Cells(i, 3)
        Sheet1.Cells(i, 3) = Sheet2.Cells(i, 5)
        Sheet1.Cells(i, 4) = Sheet2.Cells(i, 6)
        Sheet1.Cells(i, 5) = Sheet2.Cells(i, 7)
        Sheet1.Cells(i, 6) = Sheet2.Cells(i, 8)


    Case Is = 4

        Sheet1.Cells(i, 1) = Sheet2.Cells(i, 1) + ", " + Sheet2.Cells(i, 2) + " " + Sheet2.Cells(i, 3) + " " + Sheet2.Cells(i, 4)
        Sheet1.Cells(i, 3) = Sheet2.Cells(i, 6)
        Sheet1.Cells(i, 4) = Sheet2.Cells(i, 7)
        Sheet1.Cells(i, 5) = Sheet2.Cells(i, 8)
        Sheet1.Cells(i, 6) = Sheet2.Cells(i, 9)

   End Select
   filledcells = 0
 Next
 End Sub