【问题标题】:Vba macro if cell contains value, then input specific text on other cellsVba宏如果单元格包含值,则在其他单元格上输入特定文本
【发布时间】:2017-09-22 08:50:54
【问题描述】:

我有一个包含大量信息和统计数据的 excel 文档,我正在尝试找出如何解决以下问题: 如果 E 列上的一个单元格,在 E5:E70 间隔中,包含“N/A”文本(不带引号),我想在同一行的几个特定单元格上自动输入“N/A”文本

添加图片供参考。 任何帮助将不胜感激,谢谢!

最新编辑: 我附上了excel的副本,也许它会更有帮助,对我来说它根本行不通......这太令人沮丧了...... excel file

【问题讨论】:

  • 那些不应该显示N/A的单元格中有什么?
  • 通常是我手动输入的数字。

标签: vba excel


【解决方案1】:

将下面的代码粘贴到您要对其执行操作的工作表的代码表中。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim C As Long

    If Not Application.Intersect(Target, Range("E5:E70")) Is Nothing Then
        SetApplication False
        With Target
            If StrComp(Trim(.Value), "N/A", vbTextCompare) = 0 Then
                ' recognises "n/a" as "N/A" and corrects entry
                For C = Columns("E").Column To Columns("AL").Column
                    Cells(.Row, C).Value = "N/A"
                Next C
            End If
        End With
        SetApplication True
    End If
End Sub

Private Sub SetApplication(ByVal AppMode As Boolean)

    With Application
        .EnableEvents = AppMode
        .ScreenUpdating = AppMode
    End With
End Sub

【讨论】:

  • 我已经复制了代码,但似乎由于某种原因它没有改变任何值
  • 可能是你安装错了地方。它必须在名为“Sheet1 (Sheet1)”的工作表代码表中。你可能误解了这个功能。当您在任何单元格 E5:E70 中输入“N/A”时,代码将运行。在所有其他时间它什么都不做。特别是,它不会查看您的工作表中的任何现有“N/A”,甚至在 E5:E70 中也不查看。
  • 已解决,感谢大家的时间和帮助。非常感谢!
  • 太棒了!请记住标记解决问题的答案。谢谢。
【解决方案2】:

我假设(根据图片)您想以这种方式粘贴 N/A:F - 粘贴,G - 不粘贴,H - 粘贴 - 并进一步重复这三个:粘贴,不要粘贴,粘贴,粘贴,不要粘贴,粘贴等等。

所以这段代码按照这条规则工作。您只需要指定最后一列而不是 Column.Count - 2 - 这个位表示程序应该填充到工作表中的最后一列。

Sub FillNAs()

Application.EnableEvents = False
Application.ScreenUpdating = False

Dim i, j As Long

For i = 5 To 70
    If UCase(Cells(i, 5).Value) = "N/A" Then
        j = 6
        Do While j < Columns.Count - 2
            Cells(i, j).Value = "N/A"
            Cells(i, j + 2).Value = "N/A"
            j = j + 3
        Loop
    End If
Next i

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

【讨论】:

    【解决方案3】:

    试试

    Sub Demo()
        Dim ws As Worksheet
        Dim cel As Range
    
        Set ws = ThisWorkbook.Sheets("Sheet1")  'change Sheet1 to your data sheet
        For Each cel In ws.Range("E5:E70")
            If CVErr(cel.Value) = CVErr(xlErrNA) Then
                ws.Range("F" & cel.Row & ":I" & cel.Row) = CVErr(xlErrNA)   'mention desired range instead of (F:I)
            End If
        Next cel
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多