另一个针对 excel 2007 的优化宏 vba 代码。该代码是我的数据的一种转置器

2023-12-01

您好,这段代码最初不是由我完成的,这里有一些事情我不太明白,我已经对我的同事代码进行了一些修改以适应我的数据并且它有效。但太慢了。当我有 4000+kb 的 Excel 文件时,它可能会完全冻结。 (我已经检查过,当这个转置器运行时和之后,它仍然在 excel 行限制内,我之前已经完成了计算,并制作了一个宏来根据列数和行数自动分割 excel 文件,以确保情况如此) 。这段代码似乎开始时很快,然后运行时间越长,速度就越慢。至少在我看来是这样的。

请随意提出任何使此代码更快/更好的方法!感谢您的时间。 抱歉,我不太理解这段代码。

我已经关闭了屏幕更新、自动计算等。

Dim InitRange As Range
Dim Counter As Range
Dim paracount As Long
Dim Filler As Range
Dim ParaSelect As Range
Dim Paraloc As Range
Dim Paravalloc As Range
Dim Unitloc As Range
Dim methodloc As Range
Dim CurNum As Long
Dim MaxNum As Long
Dim eCell As Range
Dim checkRow As Long
Dim InsertRow As Long
Dim x As Long
Dim y As Long
Dim vRow As Long

CurNum = 0
MaxNum = 0

x = 1

Range("K1").End(xlToRight).Offset(0, 0).Select

Set ParaSelect = Range("K1", ActiveCell)
InsertRow = ParaSelect.Count - 1

Set InitRange = Range("A4", "F4")
Set Counter = InitRange

Do
MaxNum = MaxNum + 1
InitRange.Offset(MaxNum, 0).Activate
Loop Until ActiveCell = ""


Set eCell = InitRange.Offset(0, 0)

Do
eCell.Offset(x, 0).Activate
Rows(eCell.Offset(x, 0).row & ":" & eCell.Offset(x, 0).row + InsertRow - 1).Insert
x = x + InsertRow + 1
If x > MaxNum * (InsertRow + 1) Then Exit Do
Loop

Range("A1").Activate

Set Filler = InitRange

Set Paraloc = Range("G4")
Set Paravalloc = Range("H4")
Set Unitloc = Range("I4")
Set methodloc = Range("J4")

vRow = 0
y = 0
Do

ParaSelect.Copy
Paraloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True

ParaSelect.Offset(1, 0).Copy
methodloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True

ParaSelect.Offset(2, 0).Copy
Unitloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True

ParaSelect.Offset(CurNum * (InsertRow + 1) + 3, 0).Copy
Paravalloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True

Filler.Offset(y, 0).Copy
CurNum = CurNum + 1
y = y + 1
checkRow = 1
Do
Filler.Offset(y, 0).PasteSpecial xlPasteValues
y = y + 1
Filler.Offset(y, 0).Activate
checkRow = checkRow + 1

Loop Until checkRow > InsertRow
Loop Until CurNum >= MaxNum

乔恩提出了一个很好的建议>.> 我应该坚决地提供一些东西来向你们展示这段代码的含义。图1是文件转置前的样子

This is what the file looks like before i run the transposer

enter image description here

图2是文件转置后的样子。不用担心 k 列及之后的列将被删除。

注意:文件可以有任意数量的列和行


此代码缓慢的主要原因是循环中的所有单元格引用。如果将数据复制到变体数组并对其进行处理,它的运行速度会快得多。

您应该遵循的步骤:

  1. 计算出源数据范围,并设置Range变量

    Dim rngData as Range
    Set rngData = Your Source Range

  2. 复制数据

    Dim varSource as Variant
    varSource = rngData

  3. 计算目标数据的大小并将变体数组调暗为该大小

    Dim varDestn() as variant
    Redim varDestn(1 to NumberOfRows, 1 to NumberOfColumns)

  4. 计算新数据。复制值来自varSource(row,col) to varDestn(row,col)

  5. 删除原始数据(如果需要)

  6. 将新数据放在工作表上

    Set rngData = Cells(1,1) _
    .Resize(UBound(varDestn,1), UBound(varDestn,2)) _
    .Offset(TopLeftCellRow, TopLeftCellCol)
    rngData = varDestn

