Excel VBA循环到下一组文本,然后进入第一个空白单元格并input文本string

我对编码世界相当陌生。 我有一组单元格的行中有文本和2空白行之间。 他们是2和3的组,并在A和B列。

对于每组文本,我需要转到列B中文本上方的最后一个空白单元格,然后input“来自该组单元格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 

这只适用于第一组文本,然后将其他组完全留空。 上面的代码也没有,所以它会拉出文本string所需的单元格值。

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

运行VBA之前的数据示例

数据示例VBA运行后

你的algorithm很接近。 基本上,你使用cntervariables来跟踪你遇到的空行,所以当你find更多的数据时,这个值需要重置。 你的firstRow语句确实是find了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