delete record using Macro in excel spreed sheet

L

Lillian

Dave:

I test this macro and it only delete the NA but not 0,
any idea? example

A B C D E
0 NA 0 NA 0
0 NA 0 NA 0
0 NA 0 NA 0

after that 0 still there, thank you.

Lillian
 
D

Dave Peterson

Yeah but I saw Tom's solution--it was prettier than fixing that long formula.
Dave:
This line .NumberFormat = "General is pretty helpful,
thanks.

Lillian
-----Original Message-----
Probably not wrong, but I could duplicate the problem if the inserted column was
formatted as Text.

So you could add a line so that you wouldn't have to worry about how the new
column J was formatted:

With .Range("J1:J" & LastRow)
.NumberFormat = "General" '<-- added
.FormulaR1C1 = "= your long formula here"
.Value = .Value
End With

I hoping that .numberformat = "general" will fix the problem.


Dave:

I try to concatenate from columnJ to columnQ, I use
your code as:

Sub ConcatFromJToQ()
Dim LastRow As Long
With Worksheets("General")
LastRow = .Cells(.Rows.Count, "j").End (xlUp).Row
.Columns("J:J").Insert
With .Range("J1:J" & LastRow)
.FormulaR1C1 = "=RC[1] & "" "" & RC[2]
& "" "" & RC[3] & "" "" & RC[4] & "" "" & RC[5] & "" "" &
RC[6] & "" "" & RC[7] & "" "" &RC[8]"
.Value = .Value
End With
.Range("K:R").EntireColumn.Hidden = True
.Range("K:R").EntireColumn.Delete
End With
End Sub

and I got entire J column has Rc1...RC8, did I do anthing
wrong?
please advise.

Lillian
-----Original Message-----
Excel always has 256 columns (A:IV).

If you delete one, then the others shift over and a new
one appears at the far
right. You really can't make them go away completely.

But if you just don't like to see them, you could hide
them instead of deleting
them.

Sub Macro2A()
With Activesheet
.range("R:R,T:EE").entirecolumn.hidden = true
end with
End Sub

(e-mail address removed) wrote:

Dave:

When I use the following code:

Option Explicit
Sub Macro1()
Range("R:R,T:EE").Select
Selection.Delete Shift:=xlToLeft
End Sub

This only delete from columnR to columnED inside of
data,
but the column R to ED still there, it's become empty
column, is anyway can delete them all?

thanks.

Lillian

-----Original Message-----
Dave:

It's me again, I have use your old testme02()
macro,
try to concatenate from columnI to columnP, I use your
macro testme02(), but I got out of range, here is my
code:

Sub testme02()
Dim LastRow As Long
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "i").End
(xlUp).Row
.Columns("I:I").Insert
With .Range("I1:I" & LastRow)
.FormulaR1C1 = "=RC[1] & "" "" & RC[2]
& "" "" & RC[3] & "" "" & RC[4] & "" "" & RC[5]
& "" ""
&
RC[6] & "" "" & RC[7] & "" "" &RC[8]"
.Value = .Value
End With
.Range("I:Q").EntireColumn.Hidden = True
'.Range("I:Q").EntireColumn.Delete
End With
End Sub

what's wrong with this code, on the columnQ was not
empty
column, has some data, is this code will work on this?

thanks.

Lillian
-----Original Message-----
Dave:

Which Macro which I use to delete is Macro1() or
Macro1A?
the question I have was:
#2). I need to deleted any column from R to EE, but
not
column S column, then delete EF column, I know EF
column
is outside of range?

#1). I need to deleted the column if is empty, also
any
of column as "0" and "NA" need to delete as well.

thanks for all the help.


Lillian
-----Original Message-----
the easy one first.

#2. Record a macro when you do it manually. I
selected
R, and T:EE, then
rightclick|Delete and got something that looked
like:

Option Explicit
Sub Macro1()
Range("R:R,T:EE").Select
Selection.Delete Shift:=xlToLeft
End Sub

(deleting from the right to left will mean you don't
have to adjust the column
letters after the deletion.)

But you could change it to something like:

Option Explicit
Sub Macro1A()
With Activesheet
.range("R:R,T:EE").entirecolumn.delete
end with
End Sub

And column EF was outside of the range. Did you
mean
that?

And #1.

To delete the columns that are empty:

Option Explicit
Sub testme01()