一般来说,将对工作表的引用数量保持在最低限度,尤其是在循环中

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

另一个针对 excel 2007 的优化宏 vba 代码。该代码是我的数据的一种转置器 的相关文章

  • 使用 XMLHTTP 进行抓取会在特定类名处引发错误

    我正在尝试使用此代码抓取网站以提取姓名和联系人 Sub Test Dim htmlDoc As Object Dim htmlDoc2 As Object Dim elem As Variant Dim tag As Variant Dim
  • 读取上传的Excel文件而不保存它

    在这段代码中 我从用户那里获取上传的文件并将其保存在我的应用程序中的文件夹中 然后对此 Excel 文件进行 OleDbConnection 并读取数据 我的问题是 有人可以建议一种阅读此 Excel 文件的首选方法 但无需预先保存它 因为
  • 如何在vb.net中实现事务方式?

    我使用 VB net 200 开发一个连接到 MS Access 数据库的应用程序 我使用 TableAdapter 和 Dataset 连接到 Access DB 文件 我需要实现一个简单的事务方法 提交 回滚 来保存到数据库 有没有一种
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 在工作表中合并行和求和值

    我有一个 Excel 工作表 其中包含以下数据 管道 来分隔列 A B C X 50 60 D E F X 40 30 A B C X 10 20 A B C Y 20 20 A B C X 20 70 D E F X 10 50 A B
  • 键入时自动滚动 DataGridView

    我遇到这个问题 DataGridView 中的最后一列太长 您需要使用滚动条来显示该列的其余部分 但是当我输入文本时 它不会在输入时自动滚动 我想要的是 我想在打字时自动滚动滚动条 以便用户在打字时不必使用滚动条 这是图像 As you c
  • 比较 EXCEL 中的列本身以检查其是否有重复值

    假设我有一个名为项目代码的列 如下所示 row code 1 A123 2 B123 n A123 代码列中的值可能出现多次 如何使用Excel公式或Excel中的任何方法检查列中的重复记录 Thanks 根据您使用的 Excel 版本 您
  • 什么可能会在一台服务器上导致此错误,而在另一台服务器上则不会?

    我们有一个连接到外部 Web 服务的 ASP Net 网站 几天前它突然停止工作 基本代码是这样的 Try request New ExternalWebService ProcessRequestService Error occurs
  • 索引行和列意外结果

    我试图理解以下行为 如果我有以下数据 A B a 1 b 2 c 3 如果我使用 INDEX A 1 B 3 它将正确显示整个范围 如果我使用 INDEX A 1 B 3 1 它将正确显示两列第一行的数据 如果我使用 INDEX A 1 B
  • 如何在缩进层次结构中找到父级?

    我目前有一张 Excel 工作表 其中包含缩进的项目层次结构 如下所示 每个项目都缩进 每个缩进四个空格 以显示它如何适应整体层次结构 我已经能够创建一个 级别 列 将缩进级别转换为数字 Item Level Parent P1 1 N A
  • 使用宏从 Excel 电子表格中删除任何非指定字符

    我正在尝试通过删除任何非标准字符来清理 Excel 中的 CSV 文件 我唯一关心保留的字符是 A Z 0 9 和一些标准标点符号 任何其他字符 我想删除 当它找到包含我未指定的任何字符的单元格时 我已经得到了以下宏来删除整行 但我不确定如
  • 在 VB.NET 中 a = b = 5 - 不可能吗?

    VB NET 中可以这样做吗a b 5 我知道 也是比较运算符 我的意思是做not结果 例如 如果 b 2 a false b 2 然而 在下面的情况下该怎么做呢 不方便在我的代码中引起了这个问题 一些对象a b z由方法中的 ref 传递
  • 生成Excel文件错误

    我在经典 ASP 中使用以下代码生成 Excel 文件 代码很简单并且有效 我在 Windows Vista x86 上的 IIS 7 0 下运行代码 两个问题 有一个奇怪的警告框 这是屏幕快照 http i27 tinypic com 2
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 删除 VBA 按钮集合

    我正在使用以下脚本在 Excel 中生成按钮 范围正是我希望放置它的位置 Sub CreateAddButton rng As Range Dim btn As Button With Worksheets User Set btn But
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 在 VB.Net 中将字节数组转换为整数

    我想知道在 vb net 中将字节数组 长度 4 转换为整数的最佳方法是什么 我知道 BitConverter 但执行函数调用来执行应该可以通过复制 4 字节内存来完成的操作似乎相当浪费 同样 将单 双精度数从二进制表示形式转换为单 双精度
  • python XlsxWriter 设置多个单元格周围的边框

    I need an easy way to set border around multiple cells like so 我发现的只是 1 个单元格的边框 并合并单元格 这不是我需要的 我期待类似的事情 worksheet range
  • 在 Excel 中查找结果将行复制到另一张工作表

    我需要一些帮助将数据从一个 Excel 工作表复制到另一个 例如 样本数据 A B C 1 aaa bbb ddd 2 bbb ccc eee 2 bbb ccc eee 3 ccc fff rrr 4 ccc fff ttt 5 ddd
  • 行编号选择自动填充直到最后[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含数千行的表 我想通过在第一行旁边添加 1 2 3 来对行进行编号 然后选择这些行并拖动到最后以使用递增的数字进行填充 如何自动

随机推荐

  • android 达到限制时如何禁用复选框?

    我有 15 个CheckBox当用户检查超过 5 个时 我必须卡住用户 我使用该方法OnCheckedChangeListener知道某项是否已检查 但我不知道选择5个项目后如何限制 请参阅下面的我的代码 int lengthBox 15
  • 如何在销售订单保存搜索的行项目结果中包含主线发货日期?

    我正在尝试创建一个已保存的搜索 可用于按项目类型细分按时发货 但是 我注意到销售订单上的行项目的结果中不包含 shipdate 以下是一个搜索示例 其中 库存商品 行没有发货日期 我尝试过使用公式字段以及 shipdate 和 mainli
  • C 信号量:sem_wait 抛出莫名其妙的错误

    我正在研究一个必须使用信号量来解决的问题 我有一个包含两个信号量的数组 gsem 并给定某些条件调用sem wait gsem me 它应该等待直到该特定进程被唤醒 但是 由于某种原因它给了我错误Bad file descriptor 我抬
  • Apache Mod Rewrite 对于漂亮的 URL 不起作用

    我正在尝试弄清楚如何做 apachemod rewrite重新映射 GET 我正在努力实现的目标 目前 要访问该页面 必须访问 http www domain com index php URL pages the page php 我希望
  • 使用 php 向 Google Cloud Messaging 发送通知会出现未经授权的错误 401

    在搜索有关如何使用 GCM 但使用 PHP 而不是 servlet 发送通知的一些信息时 我发现了以下内容 GCM 与 PHP 谷歌云消息传递 我测试了这些问题的回答的工作代码 我还为浏览器应用程序创建了一个密钥 带有引用者 并且我授予了该
  • Haskell 中的递减范围

    我对 Haskell 很陌生 有人可以解释一下为什么定义这样的列表会返回空列表 ghci gt let myList 10 1 ghci gt myList 然而这工作正常 ghci gt let myList 10 9 1 ghci gt
  • Go中的浮点运算

    go 中的示例代码如下 package main import fmt func mult32 a b float32 float32 return a b func mult64 a b float64 float64 return a
  • Android 分享意图中的 Instagram 选项

    我正在开发一个应用程序 它将在不同的社交网站上共享内容 问题是我在分享意图中看不到 Instagram 选项 我可以看到蓝牙 邮件 消息等 但看不到 Instagram 我的设备上安装了 Instagram 应用程序 谁能告诉我这是什么问题
  • 对用德语 Fraktur 编写的 5800+ PDF 进行批量 OCR

    我想批量OCR约5800PDF 由我上一个问题中的每页 2 到 6 页组成here 在 Mac 上使用开源命令行工具 这次冒险的主要目的是我想从所有这些文本中检索尽可能可靠的名字 姓氏最重要 PDF Here是一个问题的示例 此时 我不知道
  • Nuxtjs Auth 模块无法在中间件中工作

    您好 我在 StackOverFlow 上发现了一个与我类似的老问题 但没有答案 nuxtjs auth axios 不发送 cookie 同样在 GitHub 上 没有有效的解决方案 https github com nuxt commu
  • 内存中的文件*(无磁盘访问)

    我们有接受 FILE CImg 的库 出于性能原因 我们希望处理内存中已有的数据而不访问磁盘 目标平台是 Windows 不幸的是它不支持 fmemopen 和 funopen char buf new char sz FILE fp fo
  • 在 Tomcat 7 中访问 Jersey 应用程序时出现 404

    我是 Web 开发领域的新手 我正在努力使用 jersey 创建一个简单的 Rest Web 服务 打包为独立的 war 文件 部署在 tomcat 7 上 我已经遵循了这个教程为了创建简单的 hello world 安静的 Web 服务
  • 我可以获得当前运行的java可执行文件的路径吗?

    假设我想从命令行运行一个java程序 我使用这个命令 myExes java java exe AJavaProgram 如您所见 java exe 不在我的路径中 因此我手动运行它 而不是简单地使用命令java AJavaProgram
  • 在 Windows 窗体控件中调整大小以及窗体大小调整

    我的 C Windows 窗体应用程序中有一些控件 组框 表格 gridview 等 我想根据屏幕宽度 高度缩放它们 例如 屏幕的起始分辨率为 640x480 然后最大化到 1920x1200 我希望能够增加控件的宽度 高度 以便在调整窗口
  • 将指针分配给使用 malloc 保留的块

    基于这个答案 https stackoverflow com a 19765782 1606345 include
  • 如何在iOS中注册一个在指定时间提醒应用程序的事件

    我需要每晚凌晨 1 点或每两周启动一次同步 我将如何在 iOS 中实现这一目标 iOS 中有没有一种方法可以让我的应用程序在此时提醒我 并且应该在指定的特定时间提醒我的应用程序 后台获取是操作系统提供的机会 iOS 7 及以上版本 到请求在
  • 为什么无法更改 css 中的内容?

    CSS2 1伪选择器如 after and before允许向页面添加文本内容 例如 CSS p after content Batman HTML p Na Na Na Na Na Na p 浏览器中的输出 Na Na Na Na Na
  • 了解 Cassandra 消息延迟指标

    我试图了解如何使用org apache cassandra metrics type Messaging公制 我设置了 3 个数据中心 每个数据中心 1 个节点 当我测量指标时 对于每个节点 我获得 2 个跨数据中心指标和 1 个跨节点延迟
  • 为什么主题函数没有将更改应用于 ggplot?

    我想更改 y 轴描述的文本大小并将绘图标题居中 主题函数中编码的所有内容都没有应用于我的图表 哪里有问题 finalchart ggplot euall aes day cumulative cases of 14 days per 100
  • 另一个针对 excel 2007 的优化宏 vba 代码。该代码是我的数据的一种转置器

    您好 这段代码最初不是由我完成的 这里有一些事情我不太明白 我已经对我的同事代码进行了一些修改以适应我的数据并且它有效 但太慢了 当我有 4000 kb 的 Excel 文件时 它可能会完全冻结 我已经检查过 当这个转置器运行时和之后 它仍