Vba excel массив книг

 

iNic

Пользователь

Сообщений: 365
Регистрация: 12.08.2013

Как при открытии книги собрать имена существующих листов в массив?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Видимых или и скрытых тоже?

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#3

12.08.2014 18:51:58

Перебрать их циклом. В модуль книги на открытие:

Код
Dim i As Long
    ReDim arr(1 To Sheets.Count, 1 To 1)
    For i = 1 To Sheets.Count
        arr(i, 1) = Sheets(i).Name
    Next
 
 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#4

12.08.2014 18:59:37

Вариант туда же.

Код
    varStrCollect = ""
    For Each sh In Sheets
        varStrCollect = varStrCollect & sh.Name & "|"
    Next sh
    varStrCollect = Left(varStrCollect, Len(varStrCollect) - 1)
    varArrCollect = Split(varStrCollect, "|")

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#5

12.08.2014 19:00:22

И я. Не пропадать же добру

Код
Private Sub Workbook_Open()
Dim ArrSheet
Dim wSheet As Worksheet
Dim i As Long
    With ThisWorkbook
        ReDim ArrSheet(1 To .Worksheets.Count)
        
        For Each wSheet In ThisWorkbook.Worksheets
            i = i + 1
            ArrSheet(i) = wSheet.Name
        Next wSheet
    End With
End Sub
 

iNic

Пользователь

Сообщений: 365
Регистрация: 12.08.2013

JayBhagavan

и

Юрий М

, здравствуйте. Вставил на открытие книги код от Юрий М.

 

insaidd

Пользователь

Сообщений: 16
Регистрация: 14.08.2019

Подскажите как записать не все листы в массив а с 3ого, например?

Изменено: insaidd28.12.2022 15:01:36

 

insaidd

Пользователь

Сообщений: 16
Регистрация: 14.08.2019

#8

28.12.2022 15:00:25

Цитата
написал:
И я. Не пропадать же добру

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13      Private   Sub   Workbook_Open()    Dim   ArrSheet    Dim   wSheet   As   Worksheet    Dim   i   As   Long          With   ThisWorkbook              ReDim   ArrSheet(1   To   .Worksheets.Count)                           For   Each   wSheet   In   ThisWorkbook.Worksheets                  i = i + 1                  ArrSheet(i) = wSheet.Name              Next   wSheet          End   With    End   Sub   

 

А как записать не все листы в массив, а только с 3его?

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#9

28.12.2022 15:11:53

Код
Private Sub Workbook_Open()
    Dim ArrSheet()
    With ThisWorkbook
        If .Worksheets.Count > 2 Then
            ReDim ArrSheet(1 To .Worksheets.Count - 2)
            For i = 3 To ThisWorkbook.Worksheets.Count
            ArrSheet(i - 2) = ThisWorkbook.Worksheets(i).Name
            Next
        End If
    End With
End Sub

Мой канал

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#10

28.12.2022 15:17:49

Код
Private Sub Workbook_Open()
    If ThisWorkbook.Worksheets.Count < 3 Then Exit Sub
    Dim arr As Variant
    ReDim arr(3 To ThisWorkbook.Worksheets.Count)
    Dim yy As Long
    For yy = 3 To ThisWorkbook.Worksheets.Count
        arr(yy) = ThisWorkbook.Worksheets(yy).Name
    Next
End Sub

I am trying to have several arrays of my worksheets that I can call up in my code using.

ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

I am wondering if there is anyway to set up a variable similar to the following:

Dim ArrayOne As String
Dim ArrayTwo As String

ArrayOne = ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ArrayTwo = ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

ArrayOne 'Call this Array then save

Filename:="C:Datatestfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

ArrayTwo 'Call this array then save

Filename:="C:Datatestfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

Please let me know if you can help me!!

asked Jun 18, 2013 at 12:44

user2437803's user avatar

2

Try using the record macro functionality. It will allow you to select multiple sheets and then copy them into a new book. Next save that book and you are there. Now tinker with the code to get it to work specifically the way you want.

It will come down to:

ThisWorkbook.Sheets(Array("Sheet1", "Sheet3")).Copy
ActiveWorkbook.SaveAs ...

If you want to predefine the arrays, thats is easily done as well; those will just have to contain the names of the sheets. An Array can be created by using a Variable variable:

