numeric value, vba to split out one digit per column

R

Revenue

A previous thread did not address this part of my question.

I have a series of numbers that have to be put on an excel paper form
I designed to match the original. It has a box for each digit of the
respective dollar amounts.

Consider the following three numbers, which are 25000.25, 6050.79,
379.27.
Obviously they must line up on the appropriate cents columns first, so
their placement will vary depending on the size of the number
involved. Essentially, the numbers above would look like this when the
routine finishes:

2 5 0 0 0 2 5
6 0 5 0 7 9
3 7 9 2 7
No decimals as you can see. The total which will be below does not
need to calculate from these converted digits, as it will be derived
separately, and placed on the total line.

What should the loop look like that places these three items. Just
assume for now, the those numbers above are in Ranges, we'll say
Amta1, Amta2, and Amta3.

I appreciate the help.


Bruce
 
C

Clif McIrvin

Revenue said:
A previous thread did not address this part of my question.

I have a series of numbers that have to be put on an excel paper form
I designed to match the original. It has a box for each digit of the
respective dollar amounts.

Consider the following three numbers, which are 25000.25, 6050.79,
379.27.
Obviously they must line up on the appropriate cents columns first, so
their placement will vary depending on the size of the number
involved. Essentially, the numbers above would look like this when the
routine finishes:

2 5 0 0 0 2 5
6 0 5 0 7 9
3 7 9 2 7
No decimals as you can see. The total which will be below does not
need to calculate from these converted digits, as it will be derived
separately, and placed on the total line.

What should the loop look like that places these three items. Just
assume for now, the those numbers above are in Ranges, we'll say
Amta1, Amta2, and Amta3.

I appreciate the help.


Bruce


A little impatient, are we?

see your original thread
 
R

Ron Rosenfeld

A previous thread did not address this part of my question.

I have a series of numbers that have to be put on an excel paper form
I designed to match the original. It has a box for each digit of the
respective dollar amounts.

Consider the following three numbers, which are 25000.25, 6050.79,
379.27.
Obviously they must line up on the appropriate cents columns first, so
their placement will vary depending on the size of the number
involved. Essentially, the numbers above would look like this when the
routine finishes:

2 5 0 0 0 2 5
6 0 5 0 7 9
3 7 9 2 7
No decimals as you can see. The total which will be below does not
need to calculate from these converted digits, as it will be derived
separately, and placed on the total line.

What should the loop look like that places these three items. Just
assume for now, the those numbers above are in Ranges, we'll say
Amta1, Amta2, and Amta3.

I appreciate the help.


Bruce

Here's a macro that will split the numbers out into a right justified series of columns.
There is no error checking, and non-numbers will be split into a left-justified series of columns, but if you want something different, specify.

I'm not sure how you want to select the source (src) range, but that part is easily changed in the macro:

===============================
Option Explicit
Sub SplitDigits()
Dim rg As Range
Dim lMaxLength As Long, lLen As Long
Dim src As Variant
Dim res() As Variant
Dim i As Long, j As Long
Set rg = Application.InputBox("Select Range of Data", Type:=8)
src = rg
For i = 1 To UBound(src, 1)
src(i, 1) = Replace(Format(src(i, 1), "0.00"), ".", "")
lLen = Len(src(i, 1))
If lLen > lMaxLength Then lMaxLength = lLen
Next i
ReDim res(1 To UBound(src, 1), 1 To lMaxLength)
For i = 1 To UBound(src, 1)
For j = 1 To lMaxLength
res(i, j) = Mid(Format(src(i, 1), Space(lMaxLength - Len(src(i, 1))) & "0"), j, 1)
Next j
Next i
rg.Offset(columnoffset:=1).Resize(columnsize:=lMaxLength) = res
End Sub
==========================
 
R

Rick Rothstein

A previous thread did not address this part of my question.

Actually, your question has been answered in the other thread. That thread
got kind of long, so instead of making you search for it, here are the two
functions I posted there. This first addresses your specific question for a
9-column print out...

Sub ParseAmountsNewRick()
Dim Cell As Range
For Each Cell In Selection
Cell.Offset(, 1).Resize(, 9) = Split(Format(Replace(Replace( _
Format$(Cell.Value, "0.00"), ".", ""), ",", ""), _
"@_@_@_@_@_@_@_@_@"), "_")
Next
End Sub

and this one, a generalized solution, which allows you to specify any size
for the number of columns via the Size constant (the Const statement)...

Sub ParseAmountsNewRickToo()
Dim Cell As Range
Const Size As Long = 11
For Each Cell In Selection
Cell.Offset(, 1).Resize(, Size) = Split(Format(Replace(Replace( _
Format$(Cell.Value, "0.00"), ".", ""), ",", ""), _
Mid(Replace(String(Size, "@"), "@", "_@"), 2)), "_")
Next
End Sub

You might find it interesting that the statement inside the For..Next block
is only one line long... I used line continuation characters to split the
code line over three physical lines because it is so long (and to stop the
newsgroup parser from word-wrapping it at awkward locations).

Rick Rothstein (MVP - Excel)
 

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