【问题标题】:Count cells, copy 400 cells, update total count of cells, continue process until count is 0计数细胞,复制400个细胞,更新细胞总数,继续处理直到计数为0
【发布时间】:2021-10-25 06:21:31
【问题描述】:

这是我想到的过程:

  1. 计算 A 列中包含数据的所有单元格(我在想“xlUp”?)并将该数字设置为变量。
  2. 选择 A 列中的前 400 个单元格(从 A2 开始),并将它们填充为黄色。
  3. 复制该数据(数据被粘贴到另一个 prog((我们称之为快捷键“!*Z”))。
  4. 从总细胞计数变量中减去 400。
  5. 在 A 列中选择第二个 400 个单元格(从 A402 开始)
  6. 用黄色填充它们
  7. 复制该数据 (!*Z)。
  8. 从更新的细胞计数变量中减去 400。
  9. 重复直到最后一个单元格的数据被复制并填充颜色。

任何帮助都会很棒。
我觉得我在这件事上绕圈子太久了。是时候问问专家了。谢谢!

【问题讨论】:

  • 欢迎来到 SO,请尝试一下,然后在遇到任何无法解决的问题时提出问题(并显示您的代码尝试)。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 绕圈跑的意思是,很长一段时间,你都在做某事。你能告诉我们那是什么(或至少是其中的一部分)吗?
  • 抱歉说得这么笼统,但我处理了很多专有信息。我知道如何选择非彩色单元格,填充它们,然后发送到我的其他编。我什至可以得到列中项目的总数。我无法理解的主要事情是将总数设置为一个变量,每次从它减去 400,然后选择任何低于 400 的值作为最后一次。我一直找不到例子。如果有人能指出我正确的方向,那就太好了。我想自己做。我不是要求免费编程:)
  • This answer to How to slice an array in batching in VBA,昨天才发布,说明了一种有趣的处理方式。

标签: excel vba


【解决方案1】:

批次范围

  • 这是我对应用于您的案例的suggested post 的快速(简短)设想。如果您发现改进,请分享。
Option Explicit

Sub BatchRange()
    
    Const sfRow As Long = 2
    Const sCol As String = "A"
    Const Batch As Long = 400
 
    ' Create a reference to the First Cell.
    Dim sfCell As Range: Set sfCell = Sheet1.Cells(sfRow, sCol)
    ' Calculate the last row.
    Dim slRow As Long
    slRow = Sheet1.Cells(Sheet1.Rows.Count, sCol).End(xlUp).Row
    
    Dim srCount As Long: srCount = slRow - sfRow + 1
    Dim bCount As Long: bCount = Int(srCount / Batch) + 1
    
    Dim srg As Range
    Dim b As Long
    Dim r As Long
    
    For b = 1 To bCount
        
        If b = bCount Then
            r = srCount Mod Batch
        Else
            r = Batch
        End If
        
        If r > 0 Then
            ' Create a reference to the current Column Range.
            Set srg = sfCell.Resize(r)
            
            
            ' Do your stuff
            ' e.g.:
            Debug.Print sfCell.Address(0, 0), srg.Address(0, 0)
            ' or:
            srg.Interior.Color = vbYellow
            
            
            ' Create a reference to the next First Cell.
            Set sfCell = sfCell.Offset(r)
        End If
    
    Next b
    
End Sub

【讨论】:

  • VBasic2008 读完这篇,我想我明白了。我试图用我所拥有的一点点知识走向不同的方向。本周晚些时候我会在工作中试一试,然后报告。谢谢您的帮助!我当然没想到会这样。
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多