Dim ArrayOne as Variant
ArrayOne = Array("Sheet1", "Sheet3")

And use that in the .Sheets().Copy :

ThisWorkbook.Sheets(ArrayOne).Copy

answered Jun 18, 2013 at 13:00

K_B's user avatar

K_BK_B

3,6681 gold badge18 silver badges29 bronze badges

4

Here is an example of how arrays in VBA work:

Sub Example()
    Dim ArrayOne() As String
    Dim ArrayTwo() As String
    Dim ArrayThree As Variant
    Dim i As Long

    ReDim ArrayOne(1 To Sheets.Count)
    ReDim ArrayTwo(1 To 2)

    For i = 1 To Sheets.Count
        ArrayOne(i) = Sheets(i).Name
    Next

    ArrayTwo(1) = "Sheet1"
    ArrayTwo(2) = "Sheet2"

    ArrayThree = Array("Sheet1", "Sheet3")
End Sub

Now from what I understand you do not want to use arrays. You can reference worksheets in your workbook like this:

Sheets("SheetName") 'SheetName is the name of your sheet
Sheets(1)           '1 = sheet index

One way to copy sheets to a new workbook to be saved is:

Sub Example()
    Dim wkbk As Workbook

    ThisWorkbook.Sheets("Sheet1").Copy
    Set wkbk = ActiveWorkbook
    ThisWorkbook.Sheets("Sheet3").Copy After:=wkbk.Sheets(wkbk.Sheets.Count)

    wkbk.SaveAs FileName:="C:New Excel Book.xlsx", _
                FileFormat:=xlOpenXMLWorkbook
    wkbk.Close
End Sub

answered Jun 18, 2013 at 13:12

Ripster's user avatar

RipsterRipster

3,5252 gold badges19 silver badges28 bronze badges

1

I had a similar problem trying to create a dynamic array (not knowing how many sheets there was for me to deal with). I simply used this:

Sub copyArrayOfSheets()

Dim loopArray() As Variant

ReDim Preserve loopArray(1 To 1)
loopArray(1) = "Sheet1" ' a Sheet I know I need to export

j = 1
For Each loopSheet In ThisWorkbook.Sheets
    If loopSheet.Name <> "Sheet1" Then
        theName = loopSheet.Name
        j = j + 1
        ReDim Preserve loopArray(1 To j)
        loopArray(j) = theName ' Assign the name of the sheets to j-th position of loopArray() 
    End If
Next loopSheet

Sheets(loopArray()).Copy

Set newBook = ActiveWorkbook    
newBook.Activate

End Sub

Hope this helps in any way…

answered Apr 11, 2014 at 13:01

Arthur's user avatar

ArthurArthur

1741 gold badge1 silver badge10 bronze badges

1

Following Arthur’s solution (last comment), I had a similar problem (thus reached this post) : I was trying to create a dynamic array, which would save a series of sheets within a Workbook in an array and then perform specific actions with that array.

What is different is that, the user defines the sheets’ names within a range (column) in excel (they represent scenarios for another macro), however this range may be expanded or shortened.

I use 2 arrays, where i run the loop in the first and save the extension each time to the other array (for transparency reasons). Code:

Sub testArray()
    Dim a, b As Integer
    scenarios_number = Sheets(sheet1).[c1] - 1 ' (this is where i put the # of scenarios / sheets (-1 is used as i want the array to start from 0))
    a = 0
    Dim Scenarios_array, dimension_array() As Variant
    ReDim Scenarios_array(0 To scenarios_number) '(resize array to match the #'s of scenarios)
    ReDim dimension_array(0 To a)
    For a = 0 To scenarios_number
    Scenarios_array(a) = Range("c8").Offset(a, 0).Value '(this is where my scenarios' names start within sheet1 -- using offset for the loop -- this is why i use -1 above as i want a to start @ 0)
    ReDim Preserve dimension_array(0 To a) ' (expand dimension of 2nd array)
    dimension_array(a) = Scenarios_array(a) ' (save the value in the second array, expaning its dimensions)
    Next
    MsgBox "Get Ready"
    Sheets(dimension_array()).Select
    ActiveWindow.SelectedSheets.Delete
End Sub

Hope that helps :)

Simon's user avatar

Simon

