Home |
Search |
Today's Posts |
|
#1
![]() |
|||
|
|||
![]()
I'm trying to do a somewhat complicated find in VBA.
I have a worksheet with column B having only two different values (eg. a and b). Column C has values that repeat for each value for column B. (eg. 1 and 2). The values that I want to return are in columns E and F. So what I'm trying to do is this: If columns B and C equal "a" and "1" (respectively), then subtract the values in E and F (on that row where the columns equal) and return that result on another worksheet. Repeat for all the different combinations...a1, a2, b1, b2. To illustrate: Code:
Column B | Column C Column E | Column F a 1 70 50 a 2 80 30 b 1 60 20 b 2 40 20 Sorry if this is an overly long explanation, I feel like it's confusing to explain. Let me know if anything needs to be clarified. As always, any help is appreciated! EDIT: If formulas can be used for this that'll work too. I can incorporate them into my VBA code. I'm messing with the Index and Match, but I'm not having any luck. I basically need to look up two different values and return two different values (and subtract them). I'm not sure if this is possible in a formula. Last edited by KeriM : August 14th 12 at 05:01 PM Reason: Adding Information |
#2
![]() |
|||
|
|||
![]() Quote:
Is there a reason this needs to be done with VBA? There are formulas you could use to complete this calculation directly in the cell. EDIT: Your edit answered this question. Last edited by Spencer101 : August 14th 12 at 06:24 PM |
#3
![]() |
|||
|
|||
![]()
I'm trying to automate this process as much as possible. This is a bit of a pain to do manually. The workbook that I'm wanting to find all this information in cannot be written in. Can I do this in the workbook I want to copy the final result to?
|
#4
![]() |
|||
|
|||
![]() Quote:
But I suppose it really depends on what you're going to do with that second workbook after the calculation. Maybe you'd still need VBA to make the looked up value static rather than the shown result of a formula. My VBA knowledge isn't great so you may be better placed to decide if that would work for you or if a full VBA solution would be worth hanging on for. |
#5
![]() |
|||
|
|||
![]() Quote:
|
#6
![]() |
|||
|
|||
![]() Quote:
So you need to show three values (first, second and the difference between) for each combination in columns B & C? I have a horrid feeling I'm completely misunderstanding what you're trying to achieve here... perhaps an example workbook would be a good idea? |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
KeriM brought next idea :
I'm trying to do a somewhat complicated find in VBA. I have a worksheet with column B having only two different values (eg. a and b). Column C has values that repeat for each value for column B. (eg. 1 and 2). The values that I want to return are in columns E and F. So what I'm trying to do is this: If columns B and C equal "a" and "1" (respectively), then subtract the values in E and F (on that row where the columns equal) and return that result on another worksheet. Repeat for all the different combinations...a1, a2, b1, b2. To illustrate: Code: -------------------- Column B | Column C Column E | Column F a 1 70 50 a 2 80 30 b 1 60 20 b 2 40 20 -------------------- I want to find a1 and write "20" in another worksheet. Well, following your example you'll get the values: 20 50 40 20 to be written in another worksheet. Randomly? Bruno |
#8
![]() |
|||
|
|||
![]() Quote:
|
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Monday, August 13, 2012 10:48:25 AM UTC-5, KeriM wrote:
I'm trying to do a somewhat complicated find in VBA. I have a worksheet with column B having only two different values (eg. a and b). Column C has values that repeat for each value for column B. (eg. 1 and 2). The values that I want to return are in columns E and F. So what I'm trying to do is this: If columns B and C equal "a" and "1" (respectively), then subtract the values in E and F (on that row where the columns equal) and return that result on another worksheet. Repeat for all the different combinations...a1, a2, b1, b2. To illustrate: Code: -------------------- Column B | Column C Column E | Column F a 1 70 50 a 2 80 30 b 1 60 20 b 2 40 20 -------------------- I want to find a1 and write "20" in another worksheet. Sorry if this is an overly long explanation, I feel like it's confusing to explain. Let me know if anything needs to be clarified. As always, any help is appreciated! -- KeriM Send file to dguillett1 @gmail.com with this msg and a complete explanation with examples. |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Mon, 13 Aug 2012 15:48:25 +0000, KeriM
wrote: I'm trying to do a somewhat complicated find in VBA. I have a worksheet with column B having only two different values (eg. a and b). Column C has values that repeat for each value for column B. (eg. 1 and 2). The values that I want to return are in columns E and F. So what I'm trying to do is this: If columns B and C equal "a" and "1" (respectively), then subtract the values in E and F (on that row where the columns equal) and return that result on another worksheet. Repeat for all the different combinations...a1, a2, b1, b2. To illustrate: Code: -------------------- Column B | Column C Column E | Column F a 1 70 50 a 2 80 30 b 1 60 20 b 2 40 20 -------------------- I want to find a1 and write "20" in another worksheet. Sorry if this is an overly long explanation, I feel like it's confusing to explain. Let me know if anything needs to be clarified. As always, any help is appreciated! How long is your list? Is the data contiguous? Do you want to store the result in the same row on the other worksheet? Setting those questions aside I'd suggest either a FOR/WHILE loop. I suppose there are more elegant methods and most experts try to avoid loops but they can be quite fast for a simple operation like this and the code is easy to understand. For i = first_row to last_row if cells(i, "B") = "a" and cells(i, "C") = 1 then _ worksheets(othersheet).cells(i, "A")= cells(i, "E") - cells(i, "F") Next i This all assumes I understood your question and there are several details to check to meet what you really have to work with. John Keith |
#11
![]() |
|||
|
|||
![]() Quote:
You understand what I'm trying to do. To answer your questions: How long is your list? 401 rows, but that may change (I'd rather not hard-code it) Is the data contiguous? Yes Do you want to store the result in the same row on the other worksheet? I need to store the results in the same column, but different rows. Your solution so far makes perfect sense. I tried modifying this part for my code: Code:
For i = first_row to last_row If cells(i, "B") = "a" and cells(i, "C") = 1 Then.... I'm also having a problem with what it's supposed to equal to since those values are not the only values in the cells. It doesn't just say "a" in the column I'm searching for. It says something like "a 2342 332" and it doesn't just say "1" in column C, it says "abcdefg (1bb)." Point is, I have more than just the string I'm searching for in the cells. Do you know how I can use wildcards in the search? Thanks, you've been really helpful so far! |
#12
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
As usual there are many ways to address the next requirements for
testing the cell contents as you describe below. But the simplest solution I would use would be to test the cell to see if it contains "a" or "1" by using the instr function like this: For i = first_row to last_row if instr(cells(i, "B")',"a")0 and instr(cells(i, "C"),"1")0 then _ worksheets(othersheet).cells(i, "A")= cells(i, "E") - cells(i, "F") Next i The second line in the loop will store your result in the same row on the target sheet as the source sheet. For only 400 lines of data the for loop will be very fast. On Wed, 15 Aug 2012 14:20:15 +0000, KeriM wrote: John Keith;1604636 Wrote: On Mon, 13 Aug 2012 15:48:25 +0000, KeriM wrote: - I'm trying to do a somewhat complicated find in VBA. I have a worksheet with column B having only two different values (eg. a and b). Column C has values that repeat for each value for column B. (eg. 1 and 2). The values that I want to return are in columns E and F. So what I'm trying to do is this: If columns B and C equal "a" and "1" (respectively), then subtract the values in E and F (on that row where the columns equal) and return that result on another worksheet. Repeat for all the different combinations...a1, a2, b1, b2. To illustrate: Code: -------------------- Column B | Column C Column E | Column F a 1 70 50 a 2 80 30 b 1 60 20 b 2 40 20 -------------------- I want to find a1 and write "20" in another worksheet. Sorry if this is an overly long explanation, I feel like it's confusing to explain. Let me know if anything needs to be clarified. As always, any help is appreciated!- How long is your list? Is the data contiguous? Do you want to store the result in the same row on the other worksheet? Setting those questions aside I'd suggest either a FOR/WHILE loop. I suppose there are more elegant methods and most experts try to avoid loops but they can be quite fast for a simple operation like this and the code is easy to understand. For i = first_row to last_row if cells(i, "B") = "a" and cells(i, "C") = 1 then _ worksheets(othersheet).cells(i, "A")= cells(i, "E") - cells(i, "F") Next i This all assumes I understood your question and there are several details to check to meet what you really have to work with. John Keith John, You understand what I'm trying to do. To answer your questions: How long is your list? 401 rows, but that may change (I'd rather not hard-code it) Is the data contiguous? Yes Do you want to store the result in the same row on the other worksheet? I need to store the results in the same column, but different rows. Your solution so far makes perfect sense. I tried modifying this part for my code: Code: -------------------- For i = first_row to last_row If cells(i, "B") = "a" and cells(i, "C") = 1 Then.... -------------------- For now, can we just select the row where it finds those two values? I want to see that it works, and I'm not sure how to do that. I'm also having a problem with what it's supposed to equal to since those values are not the only values in the cells. It doesn't just say "a" in the column I'm searching for. It says something like "a 2342 332" and it doesn't just say "1" in column C, it says "abcdefg (1bb)." Point is, I have more than just the string I'm searching for in the cells. Do you know how I can use wildcards in the search? Thanks, you've been really helpful so far! John Keith |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
"Coult not find specified object" and "Path-File access error" messages | Excel Programming | |||
Whats wrong with this? MyWBAccRep.Sheets("Volumes").Cells.Find("latest").Copy.Offset(0, | Excel Programming | |||
find "Cancellation" in column "A" and copy all data from Columns B-F onto another Sheet | Excel Programming | |||
HELP on "left","right","find","len","substitute" functions | Excel Discussion (Misc queries) |