[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
Solved

# Sweep a defined area replacing certain values with data contained within an array

Posted on 2014-01-26
Medium Priority
159 Views
Hi,

What I am trying to do is define a two dimension array,

dim mydata (1 to 5, 1 to 2) as string

mydata(1,1)="[version]"
mydata(1,2)="v1.4.3"

Then, when a certain defined range within the sheet is changed, it does a check to see if any of the cells equal mydata(1,-) contain [version] and if they do it replaces them with mydata(,2)

So in this if I type into C3 "[update]" it will become v1.4.3 straight away.

This is my current code, which did work until I tried adding arrays in...

Private Sub Worksheet_Change(ByVal Target As Range)

Dim mydata(1 To 5, 1 To 2) As String

mydata(1, 1) = "[version]"
mydata(1, 2) = "v1.4.3"

For lp = 1 To 40
For lp2 = 1 To 40

For lp3 = 1 To 5
If Sheets("Sheet1").Cells(lp, lp2) = mydata(lp3, 1) Then
Sheets("Sheet1").Cells(lp, lp2) = mydata(lp3, 2)

Beep
End If
Next

Next
Next

End Sub

As you can see I am using a for loop to check 40 x 40 cells, other than fixing the above so it works please :)  Is there a better way to scan 40x40 cells and change values based on criteria from array?

Cheers
0
Question by:DemonForce
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
1 Comment

LVL 81

Accepted Solution

byundt earned 2000 total points
ID: 39810755
Assuming that the users are changing the values of the cells (rather than formulas), you should restrict the operation of the macro to those cells that are changed within the 40 x 40 cell grid of interest. Having done that, you can use VLOOKUP to return the new value.

Note that you need to fully populate the mydata array within the sub.
``````Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range, targ As Range
Dim mydata As Variant, v As Variant
Set targ = Range("A1:AN40")     'Watch these cells for user-initiated changes
Set targ = Intersect(targ, Target)
If targ Is Nothing Then Exit Sub

'Add additional Array blocks within the outer array for other rows in mydata array
mydata = Array(Array("[version]", "v1.4.3"), Array("[version1]", "v1.4.3a"))

For Each cel In targ.Cells
Set v = Nothing
v = Application.VLookup(cel.Value, mydata, 2, False)
If Not IsError(v) Then
Beep
Application.EnableEvents = False
cel.Value = v
Application.EnableEvents = True
End If
Next
End Sub
``````
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This Article briefly covers methods of calculating the NPV and IRR variants in Excel as well as the limitations in calculating and interpreting IRR results. Paraphrasing Richard Shockley, author of my favourite finance reference tex…
After seeing numerous questions for Dynamic Data Validation I notice that most have used Visual Basic to solve the problem. This suggestion is purely formula based and can be used in multiple rows.
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
###### Suggested Courses
Course of the Month12 days, 16 hours left to enroll