Dim myCol As Long
Dim delRng As Range

With ActiveSheet
For myCol = .Range("AD1").Column To .Range
("S1").Column Step -1
If Application.CountA(.Columns (myCol))
= 0
Then
If delRng Is Nothing Then
Set delRng = .Cells(1, myCol)
Else
Set delRng = Union
(delRng, .Cells
(1,
myCol))
End If
End If

Next myCol

If delRng Is Nothing Then
'do nothing
Else
delRng.EntireColumn.Delete
End If
End With

End Sub

But I'm confused about the n/a stuff and 0 stuff.
Are
you checking one cell,
all cells or if any of them in the column are 0 or
N/A?

And do you mean #n/a as in the result from =na() or
do
you mean the text N/A
(typed in)?



Lillian wrote:

Dave:

I have another question, since I like your
knowledge
so much, would you mind I ask you another one,

1).I have one worksheet need to delete the column
from
columnS to columnAD, also if column is empty or
columns
is "0" or column is "NA: need to delete as well.
how
to
write the macro for that.

2).I have another worksheet need to delete the
columnR
to
columnEE, except columnS and columnEF, how to
write
the
macro for this.

thanks for all the help.

Lillian

Dave:

Thanks for all your effort, I did use the
adding
code
you gave to me, can not tell is fast or not,
anyway,
thank you so much.

Dave, where I can get good excel Macro on the
web
that
way I can learn more?

Lillian
-----Original Message-----
the easy question first.

An example showing the difference between
the .value
and .text.

Say you have 123456.323 in A1. But you have it
formatted as "$#,##0.00", it'll
show as: $123,456.32

So if I concatenate with .value, I lose all that
nice
formatting. But if I use
the .text, it'll show up just like it appears in
the
cell.

This is useful with dates, too. .value = 37931
could
be
formatted as a date
(mm/dd/yyyy) to show 11/06/2003.

(It's not really Format|Cells|Number tab|Text
kind
of
formatting.)

I just ran a test of that merge version
(testme02).
I
put simple data in
A1:D1600. It ran pretty quickly.

You can speed it up by adding this to the top of
the
code:

Dim CalcMode As Long
CalcMode = Application.Calculation
Application.Calculation =
xlCalculationManual
Application.screenupdating = false

and near the bottom:

Application.Calculation = CalcMode
Application.ScreenUpdating = True

It'll stop the flickering of the display, too
(.screenupdating = false).






Lillian wrote:

Dave:

I use that merge macro, it take a while to
run,
not
like
concatenate one, it only one second, then I
got
the
result I need. thanks.

I have one more question when you said in
previous
email:

if your data needs to be formatted
nicely, you could use:

.Value = .Text _
& " " & .Offset
(0,
1).Text _
& " " & .Offset
(0,
2).Text

how do I write the macro to formatted D E F
columns to
Text, before I run your merge macro script,
maybe
data
in
column D,E,F did not formatted as you said,
that
why
take
a long time to run, as you mention as above.
did
this
formatted macro need to run separately or they
can
combined into merge marco?

Thank you again, your are wonderful.

Lillian

-----Original Message-----
Thanks Dave, your the greatest. I can not
thank
you
enough.

Lillian
-----Original Message-----
If you want to delete those columns, then
you
have
to
uncomment this line (just
get rid of the leading apostrophe):

'.Value = .Value

It's essentially copy|paste special|values.


Lillian wrote:

Dave:

I use the concatenate one for the
test,it
work
out
perfect, all the data is on D column, if I
click D
column, it is refering to
=E1&" "&F1&" "&G1,
if I
remove
the '.Range("e:g").EntireColumn.Delete
again,
guest
what
the D column become like #REF, is anyway
after
we
run
this then do somekind of pastspecial in H
column
with
value, but with macro script?

Your are a genius. thanks for all the
effort.

Lillian

-----Original Message-----
Do you mean merge like in merge cells or
do
you
mean
merge like in concatenate?

I'm gonna guess concatenate.

I'd insert a new column D and use a
formula
that
did
the
concatenation, then
convert to values, then delete the
original
D:F
(now
E:G).

