Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.
Условие задачи по копированию данных
На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:
Исходная таблица задания №1
Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):
Часть результирующего списка задания №1
Решение копированием с листа на лист
Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Resheniye1() Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, _ i1 As Long, gorod As Variant n1 = Sheets(«Лист1»).Cells(1, 1).CurrentRegion.Rows.Count For i1 = 1 To n1 With Sheets(«Лист1») If gorod <> .Cells(i1, 1) Then gorod = .Cells(i1, 1) n2 = 1 n3 = n3 + 1 n4 = 1 Else n2 = 2 End If Do While .Cells(i1, n2) <> «» Sheets(«Лист2»).Cells(n3, n4) = .Cells(i1, n2) n4 = n4 + 1 n2 = n2 + 1 Loop End With Next End Sub |
Переменные:
- n1 – количество строк в исходной таблице;
- n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
- n3 – номер строки текущей ячейки на втором листе;
- n4 – номер столбца текущей ячейки на втором листе;
- i1 – счетчик цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Решение с использованием массивов
Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
‘Объявление глобальных переменных ‘в разделе Declarations Dim massiv1 As Variant, n2 As Long, _ n3 As Long, i1 As Long, txt1 As Variant ‘Исполняемая процедура для решения ‘задания вторым способом Sub Resheniye2() Dim n1 As Long, gorod As Variant With Sheets(«Лист1»).Cells(1, 1) massiv1 = .CurrentRegion n1 = .CurrentRegion.Rows.Count n2 = .CurrentRegion.Columns.Count End With n3 = 0 txt1 = «» For i1 = 1 To n1 If gorod <> massiv1(i1, 1) Then If txt1 <> «» Then Call Vstavka End If gorod = massiv1(i1, 1) txt1 = massiv1(i1, 1) Call Kopirovanie Else Call Kopirovanie End If If i1 = n1 Then Call Vstavka End If Next End Sub ‘Копирование данных из массива в ‘строковую переменную через разделитель Sub Kopirovanie() Dim i2 As Long For i2 = 2 To n2 If massiv1(i1, i2) <> Empty Then txt1 = txt1 & «|» & massiv1(i1, i2) End If Next End Sub ‘Обработка данных из строковой ‘переменной в дополнительных массивах и ‘вставка очередной строки на второй лист Sub Vstavka() Dim n4 As Long, massiv2 As Variant, _ massiv3 As Variant, i3 As Long n3 = n3 + 1 massiv2 = Split(txt1, «|») n4 = UBound(massiv2) ReDim massiv3(0 To 0, 0 To n4) For i3 = 0 To n4 massiv3(0, i3) = massiv2(i3) Next Sheets(«Лист2»).Range(Cells(n3, 1), _ Cells(n3, n4 + 1)).Value = massiv3 End Sub |
Подпрограммы Kopirovanie
и Vstavka
используются в цикле For... Next
процедуры Resheniye2
по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2
и вызываются по мере необходимости.
Переменные:
- massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
- massiv2 – одномерный массив, заполняемый данными из переменной txt1;
- massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
- txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
- n1 – количество строк в исходной таблице;
- n2 – количество столбцов в исходной таблице;
- n3 – номер текущей строки на втором листе;
- n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
- i1, i2, i3 – счетчики цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations
программного модуля.
Есть книга, в которой 10 листов. Нужно скопировать содержимое 8-го листа в 3-й лист.
Я пытался сделать это следующим способом:
Set CurrentWorkbook = ThisWorkbook
Set sheetTemp = CurrentWorkbook.Worksheets(8)
With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
With CurrentWorkbook
sheetTemp.Copy CurrentWorkbook.Worksheets(3)
End With
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
Все работает, но вместо записи в 3-й лист оно создает перед третьим листом новый лист. Как сделать так, чтобы при копировании не создавался новый лист и записывалось в существующий лист?
задан 21 сен 2018 в 10:35
2
Полное копирование столбцов (ширина, форматирование, значения, примечания…):
Sub CopyRange()
Worksheets("Лист1").Columns("C:E").Copy
Worksheets("Лист2").Columns("C:E").PasteSpecial
End Sub
или
Sub CopyRange()
Worksheets("Лист1").Columns("C:E").Copy Worksheets("Лист2").Columns("C:E")
End Sub
Для копирования только нужного:
Worksheets("Лист1").Range("C3:E50").Copy
With Worksheets("Лист2").Range("C3")
.PasteSpecial xlPasteColumnWidths ' ширина столбца'
.PasteSpecial xlPasteValues' значения'
.PasteSpecial xlPasteFormats' форматы'
.PasteSpecial xlPasteFormulasAndNumberFormats ' формулы'
' .....'
End With
После копирования очистить буфер:
Application.CutCopyMode = False
ответ дан 21 сен 2018 в 11:38
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
paha83 Пользователь Сообщений: 12 |
Доброго времени суток уважаемые форумчане! Задача. С помощью VBA: Спасибо! Прикрепленные файлы
|
CAHO Пользователь Сообщений: 2183 |
Пункт 3 и 4 противоречат друг другу. Или я не так понял. Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. |
paha83 Пользователь Сообщений: 12 |
Приветствую, САНО! |
kakaccc Пользователь Сообщений: 5 |
#4 22.09.2015 15:38:18 paha83
, если еще актуально:
Здесь первые 3 пункта. Прикрепленные файлы
Изменено: kakaccc — 22.09.2015 18:11:32 |
||
kakaccc Пользователь Сообщений: 5 |
#5 23.09.2015 15:35:13 Для 5 пункта:
Хотя, по-моему, без макроса будет даже проще. Пока он настроен так, что его надо запустить на каждом листе, который будет затем защищен. Прикрепленные файлы
|
||
paha83 Пользователь Сообщений: 12 |
Доброго времени суток, kakaccc! Большое спасибо за ответ и помощь. Еще раз спасибо!!! |
rSkrin Пользователь Сообщений: 3 |
Добрый день! |
kakaccc Пользователь Сообщений: 5 |
#8 27.02.2016 17:38:57
Немного громоздкий макрос получился. Изменено: kakaccc — 28.02.2016 02:18:56 |
||
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#9 27.02.2016 18:36:24 kakaccc, чем по-Вашему будут отличаться результаты, если блок:
записать так:
Я сам — дурнее всякого примера! … |
||||
TheBestOfTheBest Пользователь Сообщений: 2366 Excel 2010 +PLEX +SaveToDB +PowerQuery |
Файл должен находиться в папке c:1. На таблице ПКМ-Обновить. Прикрепленные файлы
Неизлечимых болезней нет, есть неизлечимые люди. |
kakaccc Пользователь Сообщений: 5 |
KuklP, потому что я нуб в vba Спасибо! Буду теперь знать и использовать эту функцию. |
rSkrin Пользователь Сообщений: 3 |
Спасибо друзья! Но есть вопрос. Уважаемый kakaccc, правильно ли я понял про «таблица должна начинаться с ячейки А1»- т.е. начало всей таблицы, в том числе и шапки. |
rSkrin Пользователь Сообщений: 3 |
Вопрос отменяю. Чуть подправил, проверил работу, все отлично!!! Спасибо. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#14 28.02.2016 13:55:14
Да, это destination.
можно записать буквально:
в этом слуячае родительский объект вычисляется 3 раза вместо одного в предыдущем примере. Я сам — дурнее всякого примера! … |
||||||
kakaccc Пользователь Сообщений: 5 |
KuklP, все, раз это destination, то вопросов нет. Более менее разобрался. Буду теперь пользоваться. Красиво и лаконично получилось. Спасибо за объяснение! rSkrin, да, вся таблица должна начинаться с А1 (шапка в вашемслучае). Можно сделать независимо от находжения таблицы, используя свойство CurrentRegion, например. Но тогда перед запуском макроса надо будет выделять какую-нибудь ячейку из таблицы. Первоначально я так и записал макрос. Не знал как для вас проще будет. Если хотите, можно так сделать. |
0mega Пользователь Сообщений: 170 |
#16 06.11.2022 11:54:18 KuklP
, здравствуйте
почему команда начинается с точки
Какое у них отличие ? |
||||
MikeVol Пользователь Сообщений: 230 Ученик |
#17 06.11.2022 12:29:09 0mega, Думаю если вы прочтёте справку то возможно поймёте что к чему. почему команда начинается с точки |
I have two sheets containing the employee records.
Sheet1 contains the Event Date, CardNo, Employee Name, Dept Id, Employee No, Entry and Exit Time, Total Working Hours, Status, ConcatinatedColumn and Remarks (copied through vlookup from sheet2)
Sheet2 contains ConcatinatedColumn, Event Date, Employee No, Name, Remarks.
If the data in the remarks column of sheet2 is «Sick Off» then that row should be inserted to sheet1 without effecting the previous records.
I’ve already written the code for it but it does not work.
Would be really grateful if anyone can help me out !
THANKS IN ADVANCE !
MY CODE :
Sub SickOff()
Dim objWorksheet As Sheet2
Dim rngBurnDown As Range
Dim rngCell As Range
Dim strPasteToSheet As String
'Used for the new worksheet we are pasting into
Dim objNewSheet As Sheet1
Dim rngNextAvailbleRow As Range
'Define the worksheet with our data
Set objWorksheet = ThisWorkbook.Worksheets("Sheet2")
'Dynamically define the range to the last cell.
'This doesn't include and error handling e.g. null cells
'If we are not starting in A1, then change as appropriate
Set rngBurnDown = objWorksheet.Range("G2:G" & objWorksheet.Cells(Rows.Count, "G").End(xlUp).Row)
'Now loop through all the cells in the range
For Each rngCell In rngBurnDown.Cells
objWorksheet.Select
If rngCell.Value = "Sick Off" Then
'select the entire row
rngCell.EntireRow.Select
'copy the selection
Selection.Copy
'Now identify and select the new sheet to paste into
Set objNewSheet = ThisWorkbook.Worksheets("Sheet1" & rngCell.Value)
objNewSheet.Select
'Looking at your initial question, I believe you are trying to find the next available row
Set rngNextAvailbleRow = objNewSheet.Range("A1:A" & objNewSheet.Cells(Rows.Count, "A").End(xlUp).Row)
Range("A" & rngNextAvailbleRow.Rows.Count + 1).Select
ActiveSheet.Paste
End If
Next rngCell
objWorksheet.Select
objWorksheet.Cells(1, 1).Select
'Can do some basic error handing here
'kill all objects
If IsObject(objWorksheet) Then Set objWorksheet = Nothing
If IsObject(rngBurnDown) Then Set rngBurnDown = Nothing
If IsObject(rngCell) Then Set rngCell = Nothing
If IsObject(objNewSheet) Then Set objNewSheet = Nothing
If IsObject(rngNextAvailbleRow) Then Set rngNextAvailbleRow = Nothing
End Sub
Introduction
This tip shows 2 ways to copy data between Excel sheets in the same workbook using VBA.
Background
Most beginners in VBA programming make several mistakes, which are commonly named: bad practice. What is bad practice in Excel-VBA from my point of view?
- Using code without context, for example:
Range("A1") = "Some Text" Cells(5,5) = 125
Imagine, you wanted to insert those values into
Sheet2
, but when a code has been executed,Sheet1
was active. Where the data has been written? Of course, intoSheet1
. - Using
Select
andActivate
methodThis might be the reason for several issues, such as unnecessary calculations.
- Using undefined variables (not explicitly declared as some other type)
In that case, every variable consumes more memory than is necessary, because of type of variant.
See Data types - Using code without error handling
For further details, please see: Excel VBA Performance Coding Best Practices
Let’s say you want to copy some portion of data from Sheet1
into Sheet2
. A condition is defined as: Level
has to be greater than 1 (see image below).
Using the code
Solution #1 — Using ADODB.Recordset and Range.CopyFromRecordset Method
This method is really quick!
Note: Before you run below code, you have to add a reference to Microsoft ActiveX Data Object Library x.x. How? Check or Add an Object Library Reference
Please, check out below code (Excel 2007 ad higher). Do not forget to read my comments.
Sub CopyData1() Dim oConn As ADODB.Connection, oRst As ADODB.Recordset Dim sConn As String, sSql As String On Error GoTo Err_CopyData1 sConn = "Provider=Microsoft.ACE.OLEDB.12.0;_ Data Source=" & ThisWorkbook.FullName & ";_ Extended Properties='Excel 12.0 Macro;HDR=YES';" Set oConn = New ADODB.Connection With oConn .ConnectionString = sConn .Open End With sSql = "SELECT [Part_Number], [Name], [Version], [Level]" & vbCr & _ "FROM [Sheet1$A1:D100]" & vbCr & _ "WHERE [Level]>1;" Set oRst = New ADODB.Recordset oRst.Open sSql, oConn, adOpenStatic, adLockReadOnly With ThisWorkbook.Worksheets("Sheet2") .Range("A2:D10000").Delete xlShiftUp .Range("A2").CopyFromRecordset oRst End With Exit_CopyData1: On Error Resume Next If Not oConn Is Nothing Then oConn.Close Set oConn = Nothing If Not oRst Is Nothing Then oRst.Close Set oRst = Nothing Exit Sub Err_CopyData1: MsgBox Err.Description, vbExclamation, Err.Number Resume Exit_CopyData1 End Sub
For further details, please see:
- ADODB.Recordset
- Range.CopyFromRecordset
In case you want to fetch data from another type of workbook or you want to refer to earlier version of MS Excel files, you have to change connection string. See: Excel — OleDb 12.0 connection strings
If you would like to know, how to copy data into new or existing Sheet in different workbook, please find related content below.
Solution #2 — Using Do/While..Loop or For…Next Loop
Sub CopyData2() Dim srcWsh As Worksheet, dstWsh As Worksheet Dim i As Integer, j As Integer On Error GoTo Err_CopyData2 Set srcWsh = ThisWorkbook.Worksheets("Sheet1") Set dstWsh = ThisWorkbook.Worksheets("Sheet2") dstWsh.Range("A2:D10000").Clear i = 2 j = 2 Do While srcWsh.Range("A" & i) <> "" If srcWsh.Range("D" & i) = 1 Then GoTo SkipThisRow With dstWsh .Range("A" & j) = srcWsh.Range("A" & i) .Range("B" & j) = srcWsh.Range("B" & i) .Range("C" & j) = srcWsh.Range("C" & i) .Range("D" & j) = srcWsh.Range("D" & i) End With j = j + 1 SkipThisRow: i = i + 1 Loop Exit_CopyData2: On Error Resume Next Set srcWsh = Nothing Set dstWsh = Nothing Exit Sub Err_CopyData2: MsgBox Err.Description, vbExclamation, Err.Number Resume Exit_CopyData2 End Sub
You may want to ask me: Why a set of columns has been hard-coded in above example?
The answer is pretty easy. You may want to copy data in defferent order or into different range.
Other solutions
Using Filter-And-Copy
Sub FilterAndCopy() Dim srcWsh As Worksheet Dim dstWsh As Worksheet Set wsSource = ThisWorkbook.Worksheets("Sheet1") Set wsTarget = ThisWorkbook.Worksheets("Sheet2") On Error GoTo Err_FilterAndCopy dstWsh.Range("A2:A10000").Clear With srcWsh .Range("A1").AutoFilter .UsedRange.AutoFilter Field:=4, Criteria1:=">1" .UsedRange.Copy Destination:=dstWsh.Range("A2") End With Application.CutCopyMode = False srcWsh.Range("A1").AutoFilter Exit_FilterAndCopy: On Error Resume Next Set srcWsh = Nothing Set dstWsh = Nothing Exit Sub Err_FilterAndCopy: MsgBox Err.Description, vbCritical, Err.Number Resume Exit_FilterAndCopy End Sub
Above method is pretty good, but has several limitations. The main issue is copying a large portion of data. When you copy simple data (no formulas), it can take a while for the operation to complete. But when you’re copying the data containing set of formulas, then the time needed to complete operation may increase several times due an Excel have to perform thousands of calculations…
Copy data into new worksheet/workbook or into existing sheet in different workbook
This is quite easy. Depending on situation (workbook is already open or not), you have to change only one line or few lines.
Set dstWsh = Workbooks("ShortNameOfWorkbook.xlsx").WorkSheets("DestinationSheet") Workbooks.Open "FullPathAndNameOfWorkbook.xlsx" Set dstWsh = ActiveWorkbook.Worksheets("DestinationSheet")
Final Note
I hope you’ve learned how to copy data between sheets and workbooks.
History
- 2017-05-23 — Added: other solutions and information about copying data into new or existing workbook/worksheet
- 2017-05-17 — Initial version
wishcom 1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
||||||||
1 |
||||||||
18.12.2010, 21:39. Показов 19007. Ответов 20 Метки нет (Все метки)
Не понимаю почему работат.
,а
нет.
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
19.12.2010, 03:06 |
2 |
|||
Вы забыли инструкцию Select или Activate
0 |
wishcom 1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
||||
19.12.2010, 18:09 [ТС] |
3 |
|||
Activate Точно отпадает.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
19.12.2010, 18:36 |
4 |
Вы спросили, почему не работает Ваш код, и я ответил, что
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
19.12.2010, 20:48 [ТС] |
5 |
Неужели никак иначе.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
19.12.2010, 21:39 |
6 |
Можно и иначе, советую более внимательно ознакомиться с help.
0 |
22 / 5 / 1 Регистрация: 05.09.2010 Сообщений: 370 |
|
20.12.2010, 09:55 |
7 |
Так чтобы не маячило, может надо
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
20.12.2010, 20:04 [ТС] |
8 |
Да отлично я это знаю.
0 |
22 / 5 / 1 Регистрация: 05.09.2010 Сообщений: 370 |
|
21.12.2010, 05:25 |
9 |
А так?
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
21.12.2010, 22:56 [ТС] |
10 |
НЕ…
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
22.12.2010, 07:06 |
11 |
А вот так …
0 |
wishcom 1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
||||
22.12.2010, 20:06 [ТС] |
12 |
|||
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
22.12.2010, 22:58 |
13 |
|||
А вот так :
‘хотя в Excel наверняка существует функция возвращающая имя столбца,
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
23.12.2010, 18:14 [ТС] |
14 |
У тебя код побыстрее, но у меня для Rows и Cols, в функции содержатся все операторы. Кстати. Ссылка на адрес… это черевато крахом Exel.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
24.12.2010, 01:41 |
15 |
Этот код я написал специально для Вас, и в свете вышеописанных задач он свою функцию выполняет на 100%.
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
24.12.2010, 11:29 [ТС] |
16 |
У меня сверху стоит Option Explicit Ну мне покрайней мере надо было Не. Дописал бы.. Самому пригодилось бы…
0 |
wishcom 1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
||||
24.12.2010, 14:01 [ТС] |
17 |
|||
Я тут к твоему коду присмотрелся и написал…
0 |
Dimakart 0 / 0 / 1 Регистрация: 11.10.2010 Сообщений: 48 |
||||
24.12.2010, 19:51 |
18 |
|||
А вот так не проще ли будет ?
0 |
1 / 1 / 0 Регистрация: 17.02.2010 Сообщений: 131 |
|
24.12.2010, 22:08 [ТС] |
19 |
По моему мой код побыстрее…
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
25.12.2010, 01:21 |
20 |
Снимаю шляпу перед Dimakart. Я этот код хотел оставить напоследок, как мега извращение. Теперь снова придётся придумывать что-то более извращённое.
0 |