如何将单元格值从WorkSheet1复制到WorkSheet,或者,如何使用VBA在Excel中创build主表?

我正在尝试创build一些我拥有的excel数据的主列表。 我从来没有使用Excel + VBA程序/代码。

WorkSheet1中有两列。 Column1是某种词汇的术语,而Column2则是Column1的定义。 现在,我必须复制该Column1的定义,并在WorkSheet2中相应的Column1旁边放置Column2(如果为空,如果不是,则在Column3或下一个空列中)。 继续为WorkSheet1中的其余行执行此操作。 基本上不应该重复相同的值。 WorkSheet2中的Column1可以有多个定义列,只要它们不相同。

这有道理吗? 有没有可能做这样的事情? 提前致谢!

欢迎来到Excel VBA。 如果我正确理解你的post,这应该给你(至less是基本的)你以后的东西。 这可能需要根据您的具体工作簿和数据集来调整,但这会给您一个很好的开始。 在我使用的所有方法/程序中都有大量的帮助,而且我已经试着用英语评论,所以你可以理解正在发生的事情。

Option Explicit Sub MoveIt() Dim wkb As Workbook Set wkb = ActiveWorkbook 'change to your workbook reference Dim wks1 As Worksheet, wks2 As Worksheet Set wks1 = wkb.Sheets("Sheet1") 'change to your name / definition sheet Set wks2 = wkb.Sheets("Sheet2") 'change to the sheet where you need to paste defintions With wks1 Dim rngLoop As Range, cel As Range 'assumes row 1 as column header, and definitions in Column B (2) Set rngLoop = Intersect(.UsedRange, .UsedRange.Offset(1), .Columns(2)) 'basically all rows with definitions in Column 2 For Each cel In rngLoop 'loop through each definition Dim rngFound As Range 'look for associated definition name in 2nd sheet 'assumes Name in Column 1 of both worksheets Set rngFound = wks2.Columns(1).Find(cel.Offset(, -1).Text, lookat:=xlWhole) If Not rngFound Is Nothing Then 'if the name is found 'look to see if defintion already exists in row aligned with Name of 2nd sheet Dim rngFoundAgain As Range Set rngFoundAgain = rngFound.EntireRow.Find(cel.Text,lookat:=xlWhole) 'if not found If rngFoundAgain Is Nothing Then If rngFound.Offset(, 1) = vbNullString Then 'if next cell (row of rngFound, column B) is blank rngFound.Offset(, 1) = cel.Text Else 'go the right most cell and place definition in next column rngFound.End(xlToRight).Offset(, 1) = cel.Text End If End If End If Next End With End Sub 

问题解决了,感谢斯科特。 如果单元格保存更多的字符比Excel的标准最大。 然后在第一个“If NOT …”语句里插入这段代码而不是这行代码,在这一行中Set rngFoundAgain = rngFound.EntireRow.Find(cel.Text,lookat:=xlWhole)

 Set rngFoundAgain = rngFound.EntireRow.Find(Left(cel.Value, 255), lookat:=xlWhole)