Reputation: 590
I have an Excel spreadsheet with a number of sheets that will vary from one use case to another. In this example, let's assume I have 3 sheets called "Lever 1"
, "Lever 2"
and "Lever 3"
. For each one of these there are 3 more sheets titled as follows:
For sheet "Lever 1"
- "Lever 1Query1", "Lever 1Query2", "Lever 1Query3"
For sheet "Lever 2"
- "Lever 2Query1", "Lever 2 Query2", "Lever 2Query3"
For sheet "Lever 3"
- "Lever 3Query1", "Lever 3Query2", "Lever 3Query3"
and so on
I am trying to write a VBA script that will input the following formula in all "Lever X"
sheets:
=INDEX('Lever XQuery2'!$C$2:$C$10000,MATCH(1,($F4='Lever XQuery2'!$B$2:$B$10000)*($G4='Lever XQuery2'!$A$2:$A$10000),0))
So far, I have this VBA code which I'm hoping someone can help me fix:
For i = 1 To wBk.Worksheets.Count
Sheets("Lever " & i).Range("I4:I10000").Values = WorksheetFunction.Index(Range("'Lever " & i & "Query2'!$C$2:$C$10000"), _
WorksheetFunction.Match(1, ("$F4"=Range("'Lever " & i & "Query2'!$B2$:$B$10000")) _
* ("$G4"=Range("'Lever " & i & "Query2'!$A2$:$A$10000")),0)
Next i
Upvotes: 1
Views: 205
Reputation: 54983
Query2
. I don't understand the connection to Query1
and Query3
. Hopefully, you mean to do something similar using different formulas.The Code
Option Explicit
Sub copyFormulas()
Const lPattern As String = "LEVER *"
Const lRangeAddress As String = "I4:I10000"
Const qSuffix As String = "Query2"
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim lws As Worksheet ' Each (Possible Lever) Worksheet
Dim qws As Worksheet ' Query Worksheet
Dim lwsID As Variant ' Lever Worksheet ID
Dim lwsName As String ' Lever Worksheet Name
Dim qwsName As String ' Query Worksheet Name
' Loop through all worksheets.
For Each lws In wb.Worksheets
' Write the name of the current worksheet to a variable.
lwsName = lws.Name
' Test if current worksheet follows the pattern.
If UCase(lwsName) Like UCase(lPattern) Then
' Attempt (As Variant) to determine the Lever Worksheet ID ('*').
lwsID = Right(lwsName, Len(lwsName) - Len(lPattern) + 1)
' Test if '*' is a number.
If IsNumeric(lwsID) Then
' Determine the Query Worksheet Name.
qwsName = lwsName & qSuffix
' Attempt to create a reference to the Query Worksheet.
On Error Resume Next
Set qws = wb.Worksheets(qwsName)
On Error GoTo 0
' Test for existence of Query Worksheet.
If Not qws Is Nothing Then
' Write formulas to Lever Worksheet.
lws.Range(lRangeAddress).Formula = "=INDEX('" _
& qwsName & "'!$C$2:$C$10000,MATCH(1,($F4='" _
& qwsName & "'!$B$2:$B$10000)*($G4='" _
& qwsName & "'!$A$2:$A$10000),0))"
Set qws = Nothing
End If
End If
End If
Next ws
End Sub
Upvotes: 1