1,4161 gold badge15 silver badges24 bronze badges

answered Jul 20, 2014 at 12:57

papadopouleas's user avatar

I also was trying to do this but I found another way

What i was trying to accomplish was that I have a workbook with multiple sheets and gave them a name. I wanted to select a few sheets and exclude a few sheets that needed to be exported to a different excel file.

Here is (after a lot of searching and trying) my code

Dustin

Dim ii As Integer 'Counter of worksheets
Dim namefile as string 'Variable for name of the new file
namefile = "NameOfNewFile.xlsx" 'Name of new file

For ii = 1 To ThisWorkbook.Sheets.Count 'Counts from 1 to last sheetnumber
    If Sheets(ii).Name <> "Namesheet1" Then If Sheets(ii).Name <> "Namesheet2" Then Sheets(ii).Select Replace:=False 
    'NameSheet1 and NameSheet2 are being exluded from the new file
Next ii

ActiveWindow.SelectedSheets.Copy 'Copies the selected files

Set NewWb = ActiveWorkbook
NewWb.SaveAs Filename:= _
"C:Users" & Environ("UserName") & "Desktop" & namefile, FileFormat:=xlOpenXMLWorkbook 
'Saves as xlsx file to desktop
NewWb.Close 'Closes the new file
Set NewWb = Nothing 'Clear NewWb to reduce memory usage

answered Sep 11, 2015 at 14:36

Dustin's user avatar

han73r

0 / 0 / 0

Регистрация: 03.06.2015

Сообщений: 30

1

Создать массив с названиями листов

21.08.2016, 21:43. Показов 10141. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть книга, где листы создаются и удаляются макросами.
Задался целью создать массив, в котором будут содержаться названия всех листов.
Хочу вывести этот массив на ListBox

Написано так:

ListForm

Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Explicit
Private SheetsDat(1 To Sheets.Countunt) As New SheetsClass 'ругается на Sheets.Countunt
Dim i As Integer, y As Integer
Private Sub UserForm_Initialize()
For y = 1 To Sheets.Count
Set SheetsDat(y).SHT = Worksheets(y).Name
Next
For i = 1 To Sheets.Count
ListBox.AddItem SHT(i)
Next

В Class Modules что написать, чтобы он этот массив сохранял? Справку перерыл не понимаю(

SheetsClass

Visual Basic
1
Public WithEvents SHT As EventClass

Ругается
Не знаю, что писать после As, чтобы он сохранил список названий листов.
Помогите!



0



Shersh

Заблокирован

22.08.2016, 07:26

2

Лучший ответ Сообщение было отмечено han73r как решение

Решение

Цитата
Сообщение от han73r
Посмотреть сообщение

ругается на Sheets.Countunt

Да кто угодно заругается, споткнувшись на никому неведомом слове.

Цитата
Сообщение от han73r
Посмотреть сообщение

Задался целью создать массив, в котором будут содержаться названия всех листов.
Хочу вывести этот массив на ListBox

Зачем тогда эти пляски с классами?
Весь код —

Visual Basic
1
2
3
4
5
Private Sub UserForm_Initialize()
For i = 1 To Sheets.Count
ListBox1.AddItem Sheets(i).name
Next
END SUB



1



0 / 0 / 0

Регистрация: 03.06.2015

Сообщений: 30

22.08.2016, 10:35

 [ТС]

3

Shersh, спасибо, то что нужно) Перемудрил и слова перепутал, поздно было)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

22.08.2016, 10:35

3

Я пытаюсь создать массив, содержащий все имена рабочих листов, начиная с 4-го рабочего листа в активной рабочей книге. Я получаю сообщение об ошибке в 4-й строке, когда я пытаюсь изменить размер массива. Чего мне не хватает? В настоящее время существует 6 рабочих листов, третья скрыта (на случай, если что-то изменится).

Dim i As Integer
Dim sheetsToSkip() As Variant
For i = 4 To Sheets.Count
    ReDim Preserve sheetsToSkip(UBound(sheetsToSkip) + 1)
    sheetsToSkip(UBound(sheetsToSkip)) = Sheets(i).Name
Next i

3 ответа

Лучший ответ

@BigBen на правильном пути. Вы должны ReDim только один раз:

