【问题标题】:fill specific cells in second column - vba excel填充第二列中的特定单元格 - vba excel
【发布时间】:2014-07-31 09:59:52
【问题描述】:

这是我的代码:

Sub fillcells()   

     Dim rngA As Range                  
     Dim arrayFinal As Variant                  
     Dim i As Long                  

     For Each rngA In Range("A:A") 

        If rngA.Value Like "*-*" Then         
            Debug.Print True         
            ' Split range A value into an array                 
            arrayFinal = Split(rngA.Value, "-")               
            'add n rows below the cells containig "-"                     
            rngA.Offset(1, 0).Resize(UBound(arrayFinal)).EntireRow.Insert Shift:=xlDown         
            For i = LBound(arrayFinal) To UBound(arrayFinal)         
                rngA.Offset(i, 0).Value = arrayFinal(i)         
            Next i   
      End If
     Next rngA  

End Sub

编者注:代码错误,因为 IfFor 循环内,但在它 (Next rngA) 之后结束 (End If)!是错字还是错误?

在工作表上,我有 2 个填充的列(A 和 B)。我的代码循环列 A 并检查包含“-”字符的单元格。如果找到它,则在该单元格下方添加一个新行,并用 A 列中“-”后面的字符串填充它。 但我的问题是:在 B 列中,我有很多之前创建的空行。我想用 B 列中空行上的字符串填充它们。我该怎么做?

更具体一些,例如:

         column B   

row1:    hello1         
row2:    (empty)         
row3:    (empty)                  
row4:    hello2         
row5:    hello3         
row6:    hello4         
row7:    (empty)      
row8:    hello5                     
...         
rown:    .....

而我想要的是这样的:

row1:    hello1         
row2:    hello1         
row3:    hello1                 
row4:    hello2         
row5:    hello3         
row6:    hello4         
row7:    hello4      
row8:    hello5                     
...         
rown:    .....

我需要的是一个优化的代码,所以我必须使用(如果可能的话)相同的循环,因为我有很多填充的行。

【问题讨论】:

  • 对不起,是的……这是一个错字。我已经修改了代码。谢谢..

标签: vba excel


【解决方案1】:

我已经修改了您的代码(见下文),为您提供了一种做您想做的事情的方法。这可能不是最好的方法,但至少它会让你知道你能做什么。

Sub fillcells()

  Dim rngA As Range
  Dim rngB As Range ' <~~ NEW CODE
  Dim arrayFinal As Variant
  Dim i As Long

  For Each rngA In Range("A:A")

    If rngA.Value Like "*-*" Then
      Debug.Print True
      ' Split range A value into an array
      arrayFinal = Split(rngA.Value, "-")
      'add n rows below the cells containig "-"
      rngA.Offset(1, 0).Resize(UBound(arrayFinal)).EntireRow.Insert Shift:=xlDown
      For i = LBound(arrayFinal) To UBound(arrayFinal)
        rngA.Offset(i, 0).Value = arrayFinal(i)
      Next i
    End If

    ' NEW CODE STARTS HERE
    Set rngB = rngA.Offset(0, 1)
    If rngA.Value <> vbNullString And rngB.Value = vbNullString Then
      rngB.Value = rngB.Offset(-1, 0).Value
    End If
    ' NEW CODE ENDS HERE

  Next rngA

End Sub

首先,我添加了一个新的 Range 变量 (rngB)。然后,我将其设置为与rngA 的单列偏移量。最后,如果单元格列 A 有一些文本,但在列 B 中它是,那么我复制 列 B 中的前一行的值B 列中的当前行。一切都在您现有的循环中,如您所愿。

【讨论】:

  • 哇...谢谢!你的想法非常好。我没有这样想。谢谢!
  • 如果可以的话,我能问你点别的吗?如何获取 B 列的值(我之前复制的值)并将其划分为拆分单元格值?第一行也必须修改。感谢您的反馈和耐心。
  • @musiclandia:我不确定我理解你的意思。有一个 Split 函数可用于拆分分隔字符串。如果您的要求比这更复杂,那么您最好提出一个新问题来让人们帮助您。
  • 我只想将 B 列中的值划分为空单元格编号,并用除数填充空单元格。不过,还是谢谢你。我会努力解决的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2017-11-19
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多