ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   3 dimension array using Excel names (https://www.excelbanter.com/excel-programming/405664-3-dimension-array-using-excel-names.html)

[email protected]

3 dimension array using Excel names
 
Hello

I want to use name specification of 3-dim array (sheet, column, raw).

First define var "rw" using Menu-Insert-Name-Insert as
=Sheet1:Sheet3!$B$4:$D$5

Haw can i access any cell in "rw" range using VBA?

Construction -----Range("rw")----- cause the 1004 error - Method
'Range' of object 'Global' failed

Best regards,
Konstantin

joel

3 dimension array using Excel names
 
VBA will not accept a worksheet name that referes to more than one worksheet.
To get multiple sheets you could do something like this

myaddress = Range("rw").Address
For Each sh In ThisWorkbook.Sheets
sh.Range(myaddress) = "123"
Next sh

" wrote:

Hello

I want to use name specification of 3-dim array (sheet, column, raw).

First define var "rw" using Menu-Insert-Name-Insert as
=Sheet1:Sheet3!$B$4:$D$5

Haw can i access any cell in "rw" range using VBA?

Construction -----Range("rw")----- cause the 1004 error - Method
'Range' of object 'Global' failed

Best regards,
Konstantin


Bernie Deitrick

3 dimension array using Excel names
 
Konstantin,

Well, you have found out that Excel isn't a fully featured 3D spreadsheet. 3D names are only usable
by certain worksheet functions. But, you can get around the limitation by playing with the name's
RefersTo string. See the macro below.

HTH,
Bernie
MS Excel MVP

Sub TryNow()
Dim my3DName As String
Dim myR As Range
Dim myNR As String
Dim myShts As String
Dim Sht1 As String
Dim Sht2 As String
Dim iSht1 As Integer
Dim iSht2 As Integer
Dim strAdd As String
Dim lR1 As Long
Dim lR2 As Long
Dim iC1 As Integer
Dim iC2 As Integer

my3DName = "RW"

myNR = Mid(ActiveWorkbook.Names(my3DName).RefersTo, 2)
strAdd = Mid(myNR, InStr(1, myNR, "!") + 1)
myShts = Replace(Left(myNR, InStr(1, myNR, "!") - 1), "'", "")
Sht1 = Left(myShts, InStr(1, myShts, ":") - 1)
iSht1 = Worksheets(Sht1).Index
Sht2 = Replace(myShts, Sht1 & ":", "")
iSht2 = Worksheets(Sht2).Index
lR1 = Range(strAdd).Cells(1).Row
lR2 = Range(strAdd).Cells(Range(strAdd).Cells.Count).Row
iC1 = Range(strAdd).Cells(1).Column
iC2 = Range(strAdd).Cells(Range(strAdd).Cells.Count).Col umn
MsgBox "The name """ & my3DName & """ refers to" & Chr(10) & _
"Worksheets " & IIf(iSht1 < iSht2, iSht1, iSht2) & _
" to " & IIf(iSht1 < iSht2, iSht2, iSht1) & ", " & Chr(10) & _
"Rows " & lR1 & " to " & lR2 & ", " & Chr(10) & _
"Columns " & iC1 & " to " & iC2 & "."

End Sub


wrote in message
...
Hello

I want to use name specification of 3-dim array (sheet, column, raw).

First define var "rw" using Menu-Insert-Name-Insert as
=Sheet1:Sheet3!$B$4:$D$5

Haw can i access any cell in "rw" range using VBA?

Construction -----Range("rw")----- cause the 1004 error - Method
'Range' of object 'Global' failed

Best regards,
Konstantin




Alan Beban[_2_]

3 dimension array using Excel names
 
wrote:
Hello

I want to use name specification of 3-dim array (sheet, column, raw).

First define var "rw" using Menu-Insert-Name-Insert as
=Sheet1:Sheet3!$B$4:$D$5

Haw can i access any cell in "rw" range using VBA?

Construction -----Range("rw")----- cause the 1004 error - Method
'Range' of object 'Global' failed

Best regards,
Konstantin

If the functions in the freely downloadable file at
http://home.pacbell.net/beban are available to your workbook, you might
want to consider the following:

After running

Sub ab1()
Dim rng1 As range, rng2 As range, rng3 As range
Dim arr, x
Set rng1 = Sheet1.range("b4:d5")
Set rng2 = Sheet2.range("b4:d5")
Set rng3 = Sheet3.range("b4:d5")
arr = Array(rng1, rng2, rng3)
rw = Load3D(1, "XY", arr)

At this point you can access any element in rw by row, column, sheet
with, for example,

elem = rw(2, 2, 1) for 2nd row, 2nd column, 1st sheet

And if before exiting Sub ab1 you execute

Save3DInNames rw, "rw"
End Sub

You can later retrieve the array with

Sub ab2()
Dim rw
rw = Load3DFromNames(1, "rw", [rwPlaneXY0])
. . .

and again access any element by row, column, sheet.

And after running Sub ab1, on any worksheet you can access any element
with, e.g.,

=INDEX(rwPlaneXY0, 1, 2) for row 1, column 2, Sheet1, or
=INDEX(rwPlaneXY2, 2, 3) for row 2, column 3, Sheet3

I.e., the XY indices are 0-based, the Sheet indices 1-based.

Alan Beban

[email protected]

3 dimension array using Excel names
 
Thank you very much for the answers








All times are GMT +1. The time now is 05:06 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com