Option Explicit
Sub testme02()
Dim LastRow As Long
With Worksheets("sheet1")
LastRow = .Cells
(.Rows.Count, "d").End
(xlUp).Row
.Columns("D:D").Insert
With .Range("d1:d" & LastRow)
.FormulaR1C1 = "=RC[1]
& "" ""
&
RC
[2]
& "" "" & RC[3]"
'.Value = .Value
End With
.Range
("e:g").EntireColumn.Hidden =
True
'.Range
("e:g").EntireColumn.Delete
End With
End Sub

I used the last row of column D to
determine
the
last
row to get a formula.
Change this to a column that always has
data.

And I don't know what's in those columns,
but
it's
not
always best to
concatenate and delete. As you can see
it's
really
easy
to put things
together. It's not always as easy to
separate
them
into
the correct fields.

It might be better to leave the formulas
and
just
hide
the columns that the
formulas use.

========
Did you really mean Merge (as in
Format|Cells|Aligment
tab)?

Then maybe something like:

Option Explicit
Sub testme02()
Dim LastRow As Long
Dim iRow As Long
With Worksheets("sheet1")
LastRow = .Cells
(.Rows.Count, "d").End
(xlUp).Row

For iRow = 1 To LastRow
With .Cells(iRow, "D")
.Value = .Value _
& " " & .Offset
(0,
1).Value
_
& " " & .Offset
(0,
2).Value
.Offset(0, 1).Resize (1,
2).ClearContents
End With
Next iRow

.Range("d1:f" & LastRow).Merge
across:=True
End With
End Sub

And one last thing, if your data needs
to be
formatted
nicely, you could use:

.Value = .Text _
& " " & .Offset
(0,
1).Text _
& " " & .Offset
(0,
2).Text

to pick up the format from the cell.

Or you could specify the format you want:
.Value = .Value _
& " " & format
(.Offset
(0,
1).Value,"mm/dd/yyyy") _
& " " & format
(.Offset
(0,
2).Value,"$0.00")
with the Format function.

Inside the worksheet, you'd use something
like:
=text
(a1,"$0.00")



Lillian wrote:

Dave:

Now I have all the data I need, is
anyway to
merge
columnD,ColumnE,ColumnF together, how
to
write
the
macro
to do that, I try to use excel merge
cell,
it
did
not
work, because columnD,E,F has different
type of
data.

thanks for all the help.

Lillian
-----Original Message-----
Dave:

I try yours, it work perfectly,
thank
you
so
much.

Lillian
-----Original Message-----
I'm not sure if you got your problem
solved,
but
modifying Ron's code slightly:

Option Explicit
Sub Test()
Dim r As Long
Application.ScreenUpdating =
False
With Worksheets("Sheet1")
For r = .UsedRange.Rows
(.UsedRange.Rows.Count).Row To 1
Step -1
If Application.CountA
(.Rows
(r))
=
0 _
Or .Cells (r, "A").Value
= "-
-
--
"
_
Or LCase(.Cells
(r, "A").Value)
= "problem"
_
Or Trim(.Cells
(r, "F").Value)
= ""
Then
.Rows(r).Delete
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Lillian wrote:

I have one excel spreed sheet, it
about
30,000
records, I
need to deleted some of records, if
columnsA
has "problem", the record will be
delete,
if
rows
is
space, the record will be delete,
if
ColumsA
has "-
---
",
the record will be delete, if
column
(F)
has
space,
the
record will be delete.

How can I write the macro to delete
those
record,
thanks
for the help.

Lillian

--

Dave Peterson
(e-mail address removed)
.

.


--

Dave Peterson
(e-mail address removed)
.


--

Dave Peterson
(e-mail address removed)
.

.


--

Dave Peterson
(e-mail address removed)
.

.


--

Dave Peterson
(e-mail address removed)
.

.

.


--

Dave Peterson
(e-mail address removed)
.

--

Dave Peterson
(e-mail address removed)
.
 
D

Dave Peterson

I used Tom's code (dated: Sat, 15 Nov 2003 20:27:36 -0500) against your data and
it wiped out all the columns.

First guess why it didn't work for you: That code expects 0's, NA's or empty
cells in row 1 to the last row of the worksheet. Hit ctrl-end to see if that
lastrow is where you expected it.

Second guess: Are those 0's the results of calculations? Could the be very
small numbers that look like 0's when they appear in the worksheet (either via
the numberformat of the cell or by the width of the column)?

Try clicking one of them and looking at the actual value in the formula bar.
 
L

Lillian