Public Function ListWorkssheets()

    Dim SheetsToSkip()  As String
    Dim Count           As Integer
    Dim Index           As Integer
    
    Count = ThisWorkbook.Worksheets.Count
    ReDim SheetsToSkip(1 To Count)
    
    For Index = 1 To Count
        SheetsToSkip(Index) = ThisWorkbook.Worksheets((Index + 3 - 1) Mod Count + 1).Name
    Next
    
    ' Verify.
    For Index = LBound(SheetsToSkip) To UBound(SheetsToSkip)
        Debug.Print Index, SheetsToSkip(Index)
    Next

End Function


0

Gustav
28 Июл 2020 в 08:32

Вот несколько примеров, если сначала вы подсчитаете «действительные» листы (если вы избегаете включать листы по имени) — это поможет.

— Версия 1 — не надо проверять (просто получить все имена листов в массиве)


Sub SheetNamesToArray()

Dim MyWb As Workbook
Dim MySheet As Worksheet
Dim SheetNameArray() As String  ' Array of Sheet Names
Dim LP As Integer ' ( Generic Loop Variable )

Set MyWb = ActiveWorkbook

    ':: Redim to workbook count
    ReDim SheetNameArray(MyWb.Sheets.Count)
    
    ':: Check Array Size
    Debug.Print UBound(SheetNameArray) & " = " & MyWb.Sheets.Count

    ':: Set Array from Sheet Names
    For LP = 1 To MyWb.Sheets.Count
        SheetNameArray(LP) = Sheets(LP).Name
        Debug.Print SheetNameArray(LP) & " :" & Sheets(LP).Name
    Next LP


End Sub

— Версия 2 — проверять имена, сохранять только действительные (используя Inst для проверки, есть ли у нескольких листов определенная строка в имени)

Sub SheetNamesToArray_And_Ignore_Names()

Dim MyWb As Workbook
Dim MySheet As Worksheet
Dim SheetNameArray() As String  ' Array of Sheet Names
Dim LP, LPx As Integer ' ( Generic Loop Variable(s) )
Dim MyValidSheetsCount As Integer  ' Array Size for only 'valid' sheets


    ':: Apply to active workbook
    Set MyWb = ActiveWorkbook

    For LP = 1 To MyWb.Sheets.Count
        ':: Skip over names to ignore..
        If InStr(1, Sheets(LP).Name, "Four", vbTextCompare) = 0 Then
            '::Iterate count of 'valid' sheets ::
            MyValidSheetsCount = MyValidSheetsCount + 1
        End If
    
    Next LP

    ':: Redim to workbook count
    ReDim SheetNameArray(MyValidSheetsCount)
    
    LPx = 0
    
    ':: Set Array from Sheet Names
    For LP = 1 To MyWb.Sheets.Count

        ':: Same test again, this time add to array, and iterate index variable ( LPX )
        If InStr(1, Sheets(LP).Name, "Four", vbTextCompare) = 0 Then
            SheetNameArray(LPx) = Sheets(LP).Name
            '::Iterate array index ::
            LPx = LPx + 1
        End If

    Next LP

    Debug.Print "Found " & LPx & " valid sheets" & vbNewLine
    
    ':: Check only the 'valid' sheets are recorded
    For LP = 0 To LPx - 1
      Debug.Print "(" & Format(LP, "000#") & ")  : " & SheetNameArray(LP)
    Next LP

End Sub

С VBA, вероятно, есть несколько способов получить тот же результат.

Для первоначального вопроса, если вы просто пытаетесь пропустить последние 4 и не обеспокоены тем, что они могут быть не в порядке, выполните:


Sub ReallySimpleJustUseNumbers()

':: N.B.  Sheets are indexed starting at 1, arrays begin at 0 ..

Dim MyWb As Workbook
Dim MySheet As Worksheet
Dim SheetNameArray() As String  ' Array of Sheet Names
Dim LP As Integer ' ( Generic Loop Variable )

Set MyWb = ActiveWorkbook

    ':: Are there greater than four sheets in this workbook ?
    If MyWb.Sheets.Count > 4 Then
        ':: Redim to workbook count
        ReDim SheetNameArray(MyWb.Sheets.Count - 4)
    Else
        ':: Polite Exit
        MsgBox "Too Few Sheets buddy"
        Exit Sub
    End If
    
    For LP = 4 To MyWb.Sheets.Count
        SheetNameArray(LP - 4) = MyWb.Sheets(LP).Name
    Next LP
    
    ':: Output array
    For LP = 0 To UBound(SheetNameArray)
        Debug.Print LP & " --- " & SheetNameArray(LP)
    Next LP

