2013-10-14 433 views
1

我正在寻找一些代码来查看列A,只要列A中的单元格不是空白,那么列中的相应单元格B将等于一个特定的值。VBA - 如果列A中的某个单元格不是空白,则列B等于

因此,如果单元格A1 <>“”,则单元格B1.Value =“我的文本” 然后重复,直到列A中的单元格为空或为空。

为了增加一点澄清,我查看了各种回答问题并在这里回答。他们有些帮助。但是,我不清楚如何让循环通过列A以验证列A中的每个单元格都不是空白,并且列B中的相应单元格中添加了一些我指定的文本。

此外,这将需要一个单元格公式的VBA宏,而不是部分的一部分,比如= IF

+1

你试过什么了吗?循环播放,直到在本网站上多次询问下一个空白单元格... –

+0

^^好几次... –

+2

为什么不直接输入您的公式和自动填充? –

回答

6

如果你真的想要一个VBA解决方案,您可以依次通过一系列这样的:

Sub Check() 
    Dim dat As Variant 
    Dim rng As Range 
    Dim i As Long 

    Set rng = Range("A1:A100") 
    dat = rng 
    For i = LBound(dat, 1) To UBound(dat, 1) 
     If dat(i, 1) <> "" Then 
      rng(i, 2).Value = "My Text" 
     End If 
    Next 
End Sub 

*编辑*

而不是使用一些变体中你可以通过这样的范围内循环:一个简单的方法来做到

Sub Check() 
    Dim rng As Range 
    Dim i As Long 

    'Set the range in column A you want to loop through 
    Set rng = Range("A1:A100") 
    For Each cell In rng 
     'test if cell is empty 
     If cell.Value <> "" Then 
      'write to adjacent cell 
      cell.Offset(0, 1).Value = "My Text" 
     End If 
    Next 
End Sub 
+0

出于兴趣,为什么要把数组作为数组?为什么不简单地循环遍历'(例如,对于rng中的每个cl)'单元格并且使用'Offset'来填充B列(例如If cl <>“”然后cl.Offset(0,1)=“My文字“)' –

+0

我当然可以,我剪了一些已经写好的代码。我相信通过一个变体的循环速度比一个范围更快,但这可能是错误的。我会编辑它使其更简单。 –

1

使用功能IF:

=IF (logical_test, value_if_true, value_if_false)

2

这将是:

Sub populateB() 

For Each Cel in Range("A1:A100") 
    If Cel.value <> "" Then Cel.Offset(0, 1).value = "Your Text" 
Next 

End Sub 
3

另一种方法(在VBA中使用公式)。我想这是最短的VBA代码呢?

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     .Range("B1:B" & lRow).Formula = "=If(A1<>"""",""My Text"","""")" 
     .Range("B1:B" & lRow).Value = .Range("B1:B" & lRow).Value 
    End With 
End Sub 
相关问题