为什么这个 for 循环不处理完整的数据集?

2023-12-13

背景

我有一个活动门票分配的电子表格。电子表格的每一行都有一个名称和分配的票数。

我需要更改电子表格,以便每个票证的每个名称在不同的行上重复一次,如下所示:

我有一个宏可以做到这一点,但它表现出奇怪的行为

问题

该宏不会循环遍历整个数据集。单步执行代码表明,尽管有意增加LastRow,For 循环仅循环指定原始值的次数。的新值LastRow在每次迭代结束时似乎都被忽略了。

这看起来特别奇怪,因为等效的 Do While 循环工作正常(请参阅下面使用 Do While 循环的工作代码)

问题

为什么会出现问题部分(上面)中描述的行为,以及为什么它与等效结构不一致?

For 循环宏

Sub InsertSurnames()

    Dim LastRow As Long
    Dim r As Long
    Dim surname As String
    Dim tickets As Integer
    Dim surnameCol As Integer
    Dim ticketCol As Integer
    Dim targetCol As Integer

    surnameCol = 1
    ticketCol = 3
    targetCol = 4
    LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

    For r = 1 To LastRow

        surname = Cells(r, surnameCol).Value
        tickets = Cells(r, ticketCol).Value


        If (Not (Len(surname) = 0)) Then

            Cells(r, targetCol).Value = surname

            For x = 1 To tickets - 1

                Cells(r + x, 1).EntireRow.Insert
                Cells(r + x, targetCol).Value = surname



            Next x

            LastRow = LastRow + tickets - 1

        End If


    Next r

End Sub

Do While 循环宏

Sub InsertSurnames()

    Dim LastRow As Long
    Dim r As Long
    Dim surname As String
    Dim tickets As Integer
    Dim surnameCol As Integer
    Dim ticketCol As Integer
    Dim targetCol As Integer

    surnameCol = 1
    ticketCol = 3
    targetCol = 4
    LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    r = 1

    Do While r <= LastRow

        surname = Cells(r, surnameCol).Value
        tickets = Cells(r, ticketCol).Value


        If (Not (Len(surname) = 0)) Then

            Cells(r, targetCol).Value = surname

            For x = 1 To tickets - 1

                Cells(r + x, 1).EntireRow.Insert
                Cells(r + x, targetCol).Value = surname



            Next x

            LastRow = LastRow + tickets - 1

        End If

        r = r + 1
    Loop

End Sub

