Home |
Search |
Today's Posts |
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
How do I repeat the following macro until it reaches an empty cell?
ActiveCell.Offset(0, 0).Select Application.SendKeys ("{F2}") Application.SendKeys ("{Home}") Application.SendKeys ("{Del 5}") Application.SendKeys ("{ENTER}") |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
option explicit
sub testme() do activecell.value = mid(activecell.value,6) activecell.offset(1,0).select if isempty(activecell) then exit do end if loop end sub clpncsg wrote: How do I repeat the following macro until it reaches an empty cell? ActiveCell.Offset(0, 0).Select Application.SendKeys ("{F2}") Application.SendKeys ("{Home}") Application.SendKeys ("{Del 5}") Application.SendKeys ("{ENTER}") -- Dave Peterson |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dave:
Thank you. This solution worked perfect. Cindy "Dave Peterson" wrote: option explicit sub testme() do activecell.value = mid(activecell.value,6) activecell.offset(1,0).select if isempty(activecell) then exit do end if loop end sub clpncsg wrote: How do I repeat the following macro until it reaches an empty cell? ActiveCell.Offset(0, 0).Select Application.SendKeys ("{F2}") Application.SendKeys ("{Home}") Application.SendKeys ("{Del 5}") Application.SendKeys ("{ENTER}") -- Dave Peterson |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I modified it like this:
Sub ED() Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = "END" ActiveCell.Offset(0, 1).Select Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(-1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Offset(0, -1).Select ActiveCell.Value = "START" End Sub Now what this does is it goes down until it finds an empty cell, then goes right and then up until it finds an empty cell and left again. Now this lets me find my range of used cells. How can I now make a function which selects all cells between the cell that say START and END and make a graph from that? I really know nothing about VBA :( need help. Matt |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I modified it like this:
Sub ED() Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = "END" ActiveCell.Offset(0, 1).Select Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(-1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Offset(0, -1).Select ActiveCell.Value = "START" End Sub Now what this does is it goes down until it finds an empty cell, then goes right and then up until it finds an empty cell and left again. Now this lets me find my range of used cells. How can I now make a function which selects all cells between the cell that say START and END and make a graph from that? I really know nothing about VBA :( need help. Matt |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I'm confused about what you want to do.
Usually I know the cell that I want to start with--I don't have to rely on starting with the activecell. And going right and up and left until you find an empty cell sounds like you could use a different approach. And you're adjusting some cells (by trimming those 5 leading characters), but not other cells. Is that really what you want? For instance... option explicit sub Ed2() dim myCell as range dim myRng as range set myrng = activecell.currentregion for each mycell in myrng.cells mycell.value = mid(mycell.value,6) next mycell 'now you can use myRng as the basis for your chart, well, maybe... end Sub So you have a few questions to answer -- maybe just describe what you really want. And if you record a macro when you create the chart you like, you could post that code and that code could be adjusted to use the range that meets your description. Matt wrote: I modified it like this: Sub ED() Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = "END" ActiveCell.Offset(0, 1).Select Do ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(-1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Offset(0, -1).Select ActiveCell.Value = "START" End Sub Now what this does is it goes down until it finds an empty cell, then goes right and then up until it finds an empty cell and left again. Now this lets me find my range of used cells. How can I now make a function which selects all cells between the cell that say START and END and make a graph from that? I really know nothing about VBA :( need help. Matt -- Dave Peterson |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
here is a description of the original problem:
http://groups.google.ca/group/micros...2cb406126 0dd the 3rd last post has a link to a photo .. I cant figure out how to select the rows with the date directly. BUt your macro that goes through the rows selects them ... I found a function which will put the address of the first cell in A1 and the last cell in B1, so these cells would contain i.e. $B$34 and $B$412 The macro has to search 65000 lines unless I can select the end point better ... I know how many data points I have so I could limit the search to them. I just dont know how all that works in VBA ... also I dont know how to address celles relatively, for example I need cell Ax where x is the number in a cell .... Matt |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I dont need them trimmed but I have not much clue about VBA so i just
took your code and added some more code.. I dont know what the functions do and whats their syntax .. the excel help hasnt been much help so far I think I dont need that line: mycell.value = mid(mycell.value,6) |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Since you've separated your data into that area, it sure looks like you could
use: range("somecellinthatarea").currentregion And this is pretty much a plain text newsgroup. Many people will just skip by your post if it contains attachments--pictures, too. And if you add steps to click on links to download pictures, others will just figure it's not worth their time. I'd stick to plain text eplanations if I were posting. Matt wrote: here is a description of the original problem: http://groups.google.ca/group/micros...2cb406126 0dd the 3rd last post has a link to a photo .. I cant figure out how to select the rows with the date directly. BUt your macro that goes through the rows selects them ... I found a function which will put the address of the first cell in A1 and the last cell in B1, so these cells would contain i.e. $B$34 and $B$412 The macro has to search 65000 lines unless I can select the end point better ... I know how many data points I have so I could limit the search to them. I just dont know how all that works in VBA ... also I dont know how to address celles relatively, for example I need cell Ax where x is the number in a cell .... Matt -- Dave Peterson |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Good point ...
ok this is what the data looks like Readings: 8803 A B C D 9/15/2005 9:06 22.68802 9/15/2005 9:08 23.0421 9/15/2005 9:10 23.75181 9/15/2005 9:12 23.75181 9/15/2005 9:12 23.75181 9/15/2005 9:14 23.75181 9/15/2005 9:14 23.75181 9/15/2005 9:16 23.75181 9/15/2005 9:16 23.75181 9/15/2005 9:18 23.75181 9/15/2005 9:18 23.75181 9/15/2005 9:20 23.39668 9/15/2005 9:20 23.39668 9/15/2005 9:22 23.0421 9/15/2005 9:22 23.0421 9/15/2005 9:24 23.0421 9/15/2005 9:24 23.0421 9/15/2005 9:26 23.0421 9/15/2005 9:26 23.0421 9/15/2005 9:28 23.0421 9/15/2005 9:28 23.0421 9/15/2005 9:30 23.0421 9/15/2005 9:32 23.0421 9/15/2005 9:34 23.0421 9/15/2005 9:36 23.0421 9/15/2005 9:38 23.0421 9/15/2005 9:40 23.0421 9/15/2005 9:42 23.0421 9/15/2005 9:44 23.0421 Column A has the date, B the time and the macro copies a formula in C and D which if the date is in a range that was queried it copies the date in C and temp in D. This is then used to find the highest and lowest temperature... Now I have to also make a chart over the cells in column C and D to plot the temperature. I know the date where the range starts and ends but NOT the cell. Thats why i used your macro to search the columns to find the start and end. It works EXCEPT. the cursor needs to be placed at the first cell with data maually and its very slow and I dont know how to make a chart. I can get it to write the start and end cell in lets say cells A1 and A2... which would have the value i.e. $C$23 and $C$422. Matt |
#11
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
If you used column C, then columns A:D would be part of that currentregion.
But you could just check column C: Option Explicit Sub testme() Dim myRng As Range Dim TopCell As Range Dim BotCell As Range Dim wks As Worksheet Set wks = Worksheets("sheet1") With wks Set BotCell = .Cells(.Rows.Count, "C").End(xlUp) Set TopCell = BotCell.End(xlUp) Set myRng = .Range(TopCell, BotCell).Resize(, 2) 'both columns MsgBox myRng.Address End With End Sub Matt wrote: Good point ... ok this is what the data looks like Readings: 8803 A B C D 9/15/2005 9:06 22.68802 9/15/2005 9:08 23.0421 9/15/2005 9:10 23.75181 9/15/2005 9:12 23.75181 9/15/2005 9:12 23.75181 9/15/2005 9:14 23.75181 9/15/2005 9:14 23.75181 9/15/2005 9:16 23.75181 9/15/2005 9:16 23.75181 9/15/2005 9:18 23.75181 9/15/2005 9:18 23.75181 9/15/2005 9:20 23.39668 9/15/2005 9:20 23.39668 9/15/2005 9:22 23.0421 9/15/2005 9:22 23.0421 9/15/2005 9:24 23.0421 9/15/2005 9:24 23.0421 9/15/2005 9:26 23.0421 9/15/2005 9:26 23.0421 9/15/2005 9:28 23.0421 9/15/2005 9:28 23.0421 9/15/2005 9:30 23.0421 9/15/2005 9:32 23.0421 9/15/2005 9:34 23.0421 9/15/2005 9:36 23.0421 9/15/2005 9:38 23.0421 9/15/2005 9:40 23.0421 9/15/2005 9:42 23.0421 9/15/2005 9:44 23.0421 Column A has the date, B the time and the macro copies a formula in C and D which if the date is in a range that was queried it copies the date in C and temp in D. This is then used to find the highest and lowest temperature... Now I have to also make a chart over the cells in column C and D to plot the temperature. I know the date where the range starts and ends but NOT the cell. Thats why i used your macro to search the columns to find the start and end. It works EXCEPT. the cursor needs to be placed at the first cell with data maually and its very slow and I dont know how to make a chart. I can get it to write the start and end cell in lets say cells A1 and A2... which would have the value i.e. $C$23 and $C$422. Matt -- Dave Peterson |
#12
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dave thanks for your help :)
I got this (see below) to work (dont ask how) What it does is, it crawls through my column with dates and will write the address of the last in cell D1 and the first in D1. Now I "simply" need to run a chart from the range that is in these cells .. I cant figure out how though.... I need to turn the VALUE of cell D1 into a variable and the same with D2 and then chart (value(D2):value(D1)). Since I have no clue about programing I dont know how... If I get this done I am done my project :) Matt Sub ED() ' find first cell with a date amongst EMPTY cells then stop Do Do ActiveCell.Offset(1, 0).Select If Not IsDate(ActiveCell) Then Else GoTo Line1 Loop Line1: 'This is the first full cell Range("D2").Value = ActiveCell.Address 'Find LAST full cell DOWN Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = ActiveCell.Address ActiveCell.Offset(-1, 0).Select Range("D1").Value = ActiveCell.Address ActiveCell.Offset(1, 0).Select ' obsolete logic 'Find First full cell UP 'ActiveCell.Offset(0, 1).Select ' Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ' ActiveCell.Offset(-1, 0).Select ' If IsEmpty(ActiveCell) Then ' Exit Do ' End If ' Loop ' ActiveCell.Offset(0, -1).Select ' ActiveCell.Value = ActiveCell.Address ' Range("D2").Value = ActiveCell.Address End Sub |
#13
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I'd say record a macro that creates the chart you like. Then look at the code
and try to change the code to use the values you know--instead of what was selected. But I still don't understand what you're doing... Matt wrote: Dave thanks for your help :) I got this (see below) to work (dont ask how) What it does is, it crawls through my column with dates and will write the address of the last in cell D1 and the first in D1. Now I "simply" need to run a chart from the range that is in these cells .. I cant figure out how though.... I need to turn the VALUE of cell D1 into a variable and the same with D2 and then chart (value(D2):value(D1)). Since I have no clue about programing I dont know how... If I get this done I am done my project :) Matt Sub ED() ' find first cell with a date amongst EMPTY cells then stop Do Do ActiveCell.Offset(1, 0).Select If Not IsDate(ActiveCell) Then Else GoTo Line1 Loop Line1: 'This is the first full cell Range("D2").Value = ActiveCell.Address 'Find LAST full cell DOWN Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = ActiveCell.Address ActiveCell.Offset(-1, 0).Select Range("D1").Value = ActiveCell.Address ActiveCell.Offset(1, 0).Select ' obsolete logic 'Find First full cell UP 'ActiveCell.Offset(0, 1).Select ' Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ' ActiveCell.Offset(-1, 0).Select ' If IsEmpty(ActiveCell) Then ' Exit Do ' End If ' Loop ' ActiveCell.Offset(0, -1).Select ' ActiveCell.Value = ActiveCell.Address ' Range("D2").Value = ActiveCell.Address End Sub -- Dave Peterson |
#14
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Dave Peterson wrote: I'd say record a macro that creates the chart you like. Then look at the code and try to change the code to use the values you know--instead of what was selected. But I still don't understand what you're doing... I have to create a chart for a range of cells which changes every time the macro runs... If I record a macro it will only work for the range I selected.... I have the macro (see below) that puts in the start cell for my range in cell D2 and the end in D1. So my cells look like that: D1: $A$5 D2: $A$8808 Now the macro has to make a chart from cell A5 to A8808 (and not from D1 to D2) Next time it has different values in D1 and D2, thats why I need variables. I was able to put the value of D1 and D2 into variables but I cant make a chart from variables as addresses ... If I get this done will stop pestering you ;) Matt Matt wrote: Dave thanks for your help :) I got this (see below) to work (dont ask how) What it does is, it crawls through my column with dates and will write the address of the last in cell D1 and the first in D1. Now I "simply" need to run a chart from the range that is in these cells .. I cant figure out how though.... I need to turn the VALUE of cell D1 into a variable and the same with D2 and then chart (value(D2):value(D1)). Since I have no clue about programing I dont know how... If I get this done I am done my project :) Matt Sub ED() ' find first cell with a date amongst EMPTY cells then stop Do Do ActiveCell.Offset(1, 0).Select If Not IsDate(ActiveCell) Then Else GoTo Line1 Loop Line1: 'This is the first full cell Range("D2").Value = ActiveCell.Address 'Find LAST full cell DOWN Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = ActiveCell.Address ActiveCell.Offset(-1, 0).Select Range("D1").Value = ActiveCell.Address ActiveCell.Offset(1, 0).Select ' obsolete logic 'Find First full cell UP 'ActiveCell.Offset(0, 1).Select ' Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ' ActiveCell.Offset(-1, 0).Select ' If IsEmpty(ActiveCell) Then ' Exit Do ' End If ' Loop ' ActiveCell.Offset(0, -1).Select ' ActiveCell.Value = ActiveCell.Address ' Range("D2").Value = ActiveCell.Address End Sub -- Dave Peterson |
#15
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Exactly--your macro should be able to be modified to use those addresses you've
saved. But there are lots of charts--guessing what you want would be impossible. Matt wrote: Dave Peterson wrote: I'd say record a macro that creates the chart you like. Then look at the code and try to change the code to use the values you know--instead of what was selected. But I still don't understand what you're doing... I have to create a chart for a range of cells which changes every time the macro runs... If I record a macro it will only work for the range I selected.... I have the macro (see below) that puts in the start cell for my range in cell D2 and the end in D1. So my cells look like that: D1: $A$5 D2: $A$8808 Now the macro has to make a chart from cell A5 to A8808 (and not from D1 to D2) Next time it has different values in D1 and D2, thats why I need variables. I was able to put the value of D1 and D2 into variables but I cant make a chart from variables as addresses ... If I get this done will stop pestering you ;) Matt Matt wrote: Dave thanks for your help :) I got this (see below) to work (dont ask how) What it does is, it crawls through my column with dates and will write the address of the last in cell D1 and the first in D1. Now I "simply" need to run a chart from the range that is in these cells .. I cant figure out how though.... I need to turn the VALUE of cell D1 into a variable and the same with D2 and then chart (value(D2):value(D1)). Since I have no clue about programing I dont know how... If I get this done I am done my project :) Matt Sub ED() ' find first cell with a date amongst EMPTY cells then stop Do Do ActiveCell.Offset(1, 0).Select If Not IsDate(ActiveCell) Then Else GoTo Line1 Loop Line1: 'This is the first full cell Range("D2").Value = ActiveCell.Address 'Find LAST full cell DOWN Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ActiveCell.Offset(1, 0).Select If IsEmpty(ActiveCell) Then Exit Do End If Loop ActiveCell.Value = ActiveCell.Address ActiveCell.Offset(-1, 0).Select Range("D1").Value = ActiveCell.Address ActiveCell.Offset(1, 0).Select ' obsolete logic 'Find First full cell UP 'ActiveCell.Offset(0, 1).Select ' Do 'ActiveCell.Value = Mid(ActiveCell.Value, 6) ' ActiveCell.Offset(-1, 0).Select ' If IsEmpty(ActiveCell) Then ' Exit Do ' End If ' Loop ' ActiveCell.Offset(0, -1).Select ' ActiveCell.Value = ActiveCell.Address ' Range("D2").Value = ActiveCell.Address End Sub -- Dave Peterson -- Dave Peterson |
#16
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Dave Peterson wrote: Exactly--your macro should be able to be modified to use those addresses you've saved. But there are lots of charts--guessing what you want would be impossible. Any chart will do ... I can modify it until it fits ... My problem is to generate ANY chart from variables... A macro uses this command to insert a chart: ActiveChart.SetSourceData Source:=Sheets("Data").Range("D1:D8"), PlotBy:= _ xlColumns I need to know what do I put where it says "Range("D1:D8")" so that it will take the value of cell D2 and D1 and put the values in as range. Because i have my range start and end in these cells D1 and D2 thats all i need... dont worry about details like type of chart and such .. I am sure i can get the looks to work but I cant figure out the command to put in the chart in the first place Matt |
#17
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
thats what I tried from some info from older posts he
But it doesnt work :( Sub cit() Begn = Range("D2").Value Ennd = Range("D1").Value Charts.Add ActiveChart.ChartType = xlLine ActiveChart.SetSourceData Source:=Sheets("Data").Range(Begn & Ennd), PlotBy:= _ xlColumns ActiveChart.Location Whe=xlLocationAsObject, Name:="Data" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "A70" .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With End Sub |
#18
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I got it ... it needed a comma instead of colon ...
ctiveChart.SetSourceData Source:=Sheets("Data").Range(Begn, Ennd), PlotBy:= _ xlColumns Now it works :) Thanks for all the help that got me to this point! Matt |
#19
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I'm not sure how much I helped--you did lots of work by yourself--but that's a
good way to learn! And glad you got it working, too! Matt wrote: I got it ... it needed a comma instead of colon ... ctiveChart.SetSourceData Source:=Sheets("Data").Range(Begn, Ennd), PlotBy:= _ xlColumns Now it works :) Thanks for all the help that got me to this point! Matt -- Dave Peterson |
#20
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Dave Peterson wrote: I'm not sure how much I helped--you did lots of work by yourself--but that's a good way to learn! And glad you got it working, too! Although I dont understand much of the help people give, you helped a great deal :) Of course now I realise that the formatting of the newly created chart isnt as easy as I thought ... I recorded a macro and it references chart 11 but it should use activechart or something .... I will let this rest til next week, the main work seems to be done... Thanks again! Matt |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
macro - how to move to a specific cell and repeat | Excel Worksheet Functions | |||
repeat macro until empty space in next column | Excel Worksheet Functions | |||
How do I run a macro when a pre-determined time has been reached . | Excel Discussion (Misc queries) | |||
Excel VBA - macro to recalculate random numbers until target reached | Excel Programming | |||
HOW ? Running a different Macro if value reached | Excel Programming |