Search Substring Of Array Matching List Of String From Another Array?
Dec 20, 2013I need to export this to Xcelsius which doesn't support any macros/vba. Btw I can;'t use Row() in xcelsius too.
[Code].....
I need to export this to Xcelsius which doesn't support any macros/vba. Btw I can;'t use Row() in xcelsius too.
[Code].....
I wish to search for a substring within an array of strings and just return back an indication that the substring exists withing that array.
so for instance let the substring be "rang"
and let the array be
{"apple","orange","lemon"}.
I wish to put a single command line next to my substring and wish to search through that range and return a key code if it exists. And then I will repeat the same search for other substrings. For the moment being, I don't care too much about the number of occurences or the exact cell address where they occur. All I wish to know is whether they exist in that list or not.
So it looks to me it is like a SEARCH command but except on a range of text (Rather than a single text) with an array formula. I have tried MATCH but my case is not an exact match either.
I am trying to do a sort of index match thing using VBA. What I am attempting to do is to use the prefix of a long number and try to find that exact prefix in a string array, and output that string array value. So this is what I have so far as a test:
[Code].....
So I can match the text exactly so if I put PREFIXB in cell A1 in this example, i will get the msg box saying "YES", but if I make it PREFIXB1231k4j3jj1kj32cj, it will display "NO". I want to get it so that PREFIXB will be displayed in the cell that I put the formula in. So if A1 = "PREFIX1AAA100CF" and cell B1 = "=ABC(A1)", cell B1 will display "PREFIX1AAA".
Now the thing is that these prefixes can have different lengths, but will never encompass the exact prefix of another. So if I had a prefix of: PRE1AB, I won't have a prefix of PRE1A.
Let us say I have the following text in Cell A1. "There is a fault in the cal cycle.Need to update the records." And in cell A2 I have the following text. "Called for backup assistance. There is an issue with numbers." I cells B1 & B2 I need a particular formula which searches for the substring "cal" exactly and returns true if present. In cell A1, we have "cal" in the text. So it should return true for me in cell B1.
However in cell B2 I need false to be returned even though I have "Called" inside the text. I need true to be shown only for those cells where we have the exact text "cal" and no text characters in front or back of it.
(I need to do this using VBA so that it can work as an excel macro and/or a vba function in access.)
How can I extract the first occurance of any substring over a certain character length from within a string ?
eg. My string may take any of the forms given below (or something similar), how can I extract the first set of characters that is at least (say) 4 characters long ? i.e. always get the 'Phillips' out of the below...
Phillips Homes Ltd
Mr T A Phillips
TA Phillips Homes Ltd
T A Phillips Homes Ltd
T. A. Phillips Homes Ltd
The names used are only an example (Phillips could be any name whatsoever).I am familiar with Search, Len, Left, Right, Mid, Instr etc. but just can't figure this one out.
in C a string is nothing more than an Array of characters ending with a null character.
in VBA this does not seem to be the case.I am trying to use the BlowFish code from David Midkiff for some encryption, however the code sometimes fails:
When encrypting a string a string of a specific length should be returned. however sometimes one of the characters of the encrypted string is a null character, and the returned encrypted string (with a embedded null character) is causing me problems. I want to check for the null character and if present redo the encryption. But how do I check for the presence of this null character in a unicode (double-byte) string?
Checking with Len(encrypted) gives the correct length (!) but trying to move each (unicode)character into an array fails when using the Mid() function past the null character in the string.
Now I can use
byteArray() = StrConv(unicodetext,vbFromUnicode)
to get the lower byte of each character into an array easily, but how do I do this for both bytes of the unicode characters?
Using an integer array does not work other than through
intArray(j) = CInt(AscW(Mid(Outp, j, 1)))
which fails on the nullstring in my encrypted text.
I have tried with variants but so far no luck. I thought if the string was entered into a variant then I could also address the variant as an array of bytes, but that does not seem to be accepted by VBA.
I have a class module with several private variables, including one that is an array of a user-defined type. I am trying to set the values of a single element of this array with "Property Let ..." from a string array:
View 4 Replies View RelatedAssume that I have in Sheet2 a list of CUSTOMIZED name.
[Code].....
Now in Sheet1, I have data in column A that has strings consist of the customized name.
For example
[Code] .....
What function should I use that could give me the result of the CUSTOMIZED name?
I was thinking of a formula i.e.
[Code] ......
Obviously, the above formula give me error. Even if it works, it'll not give me the customized name ...
I am trying to make a simple formula to populate a cell with the first matching substring found in a data cell (from a fixed list of substring keys).
Example of desired results:
Substring data: {X, YY, ZZ} (typically 6 to 15 values in real world use)
Data..........Calculated result..........Comment
AAX.................X........................Substring X was found in Data.
ABC.............[empty]...................None of substrings were (X, YY, ZZ were found)
XYYZZ.............X......................(only first match need be returned)
ABCZZ.............ZZ....................Substring ZZ found etc….
I am looking for something cleaner than nested if statements since there are likely to be a lot of values and different variations. The work would then be to copy the formula and populate the list of substrings to search for in the data. I tried some array formulas using search() but no luck so far.
In attempting to answer another post, I came up with this code to try to test whether data in columns "p" through "w" matched data in columns "a" through "h".
The problem is, it's acting as though everything is a match, and in my test sheet, I have some data that matches, and some that does not match.
It just highlites the whole range.
Here's the sample data:
******** ******************** ************************************************************************>Microsoft Excel - Book2a.xls___Running: 11.0 : OS = Windows XP (F)ile (E)dit (V)iew (I)nsert (O)ptions (T)ools (D)ata (W)indow (H)elp (A)boutA1=ABCDEFGHIJKLMNOPQRSTUVW1abcdefgh pqrstuvw2abcdefgh pqrstuvw3abcdefgh abcdefgh4abcdefgh pqrstuvw5abcdefgh pqrstuvw6abcdefgh pqrstuvw7abcdefgh abcdefgh8abcdefgh pqrstuvw9abcdefgh abcdefghSheet3 [HtmlMaker 2.42] To see the formula in the cells just click on the cells hyperlink or click the Name boxPLEASE DO NOT QUOTE THIS TABLE IMAGE ON SAME PAGE! OTHEWISE, ERROR OF JavaScript OCCUR.
And here's the
Sub deldupes()****'if data in p through w matches data in a through h, delete p through w****Dim ah()****Dim pw()****Dim arrcount As Integer****Dim cell1 As Range, cell2 As Range****Dim DataCount As Integer****Dim Counter As Integer****'change the sheet name as necessary.****With Worksheets("Sheet3")********DataCount = .Range("A" & Rows.Count).End(xlUp).Row********ReDim ah(1 To DataCount)********For Each cell1 In .Range("A1:A" & DataCount)************If IsEmpty(cell1) Then GoTo nextcell1************For Counter = 1 To 8****************x = x & .Cells(cell1.Row, Counter)************Next Counter************arrcount = arrcount + 1************ah(arrcount) = xnextcell1:********Next cell1********DataCount = .Range("P" & Rows.Count).End(xlUp).Row********For Each cell2 In .Range("P1:P" & DataCount)************If IsEmpty(cell2) Then GoTo nextcell2************For Counter = 16 To 23****************x = x & .Cells(cell2.Row, Counter)************Next Counter************On Error Resume Next************y = WorksheetFunction.Match(x, ah, 0)************If y = "" Then****************With .Range("P" & cell2.Row & ":W" & cell2.Row).Interior********************.ColorIndex = 6********************.Pattern = xlSolid****************End With************End Ifnextcell2:********Next cell2****End WithEnd Sub
I realize that:
If y = "" Then
should be:
If y "" Then
How do you load an array with values from cells matching a criteria?
I want to look for the number 1 in row 5 and put the Adjacent values in Row 2 in an array.
So here my array should have 1,3,6
Dim CountOne As Integer
CountOne = Application.WorksheetFunction.CountIf(Worksheets("Tool Administration Form").Range("B8:AE8"), "1")
Dim All As Variant
Dim rCell As Range
Dim ArrCnt As Integer
Dim lArrVar As Long
ArrVar = 0
Do
For Each rCell In Worksheets("Tool Administration Form").Range("B8:AE8")
If rCell = 1 Then
ArrCnt = ArrCnt + 1
All = Cells(-3, 0).Value
End If
Next rCell
Loop Until ArrCnt = CountOne
I keep getting errors... I don' tknow how to fill the array properly wiht the values in the cells.
Example:
A B C D E F G
1
2 1 2 3 4 5 6 7
3
4
5 1 2 1 3 3 2 1 4
I have an Excel spreadsheet (XP - 2007) listing Job Nos. in the first column, with several columns of Station assignments and dates.
Both planned dates and actual dates are included, adjacent to each other. The dates are not necessarily in a straight ascending or descending order. Separate arrays exist for: Plan Nametags, Actual Nametags, Plan Dates, Actual Dates.
Example:
Job No.Sta1 PlanSta1 ActSta2 PlanSta2 ActSta3 PlanSta3 Act1A10001-Feb-101-Feb-106-Feb-106-Feb-101-Mar-101A100116-Feb-1016-Feb-1019-Feb-1022-Feb-105-Mar-101A100225-Feb-1025-Feb-102-Mar-104-Mar-1010-Mar-10@
@
I need to capture two pieces of information for each Job No. on a daily basis:
1- The 'Planned' Station for the build, based on a match of the 'Plan' date fields to a pre-populated 'Report Date'.
I've been able to do this (using INDEX-MATCH function).
2- The 'Actual' Station location for the build, based on the Maximum 'Actual' date entry in the row for each build.
(In the example above, Job# 1A1001 would have an 'Actual' location of 'Sta2 Act'...)
I need to figure out how to accomplish step (2) above. I've made several attempts with INDEX-MATCH and LOOKUP functions, without success.
im currently using a static array to select multiple sheets at once which works alongside another Sub
Sheets(Array("Group1", "Group2", "Group3", "Group4")).Select
i have a button that creates a new sheet and names it "GroupX" X being the next number, it automatically adds on the right number by itself and it works fine...
i want it my array to be dynamic so that i dont have to manually edit the array and the macro every time i add a new sheet.
i have tried things like:
Dim MyArray As Variant
Dim Shts As String
K = Sheets.Count - 4
For p = 1 To K
Shts = "Group" + p
Redim MyArray(K) As String
MyArray(K) = Shts
Next p
Sheets(MyArray(K)).Select
I would like to have a formula in one cell that finds records on another sheet that meet certain criteria, and produces a sum of the total quantities associated with that record. The attached workbook has more details as to what I am trying to do.
View 2 Replies View RelatedI'm having a difficult time returning COUNTIF values for a positive match between 2 columns THAT meet a certain condition. Basically I want to iterate through column A sheet 1 (ONLY for values where column B is paid) and return a count for every instance there is a match of value A sheet 1 in column A sheet 2. In other words, I'm looking to find the number of ids marked as paid from Column A sheet 1 that exist in Column A sheet 2. I don't wish to return the actual ids, just the total count.
I've tried the following but I know there's an error in iterating through Column A the way I have it:
=COUNTIFS(Sheet1!$ColA:$ColA,Sheet2!$ColA:$ColA,Sheet1!$ColB:$ColB,"paid")
Sheet1:
ColA
ColB
123
paid
[Code] .....
Sheet2:
ColA
ColB
23
NY
[Code] .....
This follows on from my previous posting [URL] ..... which produced a solution using an ActiveX Combobox that unfortunately does not work on Mac PCs!
I tried to replace the ActiveX with a Form Control Combobox but could not make it work.
So I am trying to use the alternative of "find, copy and paste" the relevant information.
As shown on the attached 140207 FINDALL test.xlsm, I need to find all records containing whatever string is entered into the "Search" cell, and copy data form three columns onto the Entry sheet.
The User will then select whichever of the entries they want to use, which will populate the relevant cells.
Problem: The following Code is not recognising any of the data in the Column being searched.
VB:
Option Explicit
Sub FINDPARTS()
Dim ws As Worksheet, i As Integer, k As Integer, z As Integer, CL, myFind, CHOICE As Range, lr As String, lrG As String,
[Code] ......
I have a two dimensional array that I need to search, and copy a value to the sheet I am using.
Example Array
code1 name1
code2 name1
code3 name4
Sheet
ColumnA ColumnB
code2
code4
code1
code3
I need to fill in columnB with the corresponding name, leaving it blank if the code does not exisit in the array.
What I have attempted (unsuccessfully) so far is below. I keep getting an Error at the If DataArray(y, 0) = majorcode line.
Dim datatotalrows As Integer
Dim listtotalrows As Integer
Dim majorcode As String
Dim clientname As String
Dim y As Integer 'variable for array
Dim x As Integer 'variable for data
datatotalrows = Range("A1"). CurrentRegion.Rows.Count
I have an array of data with multiple codes stored in text...
I want to set a formula in a cell to look for all instances of specific text in an array. Then compare the value of all of the column headings, which are numbered across the top of the array, which contain a match in that column and return the highest value.
Example: 10x10 array, columns 1,3, and 5 contain "text" somewhere in those columns. Formula would return 5.
Is there a way to find the last matching row in an array? For example, I can find the first matching row in an array by using the MATCH function. Is there a way to search through the array backwards?
Ex.
OrderID
10567
10569
10571
10573
10571
If I use =MATCH(10572, A2:A6,1), I will get the result "3". How can I get the result "5" (to tell me the row number of the last match)?
A more accurate example of what I am trying to do would be:
OrderID
1
1
1
3
3
3
If I feed the number 2 in as my search value, I want to know the range of rows where the OrderID is less than or equal to 2. In the case above, it would be rows (assuming "OrderID" is in row 1) 2 through 4. I can get "2" back by using =MATCH(2,A2:A7,1), but I don't know how to get "4".
i am currently using the following array formula to search a range for a value and return its self refrence however i need to modify it as at present it will only return exact matches i need it to be able to search a string find a value and return the cell refrence
View 4 Replies View RelatedHi again, I am trying to find the easiest way to repeatedly search a large matrix (300,400) for a particular value. I have used two for loops in the past but its starting to get complicated now. Is there a workaround using application.worksheets.something that I could get a true of false reply? Someone may suggest that I create a function that replys back. I am new to VB and I am not sure how to send a matrix of integers to a function (syntax).
View 8 Replies View RelatedI have list of strings to be searched in column A2 to A150 (A1 has column title). The array that needs to be searched is in B2 to AG1000 (B1 to AG1 has column title). I want each string in column A to be searched in the full array. If match is found the corresponding column title (B1 or C1 and so.) and cell address needs to written to a new result columns in AY and AZ. it should work for duplicates as well i.e. the string can be in all the columns of array from B to AG. and all of them needs to be written to result column.
View 9 Replies View RelatedI'm trying to verify if a cellvalue is available in an array. Here is the code:
First I tried to check if the cellval is in the array by returning a -1, 0 or 1:
Code:
If UBound(txt, cellval) = 0 Then
-> returns zero for value "h3", but also for value "3"
(where cellval the value in the cell is)
(with txt being the array containing "h3,r8,ty657", etc)
But I need only the If to be true when there is an exact match.
I have defined array say like this:
Dim myarray (1 to 5, 1 to 2)
Is possible to define something like this?
myarray (x, 1) as string
myarray (x, 2) as integer
x is anything between 1 to 5 .
Say I have a string, "a test array." I want to split this into an array where each character is an element. I was thinking something like
Dim MyArray As Variant
Dim MyString As String
MyString = "a test array"
MyArray = Split(MyString, "", Len(MyString), vbTextCompare)
But this doesn't work because Split() returns the entire string when the delimiter is a zero-length string.
I'm trying to pass an array of UDT from Excel to a C++ dll but I have no idea how. My UDT looks like this
Private Type Student
Age As Integer
Name As String
StudentID As String
End Type
And my dll function declaration..
Declare Function RegisterStudent Lib "SimpleDLL.dll" _
(arr() as Student) As String
.. which will return a unique Id in string
I have a string (PreString) that gets its values from a procedure call (PreResult). The string consists of 4 values for each loop which I then split into the y array.
I then want to transpose the array to the worksheet for sorting.
I don't really get the transpose to work as I want to. I want every 4:th y to be printed on a new row (x). I don't really know how to use the Ubound function to get it right.
Should I make a 2 dimensional array instead ? If so, how is that made ?
Dim x As Integer, z As Integer
Dim var_Status As Integer
Dim var_Week As String
Dim var_HoursPerWeek As Integer
Dim PreString As String
i = var_StartWeekNr
j = var_RangeNumberOfWeeks
z = 0
x = 0
var_Status = 0
var_Week = ""
var_HoursPerWeek = 0
PreString = ""
want to match column A to column C and if they match take whats in column D and put it in column B.
Column C has multiple instances of Column A and I would like each instance's, which is the following column, value put into column b
I'm looking for a formula that can determine whether a given sub-string appears in a string. For example if cell A1 contains the string "bathing", and cell A2 contains the sub-string "bat", the formula in A3 would return "TRUE".
However, if the sub-string in A2 is changed to "cat", the result in A3 would be "FALSE". The formula would need to work with strings of different and unpredictable lengths.
I have a formula which I took from another post to return a particular value in a specified cell as follows;
=INDEX(A1:E9,M3+MIN(IF(A1:E9=K3,ROW(A1:E9)-3)),N3+MIN(IF(A1:E9=K3,COLUMN(A1:E9)-1)))
However I don't understand what the -3 and -1 does and I believe it is these entries that are causing the error.
See attached file : TEST.xlsx‎