编译器以不同的方式解释“For”循环构造,并使用不同的汇编调用将临时变量放入 CPU 缓存中,因此每次迭代后不需要返回到 RAM 来读取变量,它只需抓取它即可来自CPU的缓存。这是为了提高性能而设计的,这就是为什么“For”循环通常比“While”循环更快的原因。 “for”循环的限制变量仍然存在于内存中,但它不会在每次迭代期间读取它。因此,如果您更改用于最初设置上限的变量,您的循环仍将运行到您设置的原始边界。 While 循环在每次迭代时检查其退出子句,并且不缓存变量。一般来说,当您有一定数量的迭代时,应使用“For”循环,而不是当您不确定需要循环多少次并且需要更多动态控制时,应使用 while 循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 for 循环不处理完整的数据集? 的相关文章

  • COM 错误?打开工作簿两次会导致引用损坏

    归功于fuglede https stackoverflow com users 5085211 fuglede为了引起我的注意 这是 COM 错误吗 我打开 Excel 工作簿 A 然后打开工作簿 B 这两个工作簿在单元格 A1 中都有一
  • 如何从有条件的列中获取最新值

    我在 Excel 中有一个表 其中包含以下列 Date 人名 金额 英镑 该表用于记录人们何时付钱给我 通常 我可以让不止一个人在同一天向我付款 而且 随着时间的推移 同一个人会在很多天向我付款 记录添加到表格底部 以便按日期排序 但不再按
  • VB.NET 中的 Excel 自动调整列

    我这里有我的 VB6 代码并且运行良好 For CLms 1 To 10 ws Columns CLms AutoFit lt Autofilt data on XL sheet Next CLms 我已经搜索了如何在 VB NET 中使
  • 使用 C# 的高级过滤器 excel

    我需要在Excel工作表中做一个过滤器 我想知道是否可以做这样的过滤器 List
  • SQLPlus 中的运行循环

    我制作了一个 bash 脚本 它通过 SQLPlus 连接到数据库并运行一个包含 For 循环的 SQL 脚本 如下所示 但是一旦运行它 它就会卡在循环的 BEGIN 中 如下所示 我尝试直接通过SQLPlus运行 结果是一样的 那么任何人
  • 使用迭代器遍历和取消遍历 std::vector 最干净的方法是什么?

    我遇到一种情况 我正在穿过一个向量 做一些事情 std vector
  • 从总和为所需总数的值列表中确定所有可能的组合

    一位朋友问我一个编程问题 关于如何确定一组值中所有可能的值组合可以相加以获得所需的总数 我有一个解决方案 但它不太优雅 它基本上只是一系列 for 循环和 if 语句 我确信 dplyr 有一个我想不到的解决方案 因为我知道它有多么有用 但
  • 如何在vba中查找命名形状的索引号

    我运行了以下代码 for i 1 to activedocument Shapes count debug Print activedocument shapes i name next 并获得了形状列表 但是缺少一个形状 我选择了一个未包
  • 用于替换格式但保留单元格值的 VBA:部分解决

    我正在尝试组合 VBA 来搜索特定的单元格格式 然后更改该单元格格式 我从这篇文章中得到了灵感 Excel VBA 值替换后仍保持字符串格式 https stackoverflow com questions 25825136 excel
  • Excel 2010 中隐藏行的宏

    我对 VBA 编程有点陌生 我在互联网上阅读了一些内容 但找不到我需要的内容或无法使其正常工作 我的问题 在工作表 表 1 的单元格 B6 中 给出了项目将被利用的年数 在工作表 sheet 2 和 sheet 3 中 我制作了 50 年的
  • 从 Rest API 响应内容处置输出中下载 javascript 中的 excel 文件 [对象,对象]

    我想从我的 angularJs 代码下载一个 excel 文件 我向 Java Rest API 发出 http post 请求并返回带有标头的文件 Content Disposition 附件 文件名 new excel file xls
  • MS Access:将组合框中选定的条目插入表中

    这是我使用 MS Access 所做的一个示例 我有一个包含人名的表格和两个用于添加电话号码的文本字段 我创建了一个包含名称的列表框 我设法将列表框中选定的姓名和文本字段 Tel1 和 Tel2 中的电话号码插入表 ContactTable
  • 中断、保存并稍后继续循环的最佳方法

    事情是这样的 我有一个需要几天时间才能运行的循环 我想中断循环 检查进度 然后稍后继续 目前 我正在使用以下内容 for i in 1 100000 Sys sleep i 2 5 print i write csv i i csv 我检查
  • 如何迭代或映射元组?

    我最初的问题是将不同类型的元组转换为字符串 在 Python 中 这将类似于 gt gt a 1 3 1 c gt gt b map lambda x str x a 1 3 1 c gt gt join b 1 3 1 c 然而 Rust
  • Worksheet_Change 事件未触发

    我的 Excel 项目在家中可以正常运行 带有Excel 2010 但不能在两台工作计算机上 使用Excel 2016 并且我怀疑Worksheet Change事件就是问题 当用户进行更改时 黄色条 屏幕截图中 应再次变为白色 但事实并非
  • Python 中的 Foreach 未按预期工作

    我想切换列表的每隔一个元素 s False 5 for item in s 2 item not item print s 但这不起作用 False False False False False 然而 这按预期工作 for i in ra
  • Hyperlinks.add VBA [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在用 VBA 编程 我想使用创建超链接hyperlink addActiveSheet 对象的方法 但是它不起作用 这是我的代码 set
  • 在打开的Word文档中找到未知的姓名和姓氏,将其复制并使用excel VBA粘贴到excel .activesheet中的单元格A12中

    你好 Stackoverflow 社区 我的目标是编写一个宏 在之前打开 活动的 Word 文档中查找未知姓名 或两个名字都写成 Firstname Secondname 和姓氏 或两个姓氏写成 Firstsurname Secondsur
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • Excel VBA 自动过滤子字符串

    我的 Excel 中有多行 其中 D 列为 TDM 02 Bundle Rehoming 5 NE TDM 02 Bundle Rehoming 23 NE IP 02 Bundle Rehoming 7 NE 等 请注意 大多数情况下 N

随机推荐

  • 在trigger_error之前的'@'(沉默运算符,at符号)的目的是什么?

    我在许多 Symfony 包 以及其他代码 中看到了这一行 trigger error The class is deprecated E USER DEPRECATED 根据文档 at 运算符用于消除错误 http php net man
  • 创建 atoi 函数

    我正在尝试创建自己的 atoi 函数 通过以下代码 我得到的返回值为 0 无论我更改函数中的数字变量 我都会得到返回值 关于修改代码有什么建议吗 my atoi function int atoi me char numstring int
  • HttpClient 中使用 wait 的异步调用永远不会返回

    我正在从基于 xaml 的内部拨打电话 C Win8 CP上的metro应用 此调用只需访问 Web 服务并返回 JSON 数据 HttpMessageHandler handler new HttpClientHandler HttpCl
  • 阻止直接 URL 访问图像文件?

    我想阻止人们通过在浏览器地址栏中输入 URL 来获取我网站的图像 同时允许他们在访问网页时查看图像 我尝试了以下 htaccess 代码 RewriteEngine on RewriteCond HTTP REFERER http www
  • JSF 2.0 简单登录页面

    我需要限制对应用程序的一部分的访问 为了访问该部分 用户需要登录 我的数据库中有一个名为 User 的表 其中包含用户名和散列密码以及由两个输入和一个提交组成的登录表单 但是 我不知道应该使用哪些类 数学来登录用户 我假设 jsf 中支持此
  • 保持mysql连接的正确方法[重复]

    这个问题在这里已经有答案了 我有一个 24 7 运行的应用程序 它使用 mysql 它的不同功能都使用mysql 实现它的一种方法是在应用程序中创建一个全局 mysql 实例 如下所示 self db MySQLdb connect hos
  • 导出 Room 数据库并附加到电子邮件 Android Kotlin

    我有以下代码用于导出房间数据库 然后将其附加到电子邮件中 目前 用户首先必须选择要保存数据的位置 然后才能附加数据 有没有一种方法可以做到这一点 而不必首先询问用户在哪里保存数据库 这是我的代码 fun exportDatabase val
  • 如何在 iis 服务器上启用 mod_rewrite

    我发现我的服务器上没有启用 mod rewrite 功能 SERVER SERVER SOFTWARE Microsoft IIS 7 0 架构 x86 我如何启用 mod rewrite 有人可以帮助我吗 对我有用的答案是安装微软 URL
  • 在 MKMapView 中设置当前位置图标下侧

    我想在地图下方显示我当前的位置 iOS 6 和 iOS 7 如下面的屏幕截图所示 用户可以看到进一步的视图 带有谷歌地图的谷歌默认应用程序 Right now the cursor that shows center in the view
  • 当服务器处于Unix套接字时如何连接到数据库?

    我与数据库 phpmyadmin 的连接有问题 这只是因为我的服务器位于 UNIX 套接字中 我不知道如何连接到它 我站在窗户上 如果我的服务器采用 TCP IP 下面的代码可以正常工作 My code
  • JQuery:ajax 请求时出现“未捕获类型错误:非法调用”

    我正在使用这个 AJAX 函数将我的表单发布到特定的 URL 它正在获取所需的 URL 并进行处理 但是当它返回结果时 它会给出错误
  • 如何避免实体框架 4.3.1 中的重复插入

    我有一个使用代码优先方法创建的小模型 一个类City其中仅包含有关城市名称的信息 public class City public City Posts new List
  • 将 System.Drawing.Icon 转换为 Microsoft.UI.Xaml.ImageSource

    存在将 System Drawing Icon 转换为 System Media ImageSource 将 System Drawing Icon 转换为 System Media ImageSource 但是当我使用WinUI而不是WP
  • 将 InkCanvas 笔画转换为字节数组并再次转换回来

    我正在开发一个程序 它将 inkcanvas 笔划转换为字节数组进行加密 然后将其保存在 txt 文件中 本质上我需要将字节数组转换为 inkcanvas 笔划 我已经完成了代码的前半部分 它将 inkcanvas 笔划转换为字节数组 pr
  • Fluent NHibernate 将一列映射到两列之一

    我正在处理一些无法修改的旧供应商代码 我想用一个更易于使用的抽象层来包装数据库 给定以下两个表 我需要为 Process Route 创建一个映射 它将找到给定进程的匹配路由 但可以是 dbo Route SourceProcessID 或
  • iOS 5 中拖动 UIView

    我在 iPhone 应用程序中看到状态栏上有一个可以访问通知中心的手势 我如何在我的应用程序中实现这种转换 我认为这是通过滑动手势识别器完成的 但是如何包含从上到下的滑动手势 如何拖动通知中心完成其完整过渡 有任何示例代码或其他东西可以帮助
  • 使用字符数组作为字符串流缓冲区

    我正在寻找一种干净的 STL 方法来使用现有的 C 缓冲区 char 和 size t 作为字符串流 我更喜欢使用 STL 类作为基础 因为它具有内置的保护措施和错误处理 注意 我不能使用额外的库 否则我会使用文本流 你可以尝试使用std
  • django ALLOWED_HOSTS 不工作

    我的 settings py 文件包含 DEBUG False ALLOWED HOSTS u mydomainxxx com 但是 我可以像这样触发卷曲请求 curl X GET https mydomainxxx com api H A
  • PermissionError: [Errno 13] 权限被拒绝: '/code/manage.py'

    我试图在 docker 容器上运行 django 应用程序 按照以下提到的步骤操作https docs docker com compose django 但运行命令后docker compose run web django admin
  • 为什么这个 for 循环不处理完整的数据集?

    背景 我有一个活动门票分配的电子表格 电子表格的每一行都有一个名称和分配的票数 我需要更改电子表格 以便每个票证的每个名称在不同的行上重复一次 如下所示 我有一个宏可以做到这一点 但它表现出奇怪的行为 问题 该宏不会循环遍历整个数据集 单步