End Sub

Это просто начнет заполнять массив, как определено как Количество листов — Четыре начальных листа, индекс начинается с 0


0

InstantExcel.com
28 Июл 2020 в 01:20

Проблема в том, что ваш массив sheetsToSkip еще не имеет верхней границы в первом цикле цикла. Вы можете проверить, является ли sheetsToSkip массивом в первом цикле, а затем либо измерить его в первый раз, либо изменить его размер.

Предложение по коду:

Sub CreateSheetNameArray()
    Dim i As Integer
    'Brakets are removed
    Dim sheetsToSkip As Variant

    For i = 4 To Sheets.Count
        If IsEmpty(sheetsToSkip) Then
            ReDim sheetsToSkip(0 To 0)
        Else
            ReDim Preserve sheetsToSkip(UBound(sheetsToSkip) + 1)
        End If
        sheetsToSkip(UBound(sheetsToSkip)) = Sheets(i).Name
    Next i
End Sub

Помните, что ReDim Preserve медленный. Если у вас есть много циклов цикла, вы можете просто измерять массив перед циклом.


0

Michael Wycisk
28 Июл 2020 в 00:19

Вывод в массив данных с двух листов книги

Shadow-xxx

Дата: Четверг, 16.01.2014, 11:00 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Здравствуйте. Есть книга Excel c данными на двух листах (Лист1, Лист2). Данные записаны в три столбца и неизвестным количеством строк (не больше 1000). Я не могу понять, как обратиться к этим данным и сохранить их в два массива (A(x,y,z) — Лист1; В(x,y,z) — Лист2), чтобы потом производить с ними действия. Данные могут быть как строчные, так и цифры. Если возможно, то хотелось бы видеть код попроще, чтобы было удобнее в нем разобраться. Буду очень благодарен за понимание и помощь.

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 12:05 |
Сообщение № 2

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Shadow-xxx, 2 варианта вычислений. 1ый брать по 1 столбцу, второй сразу все
[vba]

Код

Sub m()
‘//———————————————————————————————————————
Dim lastUsedRow As Integer, i As Integer
Dim str As String
Dim Array_1() As Single
lastUsedRow = Worksheets(«Лист1»).Cells(Worksheets(«Лист1»).Rows.Count, 1).End(xlUp).Row ‘ нахожу посл. строку в столбце 1 листа Лист1
ReDim Array_1(lastUsedRow) ‘ задаю размер массива

For i = 1 To lastUsedRow
       Array_1(i) = Worksheets(«Лист1»).Cells(i, 1) ‘ заполняю массив данными из 1 столбца
Next

‘если надо глянуть что получилось
For i = 1 To lastUsedRow
       str = str & Array_1(i) & Chr(13)
Next
MsgBox «Данные из 1ого столбца:» & Chr(13) & str
‘//———————————————————————————————————————
‘ вариант с двумерным массивом
Dim max As Integer ‘, i As Integer, j As Integer
Dim Array_123() As Single ‘ будущий двумерный массив для 3ёх столбцов
Dim Array_lengthArray(1 To 3) As Integer ‘ массив длин столбцов
Dim str123 As String ‘строка для вывода результатов на экран

‘можно заполнять в цикле, усли столбцов будет больше 3ёх
Array_lengthArray(1) = Worksheets(«Лист1»).Cells(Worksheets(«Лист1»).Rows.Count, 1).End(xlUp).Row
Array_lengthArray(2) = Worksheets(«Лист1»).Cells(Worksheets(«Лист1»).Rows.Count, 2).End(xlUp).Row
Array_lengthArray(3) = Worksheets(«Лист1»).Cells(Worksheets(«Лист1»).Rows.Count, 3).End(xlUp).Row
‘поиск макс эл-та
max = Array_lengthArray(1)
For i = 1 To 3
       If Array_lengthArray(i) > max Then
           max = Array_lengthArray(i)
       End If
