Excel VBA循环到下一组文本,然后转到第一个空白单元格并输入文本字符串

时间:2016-04-07 22:39:34

标签: excel vba excel-vba

我对编码世界很陌生。我有一组单元格的行,其中包含文本,中间有两行空行。它们是2和3的组,位于A和B列。

对于每组文本,我需要转到B列文本上方的最后一个空白单元格,然后输入“来自该组单元格A的顶行的文本string_text”。

我试着用这个:

Sub FindBlankAndFill()

    Dim cnter As Integer    
    firstRow = Cells(Rows.Count, 1).End(xlUp).Row
    cnter = 0

    For i = 2 To firstRow
        If IsEmpty(Cells(i, 1)) Then
            Select Case cnter
                Case 0: Cells(i, 2).Value = "Test Value"
                Case Else: Cells(i, 2).Value = ""
            End Select
            cnter = cnter + 1
        End If
    Next i

End Sub

这仅适用于第一组文本,然后将其他组完全留空。上面的代码也没有这样,它将拉取文本字符串所需的单元格值。

如果您有任何想法或解决方案,我将非常感谢您的帮助。 在After图片中,黄色单元格是VBA应添加的单元格。应该从该特定组的A列中的单元格中拉出“测试值”下划线之后的部分。

Sample of Data before the VBA is run

Sample of Data After the VBA is run

1 个答案:

答案 0 :(得分:0)

你的算法很接近。基本上,您使用cnter变量来跟踪遇到的空白行,因此当您找到更多数据时,需要重置该值。您的firstRow声明确实找到了lastRow

Option Explicit

Sub FindBlankAndFill()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cnter As Integer
    Dim i As Integer

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    cnter = 0

    For i = lastRow To 1 Step -1
        If IsEmpty(ws.Cells(i, 1)) Then
            Select Case cnter
                Case 0:
                    '--- found the blank row above the data
                    ws.Cells(i, 2).Value = "Test Value_" & ws.Cells(i + 1, 1)
                    cnter = 1
                Case 1:
                    '--- found the blank row below the data,
                    '    so do nothing
            End Select
        Else
            '--- we found some data, so set the flag
            '    for when we find the next blank row
            cnter = 0
        End If
    Next i
End Sub