Страницы: 1
RSS
Как програмно выполнить копирование -вставку столбца перед запуском макроса
 
Уважаемые специалисты VBA? прошу помочь дописать макрос, точнее дополнить правильно код. Смысл на Листе 1 макрос загружает данные со второго столбца в массив и преобразовует выгружает на второй лист в первый столбец и во второй столбец на первый лист, я хотел бы более правильней записать код чтоб он сначала выплнил копирование второго столбца вставил в первый и только после этого начал макрос загрузки данных в массив. Я просто сделал copy-pasteхотелось бы более профессионально. Заранее спасибо
Код
Sub ABC()
Dim sh1, sh2, I&, j&, x&
Dim arr1(), arr2()
On Error Resume Next
arr1 = Sheets(1).UsedRange.Value
With Sheets(2)
arr2 = .Range("a1:a" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
ReDim Preserve arr2(LBound(arr2) To UBound(arr2), 1 To 2)
For I = LBound(arr2) To UBound(arr2)
    For j = LBound(arr1) To UBound(arr1)
        If arr1(j, 1) = arr2(I, 1) Then
         arr2(I, 2) = arr1(j, 2)
                For x = LBound(arr1, 2) To UBound(arr1, 2)
                     arr1(j, x) = "IsEmpty"
                Next x
            Exit For
        End If
Next j, I
    .Range("a1").Resize(UBound(arr2), UBound(arr2, 2)) = arr2
I = .Cells(.Rows.Count, 2).End(xlUp).Row
For j = 1 To I
    If .Cells(j, 3) = "" Then .Cells(j, 3).Value = Application.WorksheetFunction.VLookup(.Cells(j, 2), Sheets(1).Columns("a:d"), 4, 0)
Next j
End With
End Sub
 
Цитата
Смысл на Листе 1 макрос загружает данные со второго столбца в массив и преобразовует выгружает на второй лист в первый столбец и во второй столбец на первый лист
Вы сами-то поняли?
 
Да чего то наумничал))) Вот этот код преобразовывает текст во второй колонке первого листа, и второго, следующий подтягивает значения с первого листа на второй. Но он там загружает массив проводит преобразование. Смысл в следующем я хотел бы чтоб перед тем как код CodePart переделал колонку 2 на листе один, сначала это значение скопировал в первую колонку, а другой код ABC забрал в массив начиная со второй колонки ну соответственно выгрузил значения учитывая второй колонки на первом листе.
Код
Sub CodePart()
Dim arr(), dic, I&, iStr
On Error Resume Next
With Worksheets("Лист1")
    arr = .Range("Y1:Z" & .Cells(.Rows.Count, "Z").End(xlUp).Row).Value
    Set dic = CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(arr)
        dic.Add CStr(arr(I, 1)), arr(I, 2)
    Next
    arr = .Range("B1:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).Value
End With
ReDim Preserve arr(1 To UBound(arr), 1 To 2)
For I = 1 To UBound(arr)
    iStr = Split(arr(I, 1), "-")
    arr(I, 1) = dic(iStr(1)) & " " & iStr(1) & "-" & iStr(2)
Next
Worksheets("Лист2").Range("A2").Resize(UBound(arr), 1) = arr
Worksheets("Лист1").Range("B1").Resize(UBound(arr), 1) = arr
End Sub
 
vikttur, я просто задумывал чтоб значения подтягивались типа бралась из часть слова 000790-B-0004 ,  B-0004 оно находило себе значение  слова 000790-B-0004, т.е номер сертификата и количество и в массиве собралось вот такое выражение 000790-B-0004=B-0004=Балка B-0004=1=сертификат №.....и соответственно на листе втором в первой колонке прописалось Балка B-0004, во второй сертификат №....в 6 колонке 1, но так как это сильно трудоёмкая работа и ума то у меня точно не хватит, то сделал так макрос АВС преобразовывает слово прописует его во вторую колонку на листе 1 и в первую колонку на листе 2 и второй макрос уже подтягивает сертификат с первого листа на второй лист. И чтоб не потерялось начальное значение 000790-B-0004, его скопировать в первую колонку на первый лист. Но тут трудность, если есть что то в первой колонке на листе 1 макрос который подтягивает значение не работает. не понятно почему
Изменено: alex1210 - 19.11.2017 02:51:33
 
и в заголовок вчитайтесь:
Цитата
Как програмно выполнить копирование -вставку столбца перед запуском макроса
программно - это с помощью макроса или макросом, если хотите
сделать что-либо макросом перед его запуском - невозможно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,я пояснил для чего надо скопировать, иначе действительно логика не понятна, и вообще что надо копировать из первого второй столбец. тут можно макросом copy paste потом через call вызвать макрос CodePart но это как то не системно да и не красиво
 
Цитата
я пояснил для чего надо скопировать
пояснять нужно не как Вы решили делать, а что у Вас есть на старте и что нужно получить в итоге.
вызывать макрос макросом это нормально (это стандартная общепринятая практика), а не красиво и не системно писать макросы-монстры, которые на один экран не помещаются
я тоже пояснил, что сделать что-либо макросом до запуска макроса - не возможно!
Изменено: Ігор Гончаренко - 19.11.2017 04:08:57
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,Ну сейчас то вроде всё понятно пояснил
 
Цитата
alex1210 написал:
Ну сейчас то вроде всё понятно пояснил
Для кого понятно, для вас? Я ни первое ни второе пояснение не понял.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim,  :D . Начнем заново)))). Мне надо чтоб макрос скопировал значение второго столбца и ставил в первый на листе 1)))))
 
В этой теме делали похожее.
 
Юрий М, Вот этой строчкой  
Код
Range(.Cells(1, iCol), .Cells(LastRow, iCol)).Copy Cells(1, 1)
 
Что этой строчкой?
 
строка говорит о том что копируем 1 колонку?
 
Строка говорит о том, что копируем столбец (диапазон) с номером iCol на активный лист в ячейку А1.
 
а как мне ее переписать что копируем 2 столбец на листе  "сборка" и вставляем в первый столбец на на этом же листе
 
Код
Range(Cells(1, 2), Cells(LastRow, 2)).Copy Cells(1, 1)


 
Юрий М, спасибо большое, а вот именно уточнить чтоб только листе "сборка"
Код
Worksheets("сборка").Range(Cells(1, 2), Cells(LastRow, 2)).Copy Cells(1, 1)
 
alex1210, У Вас нет на клавиатуре вопросительного знака? Вас не поймёшь: или Вы задаёте вопрос, или утверждаете...
И попробуйте сами поэкспериментировать - пользы будет больше.
Строка из #12 работает на активном листе.
 
Юрий М, вот я и не хочу чтоб она работала на активном листе, а именно на "сборка". мало ли откуда макрос запущу.  
 
Код
With Worksheets("сборка")
    Range(.Cells(1, 2), .Cells(LastRow, 2)).Copy .Cells(1, 1)
End With



 
Юрий М,о спасибо, теперь теперь красивый код)))
Страницы: 1
Наверх