Convert neg. numbers to positive numbers

G

Guest

I want to convert neg. numbers to positive numbers. To be clear, I don't
want them just to DISPLAY as positive but to BECOME positive. As well, I
don't want to have to had another column (the ABS() function). Thanks to any
who can help.
 
D

Don Guillett

How about.

Sub makenegpos()
For Each c In Range("r1:r9")
If c.Value < 0 Then c.Value = -c
Next c
End Sub
 
B

Bob Phillips

If they are all negative, then put -1 in a spare cell and copy that cell.

Then select the numbers and Edit>PasteSpecial>Multiply

OK out and clear out the -1.

--
---
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Guest

If they are all negative put -1 in an empty helper cell and copy it
select all the negatives and paste special multiply
delete the helper cell
 
A

AFSSkier

Don,

I like your example to change Neg to Pos. How do you change Pos to Neg?

I tired the following & it didn't work. I changed only the if statement.

Sub MakePosNeg()
For Each c In Range("A1:ZZ10000")
If c.Value > 0 Then c.Value = c
Next c
End Sub
 
D

Dave Peterson

Try Don's original suggestion.

-c will convert positive to negative and negative to positive.
 
A

AFSSkier

Dave,

The neg to pos work great. However, I get the following error when I change
it to > 0. Run-time error '13': Type mismatch. It doesn't like c.Value = -c
 
D

Dave Peterson

I bet that the cell that caused the trouble wasn't a cell that contained a
number.

So you can add a check:
c.Value = -c.value
end if
end if
I like the block style "if/end if". I changed Don's original suggestion, but it
won't matter.
 
A

AFSSkier

Dave,

You are correct; the generic range does include text. Your suggestion
works. However because A1:ZZ10000 is a generic range, all non-numeric fields
change.

Is there a way to preselect a range (for example E6:M100 or G2:K2000) before
running the generic macro to change pos to neg?

I realize it's safer to go from neg to pos with a generic macro. But we
have some instances where we need to fix data entered wrong (chg pos to neg).
 
D

Dave Peterson

I'd use something like:

Option Explicit
Sub MakePosNeg()
Dim myCell As Range
Dim Rng As Range

Set Rng = Nothing
On Error Resume Next
Set Rng = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlNumbers))
On Error GoTo 0

If Rng Is Nothing Then
MsgBox "No constant numbers found in selection."
Exit Sub
End If

For Each myCell In Rng.Cells
If myCell.Value > 0 Then
myCell.Value = -myCell.Value
End If
Next myCell
End Sub


That .specialcells stuff does the same thing as selecting a larger range and
hitting F5 (or Edit|Goto in xl2003 menus). Then Special, then Constants and
Numbers (and unchecking all those other options.

That means you don't have to be as careful selecting the range and it'll be a
little faster--it'll have fewer cells to loop through (usually).
Dave,

You are correct; the generic range does include text. Your suggestion
works. However because A1:ZZ10000 is a generic range, all non-numeric fields
change.

Is there a way to preselect a range (for example E6:M100 or G2:K2000) before
running the generic macro to change pos to neg?

I realize it's safer to go from neg to pos with a generic macro. But we
have some instances where we need to fix data entered wrong (chg pos to neg).
 
A

AFSSkier

Awesome Dave! You're the man! It also works for better for the Neg to Pos,
by changing the Value to < 0.

Thank you very much for your time, Kevin
 

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