Solved

MS Excel - Array MATCH type mismatch

Posted on 2011-09-14
4
301 Views
Last Modified: 2012-05-12
Continuation of prior question -  "elegant" solution is generating at type mismatch on the match function of an array item within an array.  The goal is to build an new array for a report extracting the necessary data from various existing arrays in various column locations.  Also, the column that is being 'matched' is the first column in each of the arrays.

For x = 1 To RptRows
      ' (error is generated here)
      ID_Fnd = Application.Match(ReportArray(x, 1), Application.Index(ProdArray, , 1), 0)
      ReportArray(x, 7) = ProdArray(ID_Fnd, 2)
Next x

Watch is showing the following:
   ReportArray(x,1) -  variant/long
   Application.Index(ProdArray, , 1) -  variant/variant




0
Comment
Question by:uad
  • 2
4 Comments
 
LVL 10

Expert Comment

by:SANTABABY
Comment Utility
Could you please supply some surround code?
I'm curious to see how ReportArray and ProdArray are defined?
Would be great if you can attach a sample spreadsheet with the code & data where the problem occurs.
0
 
LVL 81

Accepted Solution

by:
zorvek (Kevin Jones) earned 500 total points
Comment Utility
I don't think the Application.Index function works on non Variant arrays. This should work:

    Dim x As Long
    Dim y As Long

    For x = 1 To RptRows
        For y = LBound(ProdArray, 1) To UBound(ProdArray, 1)
            If ProdArray(y, 1) = ReportArray(x, 1) Then
                ReportArray(x, 7) = ProdArray(y, 2)
                Exit For
            End If
        Next y
    Next x

Kevin
0
 

Author Comment

by:uad
Comment Utility
I will try this and get back to you.

From a resource and speed perspective - rather than looping through to find ReportArray(x,1) value for all the rows,  would it make more sense to create a MatchArray with only the ID in the identical sequence as the ProdArray and still use the Match (& Index) as was first suggested?

    ReDim ProdArray(xRows, 2)
    Dim MatchArray(xRows)
    Range("A1").Select
    For x = 1 To SchCPRows
        ProdArray(x, 1) = ActiveCell.Value
        MatchArray(x) = Activecell.value
        ProdArray(x, 2) = ActiveCell.Offset(0, 1).Value
        ActiveCell.Offset(1, 0).Select
    Next x

    Dim ID_Fnd%
    For x = 1 To xRows
        ID_Fnd = Application.Match(ReportArray(x, 1), MatchArray, 0)
        ReportArray(x, 7) = ProdArray(ID_Fnd, 2)
    Next x
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
Comment Utility
You could do it that way. But looping through a few hundred elements of an array is pretty fast.

Kevin
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This is pretty cool.  The purpose of this VB Script is to help you document where JAR (Java ARchive) files and specifically java class files are located so that you can address issues seen with a client or that you can speak intelligently with a dev…
This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
The view will learn how to download and install SIMTOOLS and FORMLIST into Excel, how to use SIMTOOLS to generate a Monte Carlo simulation of 30 sales calls, and how to calculate the conditional probability based on the results of the Monte Carlo …
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now