Dave:

If I use my real data and it work, it wipe out O
column, if I use the test data it won't work, I don't
know why, as you said I hit-end, it went to last row, and
I look at format cell is general.
Thank you so much.

Lillian
-----Original Message-----
I used Tom's code (dated: Sat, 15 Nov 2003 20:27:36 - 0500) against your data and
it wiped out all the columns.

First guess why it didn't work for you: That code expects 0's, NA's or empty
cells in row 1 to the last row of the worksheet. Hit ctrl-end to see if that
lastrow is where you expected it.

Second guess: Are those 0's the results of
calculations? Could the be very
 
D

Dave Peterson

I don't have any better guesses--sorry.
Dave:

If I use my real data and it work, it wipe out O
column, if I use the test data it won't work, I don't
know why, as you said I hit-end, it went to last row, and
I look at format cell is general.
Thank you so much.

Lillian
calculations? Could the be very
 
L

Lillian

Dave:

That's Ok, the real data is working that is most
important, you have been help me so much.

thanks again.

Lillian
 
D

Dave Peterson

Keep an eye out for any problems. Something sounds not quite right. Maybe
it'll rear its ugly head again and we can isolate the problem.
Dave:

That's Ok, the real data is working that is most
important, you have been help me so much.

thanks again.

Lillian

<<snipped>>
 
L

Lillian

Hi, Dave:

I have another VBA would like to ask your help.
I have one excel spreed sheet, it have three worksheet,
they are sheet1, sheet2, sheet3, in each worksheets on
the column B each row has real long file directory,
example:
J:\files\docfiles\amaya01\demand.mcp.wpd, all I need is
last file name: demand.mcp.wpd, it means I only need
the file name after the last slash "\", all the column B
has different rows of file name another example:
j:\FILES\DOCFILES\Civil Service\CS-SUBIA\OLGA.SRP, all
I need is OLGA.SRP file name, so can we write the macro
removed everything before last slash "\".

SO this macro has be in the loop for
sheet1,sheet2,sheet3.
thanks for the help.

Lillian



-----Original Message-----
On top of what Tom Ogilvy wrote, I liked to lurk in these newsgroups.

And when you get a few bucks to spare, you may want to get a book:

Debra Dalgleish has a big ole list:
http://www.contextures.com/xlbooks.html

John Walkenbach's is a nice one to start with. John Green (and others) is nice,
too. See if you can find them in your local bookstore and you can choose what
one you like best.

Dave:

Thanks for all your effort, I did use the adding code
you gave to me, can not tell is fast or not, anyway,
thank you so much.

Dave, where I can get good excel Macro on the web that
way I can learn more?

Lillian
-----Original Message-----
the easy question first.

An example showing the difference between the .value and .text.

Say you have 123456.323 in A1. But you have it
formatted as "$#,##0.00", it'll
show as: $123,456.32

So if I concatenate with .value, I lose all that nice formatting. But if I use
the .text, it'll show up just like it appears in the cell.

This is useful with dates, too. .value = 37931 could
be
formatted as a date
(mm/dd/yyyy) to show 11/06/2003.

