I have read in 2 blocks of data as 2D arrays, and wish to create a third 2D array from some of the elements of the first two. When I do this I get an output range that is the correct size, however each row of data in the range is identical. This is what I am using:
[Code] .....
So my main concern is how to get each row of data being printed to Sheet2 to be the correct rows, and not just one row repeated thousands of times.
I am trying to populate many arrays with the same code using something like this. For this test, assume the following data in A1.
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Code: Sub populate() Dim firstArr(5), secondArr(5), thirdArr(5), fourthArr(5), fifthArr(5) As Integer Dim r, c, num As Integer
[Code]....
The above code does not work of course and falls over. I am unsure whether I should try and concatenate with something like this eg "" & arrName(i) = Cells (r,c) or go down a different route.
I am trying to develop some code to serve as an 'undo' for several macros that I have. They each take a selected range and perform some changes to that range. I have managed to make some code that will undo the last macro run but would like to make something that can go back several steps. To that end, I have started with the following code but am running into an issue when I need to use a variant array to hold multiple arrays of a custom defined data type:
VB: Type SaveRange Val As Variant Addr As String
[Code] .....
This declares some public variables I'll need, each as an array so that I can iterate through several steps of do/undo using the undoIndex. I then use them to save each range I am about to change by calling the following macro within my actual data-manipulating macros:
VB: Sub Save_RangeForUndo(rng As Range) Dim i As Integer Dim cell As Range
undoIndex = undoIndex + 1
[Code] .....
If you look at the last line here, this is my problem; I can't figure out how to properly use an array to hold each instance of OldSelection() for later referral. Just for completeness, here is my actual undo macro:
VB: Sub Undo_Operation() Dim i As Integer OldWorkbooks(undoIndex).Activate OldWorksheets(undoIndex).Activate
[Code] .....
I need to get this OldSlctVariant()() array to hold each instance of OldSelection() so that I can restore them for each consecutive undo. I'm not very familiar with the variant type and anything more than the basic use of arrays.
I've written this function to re-dimension an array based on the size of the range it is storing. Originally all my variables were simply declared as:
Code:
Dim XLRecOutput() as Variant
I then wrote a function which took the variable and the range as follows:
Code:
Function LoadRangeToArray(dataArray() As Variant, selectedRange As Range, Optional blnLoadData As Boolean = True) With selectedRange ReDim dataArray(1 To .Rows.Count, 1 To .Columns.Count) End With If blnLoadData Then dataArray = selectedRange LoadRangeToArray = dataArray End Function
Now I've created a class and set up Get/Let properties for the variables instead, but the above function fails with a Compile error on the call - 'Type mismatch: array or user-defined type expected' and I can't get my head around how to resolve it.
I need to calculate a Sums of Products with unusual requirements. Please refer to the attached picture. The Orange Cells under "Noise Weight" are the Formula Cells. The Values in those Cells need to evaluate as shown in the equations below. I want this to be dynamic, so that if I expand the FM Region (Add Columns between "Noise Weight" and "FM15") AND expand the Severity Region (Add Rows between Severity and Noise Weight), I will not have to update Formulas manually. I know for sure that the standard SUMPRODUCT Function cannot handle this.
I am trying to multiply one array of prices for multiple input products across the volume that that product my go into multiple end products.
I know you can use SUMPRODUCT with two arrays that are equal BUT I want to Multiply the price matrix across 15 or 16 other matrices and sum all the products. The price matrix and the other arrays are all 1 x "whatever".
I am retrieving a CSV file from the net. In this file there are 'x' amount of row data and 7 columns. I only care about the values in the 7th column for each row. I also don't care about the entire first row. A graphical version would be represented something like this, with the values I want colored in orange:
I've managed to dice this thing into a jagged array by first splitting it using vbLf as a delimiter, and therefore adding those to an array called Lines(). Then I split Lines() up using commas as the delimiter and threw those into a jagged array, let's call it Breadcrumbs()(). I want to throw all the values from Breadcrumbs(i)(6) into an array of its own. Here's my code so far:
Code: Public Sub CSVparser(file As String) Dim Lines As Variant Dim j As Integer Lines = Split(file, vbLf) ReDim breadCrumbs(UBound(Lines)) As Variant For i = 1 to UBound(Lines) - 1 breadCrumbs(i) = Split(Lines(i), ",") Next i End Sub
I've got a list box which I want to fill with a two column array, with items from a sheet based on a criteria selected by userform fired from another sheet.
Private Sub VariationsApprovedListMake()
Dim ws As Worksheet Dim MyList(10, 2) As String Dim M%, n%
I have a list of values in a column that I want to enter into an array. The values are linked from a database and as such the number of values that are in the column can change. At the moment I am populating the array using the code below. I have made the array much larger than it needs to be to accommodate for the possiblity of more data being entered into the database and my loop also accounts for this by adding extra values into the array. Just wondering if there was a more efficient way to
a) Dimension the array and b) Populate the array so that only the data I need is entered into the array
Dim ClassArray(40) As String 'Save Classes as an array For j = 0 To 39 ClassArray(j) = SourceWB. Sheets("HMI Class"). Cells(j - 2, 1).Value
I have a VBA form and on form initialize I want to populate a combo box… My array to populate it with could be a massive list so I need to set my array before it populates
I have this code so far but I need my array to be from A5 to the last row in sheet 1
I know how to set an exact range but not one that changes.
VB: Dim myArray As Variant myArray = With Me.ComboBox1 .List = myArray End With
Here is a sample of the data I need to populate in the combobox.
I have a complicated one here (at least for me)...
I have a very simple sample spreadsheet showing exactly how I'd like it to work but couldn't find out where to upload it? I can upload or send to you privately, if need be? May make it much easier to understand the desired end result.
I want to populate as follows:
Column A: "IN TIME" Column B: "NAME" Column C: "POSITION"
I have a date in cell D1 - today().
I need to search for that date in a column between range AA2 and BN2. When it finds the date (let's say it finds a MATCHing date in AA2), it will then search that entire column cells AA30:AA1920 and look for "server". When it finds "server" it will then grab the in time which will always be 4 cells directly above where it found the position ("server"), and then the name of the person, which will always be in column X, 6 cells above the position.
There will be multiple instances of "server", and I want to populate the columns A, B, C with all the servers it finds first for that day with their name, in time and position. then a blank row.
Then, I want it to find "Bar" positions using the same formula and method, and populate that right below the server data, then find "line", etc.
Ultimately, I'm trying to make a daily staffing plan, where all the people that are working on that date, it will show their in time, name, and position in columns, A, B, C as far down as necessary.
However, I'd like them auto grouped together by position, so I'd like the formula to somehow populate all the servers first, then all the bartenders, then hosts, then line, etc.
I have a range of cells that I want to use as column headings. Say the range is A1:A100. I need them to be able to be transposed across the first row of the sheet. Now I know that I can use the transpose function in a cell but this array is embedded in a macro.
I am trying to take selected items from a listbox and put the selected items into an array. Basically I am trying to put the selected items into a variable that I can pass to other modules. I am close but something is off. I can't tell if it's the variable declaration or the code.
I get Run Time error 91. Object variable or with block variable not set
Trying to load an array from user selected items in a listbox
My code returns Type Mismatch error
I don't know why as a I did not declare type for the array I thought treated as variant so should accept any values?
Debug:
arrSelected(intI) = .Selected(intI)
Private Sub btnOK_Click() Dim arrSelected Dim intI As Integer With Me.lstAccounts For intI = 0 To .ListCount - 1 If .Selected(intI) Then arrSelected(intI) = .Selected(intI) End If Next intI End With
But I need the array to be public as the array can hold one of 6 different sets of values so I will declare the array to be only used within the module as:
Dim CurOptions(30)
Later I need to fill in the values manually, they will not be copied in, they need to be provided in a list.
i have two fields with dates - one field A1 for date authorised (for a data request) and one field B1 for date actioned (data request)
i need a formula to populate in C1 the following:
if A1 is blank then C1 is 'not actioned' if B1 is blank then C1 is 'not complete' if both contain dates then C1 to calculate the number of working days between the dates eg. A1 10.08.09, B1 11.08.09...C1 = 1 working day
I have been trying to solve this problem by breaking it down to it's core elements and it seems to hang up at a certain spot but I can't figure out why.
formula is: {=LARGE(IF(AND(Array1+8<20,6-Array1<0),Array2,0),1)} where: Array1 is a sequence of numbers, say, 2 5 8 11 14 17 Array2 is a corresponding sequence of numbers 1 2 3 4 5 6
the resulting array should return the numbers 0 0 3 4 0 0 and my answer should be 4 instead my answer is 0
when I break it down and select six cells and use the formula: {=if(Array1+8<20,Array2,0)} my result is: 1 2 3 4 0 0
and another six cells and use the formula: {=if(6-Array1<0,Array2,0)} my result is: 0 0 3 4 5 6
when I select a single cell and use the formula: {=large(if(Array1+8<20,Array2,0),1)} my result is: 4
when I select a single cell and use the formula: {=large(if(6-Array1<0,Array2,0),1)} my result is: 6
I've tried this method several different ways, even using "Yes" & "No" as my result and then try to match them up. I've tried doing this not using named array and just selecting the cells themselves for the formula. All with the same results.
I have a worksheet that has 20 columns and 500 rows. I created a VBA macro to loop through the data to hide rows that do not meet certain criteria. After the data is selected I copy and paste those selected rows to another sheet. The macro works well but I would like to use an array to contain the data that I copy and paste to a new sheet. I have been trying to find information on multi deminsion arrays but I have not been able to fully understand how to get the information into the array and then how to get it out again. Most of the examples that I have seen are for two maybe three columns (dimensions). I am hoping that someone could point me in the right direction to get started on this. I also have a few books on Exel VBA but none of them seem to address my question.
I am trying to fill calumn B with the data from an array. There are more rows than entries in my array and I want to loop back to the start of my array when it reaches the end of the array results.
Sub test()
Dim i As Integer, MyArray As Variant, RowCount As Integer, ArrayCount As Integer
The formula is designed to sum a set of data based on 22 variables between a certain date range. In order to keep the formula manageable, I have grouped the variables into arrays.
Each array (listed horizontally on one spreadsheet) calls a specific column of data to match from a different worksheet. I have no problem if only applying one array but multiple arrays return incorrect values.
I have two 2 Dimensional String Arrays with data. I need to find a way to get the difference between these two Arrays. I am new to VBA, I don't know how to deal with these. I certainly feel that there is some efficient function for doing this. or Is the naive two for lop concept is the only way to go?