This code:
set rngA = Range(cells(2,1),Cells(2,1).End(xldown))
set rngB = Range(cells(2,2),Cells(2,2).End(xldown))
set rngC = Range(cells(2,3),Cells(2,3).End(xldown))
set rngD = Range(cells(2,4),Cells(2,4).End(xldown))
set rngE = Range(cells(2,5),Cells(2,5).End(xldown))
should restrict the ranges to only look at empty cells.
If you go to the second cell in a column and do End and hit the down arrow -
this is how it determines where the last cell is. If you go beyond what you
expect, then possibly someone has cleared cells by using the spacebar (so
the cell is not empty, it contains a space) or perhaps you copied the data
from somewhere and pasted it into excel.
You could put in a bunch of If statements:
Sub AAA()
Dim rngA as Range, rngB as Range, rngC as Range
Dim rngD as Range, rngE as Range, cellA as Range
Dim cellB as Range, cellC as Range, cellD as Range
Dim cellE as Range, i as Long, rw as Long
rw = 2
i = 0
set rngA = Range(cells(2,1),Cells(2,1).End(xldown))
set rngB = Range(cells(2,2),Cells(2,2).End(xldown))
set rngC = Range(cells(2,3),Cells(2,3).End(xldown))
set rngD = Range(cells(2,4),Cells(2,4).End(xldown))
set rngE = Range(cells(2,5),Cells(2,5).End(xldown))
for each cellA in rngA
if len(trim(cellA)) < 0 then
for each cellB in rngB
if len(trim(cellB)) < 0 then
for each cellC in rngC
if len(trim(cellC)) < 0 then
for each cellD in rngD
if len(trim(cellD)) < 0 then
for each cellE in rngE
if len(trim(cellE)) < 0 then
With Worksheets("NewData")
.cells(rw,i +1).Value = cellA.Value
.cells(rw,i +2).Value = cellB.Value
.cells(rw,i + 3).Value = cellC.Value
.cells(rw,i + 4).Value = cellD.Value
.cells(rw,i + 5).Value = cellE.Value
rw = rw + 1
if rw 65536 then
rw = 2
i = i + 6
end if
End with
End if
next CellE
End If
next CellD
End If
next CellC
End If
next CellB
End if
next CellA
End Sub
--
Regards,
Tom Ogilvy
"Sandip" wrote in message
oups.com...
Tom,
I have understood your VBA coding but facing one problem which is not
resulting in correct output.
The problem is that even after data in a particular column is over, and
the permutation continues with that column assuming the information to
be blank.
Thus results in blank cells in the output and the macro continues until
the whole spreadsheet is full.
How do I avert this so that the macro proceeds to the preceding column
after encountering a blank cell and stops after reaching Col A and
again encounters a blank.
Incase what I have mentioned above is not clear, let me know.
Regards
Sandip.
wrote:
Tom,
You are 100% correct in your assumption. We are not allowed to query
the database directly and exact the information in a tabular form.
However there are standardised reports which we can use to extract
the
data. The only problem is that the output is in a report format
(predefined presentation) and multiple reports need to be run to see
the whole picture.
The irony is that though we are allowed to see the
information(whatever
we want) in a report format, we are not allowed to exact the info
through SQL in a database format inorder to analyse it in the way we
want and not in the rigid standarised reports already available.
Regards
Sandip.
Tim Williams wrote:
I took the OP's explanation to mean that owing to the "financial"
(sensitive?) nature of the data they were not permitted to make
complete "copies" of the data by extracting it whole...
Tim.
"Tom Ogilvy" wrote in message
...
We are not allowed to extract the information directly from the
database
in a tabular form.
I suspect if he could query the database, he wouldn't need the
combinations.
Sounds like he is blindly querying the database with all possible
combinations to get back any possible results that may exists.
Just my guess of course.
--
Regards,
Tom Ogilvy
"Tim Williams" <saxifrax@pacbell*dot*net wrote in message
...
Since you're using a database, why not just let SQL do the work
?
select t.Period, t.account, t.currency, t.code, t.country,[other
columns here], sum(t.amount),average(t.amount)
from DataTable t
group by
t.Period, t.account, t.currency, t.code, t.country,[other column
here]
Unless I misunderstand your explanation that should give you the
desired result.
Tim.
wrote in message
oups.com...
Hi,
I have gone through various posts in this group for the
solution
of
a
permutation I require but could not find one.
The data I have is as follows in eight columns
Col A Col B Col C Col D Col E ............ etc
Period Account Currency Code Country ....... etc
Nov-04 99700 USD 1234 USA
Dec-04 51000 2270 EUR
61000 2568 IND
38000
I need to have a macro which would give me a combination of
data
in
various columns into a database format. There can be additions
to
the
information in some of the columns for eg. incase a new
account
is
created.
The output on another sheet needs to be as follows
for eg.
Col A Col B Col C Col D Col E ............ etc
Period Account Currency Code Country ....... etc
Nov-04 99700 USD 1234 USA
Nov-04 99700 USD 1234 EUR
Nov-04 99700 USD 1234 IND
Nov-04 99700 USD 2270 USA
Let me provide a background on why I am following this process
since
if
someone has a better suggestion for arrive at the end result,
I
am
open
for it.
We have a database where all the financial information is
stored.
We
are not allowed to extract the information directly from the
database
in a tabular form. However using Excel retrieve I am allowed
to
extract
the information based on various paramaters and unique
variables
of
each parameter is being listed by me as shown in the first
table.
After having a permutation of various cols and parameters, I
will
be
adding an amount column which would provide the information
retrieved
based on the unique combination of 8 columns / 8 parameters.
Anyone's help is highly appreciated.
Regards
Sandip.