仅循环浏览选定合并范围的前一个单元格

时间:2019-01-05 14:18:26

标签: excel vba excel-vba

我正在尝试为用户提供对所选单元格执行简单算术运算的选项。 事实是,大多数单元格都是合并范围。

我已经掌握了以下内容,但问题是它遍历所有单元格,而我只希望它只影响那些未合并的单元格或仅影响合并范围的第一个单元格。

Sub test()
    Application.ScreenUpdating = False
    Dim cel As Range
    Dim selectedRange As Range
    myValue = InputBox("Enter")
    Set selectedRange = Application.Selection

    For Each cel In selectedRange.Cells
        On Error Resume Next
        cel.Value = Evaluate(cel.Value & myValue)
    Next cel
End Sub

2 个答案:

答案 0 :(得分:0)

MergeCells属性

If 语句中使用 MergeCells 属性,您检查单元格是否未合并,然后执行以下语句,否则 Else 之后的语句。

在以下示例中,选择了范围 I3:M12 ,并输入了 5 作为 myValue 。第一个表是第二个表之前的状态。

enter image description here

代码

Collapsed

计数

我们可以通过添加 COUNT

来扩展以前的表格

enter image description here

更明显的是在Excel中如何“忽略”合并的单元格,即除合并区域的第一个单元格以外的所有单元格都不会被计数(或求和,或...)。

下面显示了在VBA和Excel中对单元格进行计数之间的区别。

Sub test()

    Dim cel As Range
    Dim selectedRange As Range
    Dim myValue As Double

    Application.ScreenUpdating = False

    myValue = InputBox("Enter")

    Set selectedRange = Application.Selection

    For Each cel In selectedRange.Cells
        If Not cel.MergeCells Then
            ' If not merged cell.
            cel.Value = Evaluate(cel.Value & myValue)
          Else
            ' if merged cell.
            cel.Value = Evaluate(cel.Value + myValue)
        End If
    Next cel

    Application.ScreenUpdating = True

End Sub

立即窗口中的结果是

10 9 50 46

显示 VBA 如何计算每个单元格,但是 Excel 将排除合并区域中除第一个单元格以外的所有单元格。

在VBA帮助中搜索 MergeArea 属性以获取更多信息。

答案 1 :(得分:0)

尽管 VBasic2008 的答案有效,但这并不完全正确。问题在于,合并范围内的每个单元格始终为ruby '2.4.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.2' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' gem 'mongoid' gem 'moped' gem 'mongoid-audit' gem 'mongoid-history' gem 'mongoid-enum' gem 'mongoid_search' 属性返回True。这意味着对于左上角单元格以外的单元格,会在循环中进行过多处理(即,增加值)。要解决这种情况,您应该测试每个单元的处理需求。您可以通过几种方式执行此操作:

  1. 您可以将一个单元格的地址与左上角的单元格地址(代码中的MergedCells)进行比较。

  2. 您可以测试单元格值的长度。如果为零,则它不是左上角的单元格,因此可以跳过它(代码中的Option 1)。

代码:

Option 2