在excel的指定单元格中输入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel的指定单元格中输入数据相关的知识,希望对你有一定的参考价值。
现有一张很大的EXCEL表格,需要对其中的多个单元格的内容进行修改,但是一个一个找的话很烦锁,是否有简单的方法(如编写个宏)使电脑根据我给出的记录编号(行号)和字段名(列号)自动对相应单元格的内容进行修改?请高手帮忙,先谢谢了。
我知道单元格的位置,具体地说就是我很明确地知道需要修改的单元格的行与列。只不过量实在太大,一个一个找的话太烦,我需要大家给个宏,我在其中输入该单元格的行号与列号以及修改的值,然后系统自动完成修改。
首先,你新建一张表,名为“参数”(不要写错了),依次在A列填入目标行号,B列目标列号,C列目标值。填好后,执行下面这段代码。
Sub 改值()
Dim nRow As Integer
With Sheets("参数")
nRow = 1
While .Cells(nRow, 1) <> ""
Sheets("Sheet1").Cells(.Cells(nRow, 1), .Cells(nRow, 2)) = .Cells(nRow, 3)
nRow = nRow + 1
Wend
End With
End Sub 参考技术A 做个记号,吃晚饭回答你。
-------------------------------
原表为表1(sheet1)
表2(sheet2)中,a,b,c为表1修改的单元格的行、列、值行、
Sub 修改单元格值()
Dim i, m, n As Integer
With Sheets("sheet2").Select
i = 2
While Cells(i, 1) <> ""
m = Cells(i, 1)
n = Cells(i, 2)
Sheets("Sheet1").Cells(m, n) = Cells(i, 3)
i = i + 1
Wend
End With
Sheets("Sheet1").Select
Range("A1").Select
End Sub 参考技术B 是的,用宏就行了,不过你要知道单元格的位置 参考技术C 不是太难。请你再说详细点。
循环遍历指定文件夹中的所有 excel 文件,并从特定单元格中提取数据的代码
【中文标题】循环遍历指定文件夹中的所有 excel 文件,并从特定单元格中提取数据的代码【英文标题】:Code for looping through all excel files in a specified folder, and pulling data from specific cells 【发布时间】:2011-08-16 15:06:56 【问题描述】:我有大约 50 个 Excel 工作簿需要从中提取数据。我需要从特定单元格、特定工作表中获取数据并编译成一个数据集(最好是另一个 Excel 工作簿)。
我正在寻找一些 VBA,以便我可以将结果编译到我用来运行代码的工作簿中。
所以,我需要从中提取数据的 xls 或 xlsx 文件之一工作表(“DataSource”),我需要评估单元格(D4),如果它不为空,则从单元格(F4)中提取数据,并将新行放入编译的数据集中。如上所述循环遍历该文件夹中的所有 Excel 文件。
如果可能的话,我希望第一列中的第一个数据字段是从结果数据集中提取数据的文件的名称。
有人可以帮我解决这个问题吗?我正在寻找 VBA,因为我对此更熟悉,但对 VBScript 也很感兴趣(因为我正在尝试深入了解其中的差异)。
【问题讨论】:
听起来你已经完成了大部分的计划。您对语法或方法有什么具体问题吗? 是的……基本上就是用来完成这一切的语法。如何遍历指定文件夹中的所有 excel 文件(xls 或 xlsx)文件? 我如何为从“下一个”excel文件中提取的数据指定新行? 它需要在什么版本的 Excel 中工作?例如 Application.FileSearch 方法在 2007/10 年将不起作用 这是how to loop through all files in a folder 【参考方案1】:可以用下面的代码来完成
Sub LoopThroughFiles()
Dim StrFile As String
StrFile = Dir("V:\XX\XXX\*.xlsx")
Do While Len(StrFile) > 0
Debug.Print StrFile
Set wbResults = Workbooks.Open("V:\XX\XXX\" & StrFile)
'DO YOUR CODE HERE
wbResults.Close SaveChanges:=True
StrFile = Dir
Loop
End Sub
【讨论】:
【参考方案2】:我同意使用访问 Excel 对象不是最快的,并且如果您尝试从中检索数据的工作簿和工作表都是一致的(即具有相同的列名等...或至少您要查找的列名)最好使用 ODBC。这确实存在一些问题,如果您无法绕过它们或需要根据内容实际做一些更复杂的事情,那么可能无法绕过它。如果是这种情况,那么我建议创建一个 Excel 对象,然后根据需要打开和关闭文件以尝试提高效率。
【讨论】:
【参考方案3】:首先从this google query 开始,然后单击出现的第一个链接,这会将您带到an article,显示如何遍历文件夹中的一组 Excel 文件。
Sub RunCodeOnAllXLSFiles()
Dim lCount As Long
Dim wbResults As Workbook
Dim wbCodeBook As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Set wbCodeBook = ThisWorkbook
With Application.FileSearch
.NewSearch
'Change path to suit
.LookIn = "C:\MyDocuments\TestResults"
.FileType = msoFileTypeExcelWorkbooks
'Optional filter with wildcard
'.Filename = "Book*.xls"
If .Execute > 0 Then 'Workbooks in folder
For lCount = 1 To .FoundFiles.Count 'Loop through all
'Open Workbook x and Set a Workbook variable to it
Set wbResults = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
'DO YOUR CODE HERE
wbResults.Close SaveChanges:=False
Next lCount
End If
End With
On Error GoTo 0
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
要获取工作簿的名称,您需要修改“在此处执行您的代码”中的代码以包含 wbResults.Name
。如果是您想要的文件名,请使用wbResults.FullName
,它会以字符串形式返回工作簿的名称,包括其在磁盘上的路径。
搜索VBScript variation on the same thing 会产生许多有用的结果,包括以下脚本:
strPath = "C:\PATH_TO_YOUR_FOLDER"
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder (strPath)
For Each objFile In objFolder.Files
If objFso.GetExtensionName (objFile.Path) = "xls" Then
Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
' Include your code to work with the Excel object here
objWorkbook.Close True 'Save changes
End If
Next
objExcel.Quit
【讨论】:
顺便说一句,要在 VBScript 中获取单元格的值,请使用CellValue = objXL.Cells(X, Y).Value
,其中 X
和 Y
分别是行值和列值。
这个答案对2003年以后的Excel版本不再有效;显然,Application.FileSearch 从 Excel 2007 开始已被弃用。
我已经看到它检测到~$<filename>.xls
可以做些什么来过滤它们?
条件逻辑似乎是最明显的答案。 If Left(myFilenameString, 2) = "~$" Then... 否则我认为您可以获取文件属性并检查是否有任何东西可以将备份文件与原始文件区分开来(不知道副手) .【参考方案4】:
当您连续访问那么多 Excel 文件时,通常使用 ADODB 而不是 Excel 的自动化对象可以获得更好的性能。
【讨论】:
【参考方案5】:如果您愿意,我会在 VBScript 甚至 VB.NET 或 Powershell 中执行此操作。
使用 VB.NET,您可以通过 OLEDB 提供程序访问 Excel 电子表格,就像它们是数据库一样。选择值范围的代码可能如下所示:
Try
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection _
("provider=Microsoft.Jet.OLEDB.4.0;" _
" Data Source='testfile.xls'; " _
"Extended Properties=Excel 8.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter _
("select * from [Sheet1$]", MyConnection)
MyCommand.TableMappings.Add("Table", "TestTable")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
MyConnection.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
获得数据后,您可以对其进行详细说明,然后使用相同的 API 将结果插入另一个 Excel 电子表格。
在 .NET 中通过调用System.IO.Directory.GetFiles()
很容易获取文件列表;只需指定“*.xls”通配符。获得列表后,只需使用 for 循环遍历它,依次打开每个文件,然后对 那个 文件进行查询,依此类推。
如果您使用 VBScript,那么获取 Excel 文件列表的首选方法是使用Scripting.FileSystemObject
,特别是GetFolder method。它的工作方式基本相同,但语法略有不同。
如果它是 VBScript 或 VB.NET,它可能会在 Excel 本身之外运行。您可以通过双击或从批处理文件或类似的东西运行它。使用 VB.NET 的优点是你可以建立一个图形化的交互表单——它可以显示一个进度条,跟踪你浏览了多少文件,状态更新等等。
【讨论】:
以上是关于在excel的指定单元格中输入数据的主要内容,如果未能解决你的问题,请参考以下文章