(It's not really Format|Cells|Number tab|Text kind of formatting.)

I just ran a test of that merge version (testme02). I put simple data in
A1:D1600. It ran pretty quickly.

You can speed it up by adding this to the top of the code:

Dim CalcMode As Long
CalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
Application.screenupdating = false

and near the bottom:

Application.Calculation = CalcMode
Application.ScreenUpdating = True

It'll stop the flickering of the display, too (.screenupdating = false).






Lillian wrote:

Dave:

I use that merge macro, it take a while to run, not like
concatenate one, it only one second, then I got the
result I need. thanks.

I have one more question when you said in previous email:

if your data needs to be formatted
nicely, you could use:

.Value = .Text _
& " " & .Offset(0, 1).Text _
& " " & .Offset(0, 2).Text

how do I write the macro to formatted D E F columns to
Text, before I run your merge macro script, maybe
data
in
column D,E,F did not formatted as you said, that why take
a long time to run, as you mention as above. did this
formatted macro need to run separately or they can
combined into merge marco?

Thank you again, your are wonderful.

Lillian

-----Original Message-----
Thanks Dave, your the greatest. I can not thank you
enough.

Lillian
-----Original Message-----
If you want to delete those columns, then you have to
uncomment this line (just
get rid of the leading apostrophe):

'.Value = .Value

It's essentially copy|paste special|values.


Lillian wrote:

Dave:

I use the concatenate one for the test,it
work
out
perfect, all the data is on D column, if I click D
column, it is refering to =E1&" "&F1&" "&G1, if I
remove
the '.Range("e:g").EntireColumn.Delete again, guest
what
the D column become like #REF, is anyway after
we
run
this then do somekind of pastspecial in H column with
value, but with macro script?

Your are a genius. thanks for all the effort.

Lillian

-----Original Message-----
Do you mean merge like in merge cells or do you mean
merge like in concatenate?

I'm gonna guess concatenate.

I'd insert a new column D and use a formula
that
did
the
concatenation, then
convert to values, then delete the original D:F (now
E:G).

Option Explicit
Sub testme02()
Dim LastRow As Long
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "d").End
(xlUp).Row
.Columns("D:D").Insert
With .Range("d1:d" & LastRow)
.FormulaR1C1 = "=RC[1] & "" "" & RC [2]
& "" "" & RC[3]"
'.Value = .Value
End With
.Range("e:g").EntireColumn.Hidden = True
'.Range("e:g").EntireColumn.Delete
End With
End Sub

I used the last row of column D to determine
the
last
row to get a formula.
Change this to a column that always has data.

And I don't know what's in those columns, but it's
not
always best to
concatenate and delete. As you can see it's really
easy
to put things
together. It's not always as easy to separate them
into
the correct fields.

It might be better to leave the formulas and just
hide
the columns that the
formulas use.

========
Did you really mean Merge (as in
Format|Cells|Aligment
tab)?

Then maybe something like:

Option Explicit
Sub testme02()
Dim LastRow As Long
Dim iRow As Long
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "d").End
(xlUp).Row

For iRow = 1 To LastRow
With .Cells(iRow, "D")
.Value = .Value _
& " " & .Offset(0, 1).Value
_
& " " & .Offset(0, 2).Value
.Offset(0, 1).Resize(1,
2).ClearContents
End With
Next iRow

.Range("d1:f" & LastRow).Merge across:=True
End With
End Sub

And one last thing, if your data needs to be
formatted
nicely, you could use:

.Value = .Text _
& " " & .Offset(0, 1).Text _
& " " & .Offset(0, 2).Text

to pick up the format from the cell.

Or you could specify the format you want:
.Value = .Value _
& " " & format(.Offset (0,
1).Value,"mm/dd/yyyy") _
& " " & format(.Offset (0,
2).Value,"$0.00")
with the Format function.

Inside the worksheet, you'd use something like: =text
(a1,"$0.00")



Lillian wrote:

Dave:

Now I have all the data I need, is anyway to
merge
columnD,ColumnE,ColumnF together, how to
write
the
macro
to do that, I try to use excel merge cell, it did
not
work, because columnD,E,F has different type of
data.

thanks for all the help.

Lillian
-----Original Message-----
Dave:

I try yours, it work perfectly, thank you so
much.

Lillian
-----Original Message-----
I'm not sure if you got your problem
solved,
but
modifying Ron's code slightly:

Option Explicit
Sub Test()
Dim r As Long
Application.ScreenUpdating = False
With Worksheets("Sheet1")
For r = .UsedRange.Rows
(.UsedRange.Rows.Count).Row To 1 Step -1
If Application.CountA(.Rows
(r)) =
0 _
Or .Cells(r, "A").Value = "---
-"
_
Or LCase(.Cells(r, "A").Value)
= "problem"
_
Or Trim(.Cells(r, "F").Value) = ""
Then
.Rows(r).Delete
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Lillian wrote:

I have one excel spreed sheet, it about 30,000
records, I
need to deleted some of records, if columnsA
has "problem", the record will be delete, if
rows
is
space, the record will be delete, if ColumsA
has "-
---
",
the record will be delete, if column(F) has
space,
the
record will be delete.

How can I write the macro to delete those
record,
thanks
for the help.

Lillian

--

Dave Peterson
(e-mail address removed)
.

.


--

Dave Peterson
(e-mail address removed)
.


--

Dave Peterson
(e-mail address removed)
.

.


--

Dave Peterson
(e-mail address removed)
.

--

Dave Peterson
(e-mail address removed)
.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top