Next
‘заполняем наш массив
ReDim Array_123(1 To max, 1 To max)
For i = 1 To max
       For j = 1 To 3
           Array_123(i, j) = Worksheets(«Лист1»).Cells(i, j)
       Next
Next

‘если надо глянуть что получилось   
For i = 1 To max
       For j = 1 To 3
           str123 = str123 & Array_123(i, j) & «,»
       Next
       str123 = str123 & Chr(13)
Next
MsgBox «Данные из 3ёх столбцов:» & Chr(13) & str123
‘//———————————————————————————————————————
End Sub

[/vba]


в интернете опять кто-то не прав

Сообщение отредактировал МатраскинЧетверг, 16.01.2014, 12:33

 

Ответить

Wasilich

Дата: Четверг, 16.01.2014, 12:23 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

А говорили, на форуме нет телепатов. :D
А, я вот так и не понял что хочет ТС. :(

хотелось бы видеть код попроще

Хотелось бы видеть пример, как есть и как надо.

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 12:35 |
Сообщение № 4

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Wasilic,
[offtop]котоинтуиция[/offtop]


в интернете опять кто-то не прав

 

Ответить

Shadow-xxx

Дата: Четверг, 16.01.2014, 12:43 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Круто. Спасибо за описание. То что надо! Телепаты есть, однозначно=)

 

Ответить

Hugo

Дата: Четверг, 16.01.2014, 13:42 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Зачем циклы? Причём тут трёхмерный массив?
[vba]

Код

Sub попроще()
     Dim a(), b()

           a = Sheets(1).[a1].CurrentRegion.Value
     b = Sheets(2).[a1].CurrentRegion.Value

     MsgBox a(2, 3)
     MsgBox b(3, 2)

       End Sub

[/vba]


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 14:05 |
Сообщение № 7

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Hugo,

Причём тут трёхмерный массив?

ввожу в заблуждение, там двумерный массив на самом деле. в файле не испраивил камент наверно


в интернете опять кто-то не прав

 

Ответить

Hugo

Дата: Четверг, 16.01.2014, 14:07 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Не, трёхмерный хотел Shadow-xxx


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 14:11 |
Сообщение № 9

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Hugo, он попался в такое заблуждение как и я поначалу. 3 столбца не значат, что массив 3-х
кототелепатия-2


в интернете опять кто-то не прав

Сообщение отредактировал МатраскинЧетверг, 16.01.2014, 14:14

 

Ответить

Hugo

Дата: Четверг, 16.01.2014, 14:15 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Ну да, у листа два измерения — строка и столбец. И даже у одной ячейки их можно найти :)


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 14:21 |
Сообщение № 11

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Hugo, Именно так. Размерность можно увеличить до трёх, если захотим отслеживать с какого листа данные. Или ещё чАво ;)
p.s. отслеживать прям в массиве


в интернете опять кто-то не прав

 

Ответить

Shadow-xxx

Дата: Четверг, 16.01.2014, 14:22 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Чем вариант Матраскина, может быть лучше Hugo.
Так-то у Hugo идеальный короткий код. Но нет ли где подводных камней?
Интересно на будущее.

Сообщение отредактировал Shadow-xxxЧетверг, 16.01.2014, 14:42

 

Ответить

Shadow-xxx

Дата: Четверг, 16.01.2014, 14:29 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Теперь мне необходимо сопоставить значения с Листа1 и Листа2. В результате True записать данные на Лист3. С вариантом Hugo я не знаю данных, необходимых для цикла проверки (то есть размер массива). С вариантам Матраскина я не понимаю как обратиться к Лист2 (чтобы сохранить и его данные в массив)

Сообщение отредактировал Shadow-xxxЧетверг, 16.01.2014, 14:53

 

Ответить

Матраскин

Дата: Четверг, 16.01.2014, 16:40 |
Сообщение № 14

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Shadow-xxx, осталось сверить и записать на лист3.


в интернете опять кто-то не прав

 

Ответить

Shadow-xxx

Дата: Пятница, 17.01.2014, 07:10 |
Сообщение № 15

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо hands

 

Ответить

Like this post? Please share to your friends:
  • Vba excel массив инициализация
  • Vba excel массив или нет
  • Vba excel массив в классе
  • Vba excel копировать диапазон ячеек
  • Vba excel копирование ячейки на другой лист