Excel 2010 VBA引用其他工作表中的特定单元格

对不起,这可能是一个非常基本的Excel VBA问题。 我刚刚开始学习,而且我没有find很好的教程。 我实际上找不到有关这门语言的很多有组织的信息。

我有几张名为“Sheet1”和“Sheet2”的工作表。
Sheet1的第一列和第二列包含一些数字。

我想写一个macros,它打印一个函数的结果,将2个variables(列A和列B各一个)的结果打印到Sheet2。 但是我想在新的工作表中将这些结果放在一起,这样Sheet1中的列'i'上的函数的结果被放入行1和列4 * i中。 这是迄今为止我尝试做的,但它没有奏效,因为我不知道如何正确地引用其他工作表中的特定单元格。

道歉,这是一个非常新的问题,任何帮助,非常感谢!

 Sub results() Dim i As Integer, noValues As Integer noValues = Application.CountA(Range("A:A")) Sheets("Sheet2").Select Range("A1").Select For i = 1 To noValues Range("A1").Offset(0, 4 * (i - 1)).Select ActiveCell.FormulaR1C1 = "=Sheet1!A[i] + Sheet1!B[i]" Next i End Sub 

其中A [i]和B [i]应该是指A栏或B栏第i行的值。

 Sub Results2() Dim rCell As Range Dim shSource As Worksheet Dim shDest As Worksheet Dim lCnt As Long Set shSource = ThisWorkbook.Sheets("Sheet1") Set shDest = ThisWorkbook.Sheets("Sheet2") For Each rCell In shSource.Range("A1", shSource.Cells(shSource.Rows.Count, 1).End(xlUp)).Cells lCnt = lCnt + 1 shDest.Range("A4").Offset(0, lCnt * 4).Formula = "=" & rCell.Address(False, False, , True) & "+" & rCell.Offset(0, 1).Address(False, False, , True) Next rCell End Sub 

循环遍历sheet1的A列,并为每个单元格在sheet2中创build一个公式。 要findSheet1中的最后一个单元格,我从底部(shSource.Rows.Count)和.End(xlUp)开始,获取列中不是空白的最后一个单元格。

要创build公式的元素,我使用Sheet上单元格的Address属性。 我正在使用Address的三个参数。 前两个是RowAbsolute和ColumnAbsolute,都设置为false。 我不关心第三个参数,但是我将第四个参数(External)设置为True,以便它包含表单名称。

我更喜欢从源头到目的地而不是其他方式。 但这只是个人喜好。 如果你想从目的地工作,

 Sub Results3() Dim i As Long, lCnt As Long Dim sh As Worksheet lCnt = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Sheet1").Columns(1)) Set sh = ThisWorkbook.Sheets("Sheet2") Const sSOURCE As String = "Sheet1!" For i = 1 To lCnt sh.Range("A1").Offset(0, 4 * (i - 1)).Formula = "=" & sSOURCE & "A" & i & " + " & sSOURCE & "B" & i Next i End Sub 

我会给你一个简单的答案,希望能帮助你一般的VBA。 学习VBA如何工作以及如何引用和访问元素的最简单方法是录制macros,然后在VBA编辑器中进行编辑。 这就是我学习VBA的方法。 它是基于Visual Basic的,所以VB的所有编程习惯都适用。 录制macros让你看到如何访问和做的事情。

你可以使用这样的东西:

 var result = 0 Sheets("Sheet1").Select result = Range("A1").Value * Range("B1").Value Sheets("Sheet2").Select Range("D1").Value = result 

另外,你也可以使用Cells(1,1).Value引用一个单元Cells(1,1).Value这样,你可以设置variables并按你的意愿增加它们。 我想我只是不清楚你正在做什么,但我希望这有助于。

 Private Sub Click_Click() Dim vaFiles As Variant Dim i As Long For j = 1 To 2 vaFiles = Application.GetOpenFilename _ (FileFilter:="Excel Filer (*.xlsx),*.xlsx", _ Title:="Open File(s)", MultiSelect:=True) If Not IsArray(vaFiles) Then Exit Sub With Application .ScreenUpdating = False For i = 1 To UBound(vaFiles) Workbooks.Open vaFiles(i) wrkbk_name = vaFiles(i) Next i .ScreenUpdating = True End With If j = 1 Then work1 = Right(wrkbk_name, Len(wrkbk_name) - InStrRev(wrkbk_name, "\")) Else: work2 = Right(wrkbk_name, Len(wrkbk_name) - InStrRev(wrkbk_name, "\")) End If Next j 'Filling the values of the group name 'check = Application.WorksheetFunction.Search(Name, work1) check = InStr(UCase("Qoute Request"), work1) If check = 1 Then Application.Workbooks(work1).Activate Else Application.Workbooks(work2).Activate End If ActiveWorkbook.Sheets("GI Quote Request").Select ActiveSheet.Range("B4:C12").Copy Application.Workbooks("Model").Activate ActiveWorkbook.Sheets("Request").Range("K3").Select ActiveSheet.Paste Application.Workbooks("Model").Activate ActiveWorkbook.Sheets("Request").Select Range("D3").Value = Range("L3").Value Range("D7").Value = Range("L9").Value Range("D11").Value = Range("L7").Value For i = 4 To 5 If i = 5 Then GoTo NextIteration End If If Left(ActiveSheet.Range("B" & i).Value, Len(ActiveSheet.Range("B" & i).Value) - 1) = Range("K" & i).Value Then ActiveSheet.Range("D" & i).Value = Range("L" & i).Value End If NextIteration: Next i 'eligibles part Count = Range("D11").Value For i = 27 To Count + 24 Range("C" & i).EntireRow.Offset(1, 0).Insert Next i check = Left(work1, InStrRev(work1, ".") - 1) 'check = InStr("Census", work1) If check = "Census" Then workbk = work1 Application.Workbooks(work1).Activate Else Application.Workbooks(work2).Activate workbk = work2 End If 'DOB ActiveWorkbook.Sheets("Sheet1").Select ActiveSheet.Range("D2").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Workbooks("Model").Activate ActiveWorkbook.Sheets("Request").Select ActiveSheet.Range("C27").Select ActiveSheet.Paste 'Gender Application.Workbooks(workbk).Activate ActiveWorkbook.Sheets("Sheet1").Select ActiveSheet.Range("C2").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Workbooks("Model").Activate ActiveWorkbook.Sheets("Request").Select 'Application.CutCopyMode = False ActiveSheet.Range("k27").Select ActiveSheet.Paste For i = 27 To Count + 27 ActiveSheet.Range("E" & i).Value = Left(ActiveSheet.Range("k" & i).Value, 1) Next i 'Salary Application.Workbooks(workbk).Activate ActiveWorkbook.Sheets("Sheet1").Select ActiveSheet.Range("N2").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Application.Workbooks("Model").Activate ActiveWorkbook.Sheets("Request").Select 'Application.CutCopyMode = False ActiveSheet.Range("F27").Select ActiveSheet.Paste ActiveSheet.Range("K3:L" & Count).Select selction.ClearContents End Sub