Используйте относительные ссылки - PullRequest
0 голосов
/ 16 ноября 2018

Будучи новичком в VBA, я хотел бы получить некоторые входные данные для этого кода, чтобы улучшить его скорость ... В настоящее время он не выглядит так, как "VBA"; однако «результат» кода правильный ...

Sub Rigtig()

Set Marketshare = Sheets("Output").Range("p40:p50")
'Select.
Sheets("Output").Select
    Cells(38, 17).Copy
Sheets("Input").Select
   Cells(33, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Output").Select
Marketshare.Cells(1, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Output").Select
    Cells(40, 17).Copy
    Cells(40, 17).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Marketshare.Cells(2, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Output").Select
    Cells(41, 17).Copy
    Cells(41, 17).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    Marketshare.Cells(3, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues


Sheets("Output").Select
    Cells(38, 18).Copy
Sheets("Input").Select
   Cells(33, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Output").Select
Marketshare.Cells(1, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Output").Select
    Cells(40, 18).Copy
    Cells(40, 18).Select
    Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Output").Select
    Cells(38, 19).Copy
Sheets("Input").Select
   Cells(33, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Output").Select
Marketshare.Cells(1, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Output").Select
    Cells(40, 19).Copy
    Cells(40, 19).Select
    Selection.PasteSpecial Paste:=xlPasteValues
Marketshare.Cells(2, 1).Copy
Sheets("Input").Select
    Cells(23, 28).Select
    Selection.PasteSpecial Paste:=xlPasteValues

Я хотел бы сделать одну и ту же «копировальную пасту» примерно 10 раз в строках, а затем изменить столбец.

Заранее спасибо

Лучший

Вальдемар

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Итак, я хочу, чтобы это было примерно так:

    Sub Test()

    Dim vAddresses As Variant
    Dim vRef As Variant

    vAddresses = Array( _
        Array("Q38", "AB33"), _
        Array("P40", "AB23"))

For Each vRef In vAddresses
        Worksheets("Input").Range(vRef(1)) = Worksheets("Output").Range(vRef(0))
    Next vRef

Sheets("Output").Cells(40, 17).Value = Sheets("Output").Cells(40, 17).Value

 vAddresses = Array( _
        Array("Q38", "AB33"), _
        Array("P41", "AB23"))
For Each vRef In vAddresses
        Worksheets("Input").Range(vRef(1)) = Worksheets("Output").Range(vRef(0))
    Next vRef

Sheets("Output").Cells(41, 17).Value = Sheets("Output").Cells(41, 17).Value

Имеет ли это смысл?

Итак, повторить его 10 раз вниз в строках, а затем переместить 1 столбец влево и повторить.

Надеюсь, вы поняли мою точку зрения, и спасибо :)

/ Вальдемар

0 голосов
/ 16 ноября 2018

Как сказал @Glitch_Doctor - если вам нужны только значения, вы можете сделать это "эта ячейка = эта ячейка", а не копировать / вставлять.

Чтобы сократить код и сделать его немного более «VBA», вы можете поместить пары ссылок на ячейки в массив и пройти по массиву:

Sub Test()

    Dim vAddresses As Variant
    Dim vRef As Variant

    vAddresses = Array( _
        Array("Q38", "AB33"), _
        Array("A1", "AB23"))

    For Each vRef In vAddresses
        Worksheets("Input").Range(vRef(1)) = Worksheets("Output").Range(vRef(0))
    Next vRef

End Sub  

Вы также можете использовать С ... Завершить блоком , чтобы вам не приходилось каждый раз использовать имя листа:

Sub Test1()

    With Worksheets("Output")
        Worksheets("Input").Cells(33, 28) = .Cells(38, 17)
    End With

End Sub 

Если вы хотите скопировать все (формула, форматирование), используйтеСкопируйте и вставьте в одну строку:

Sub Test2()

    With Worksheets("Output")
        Worksheets("Input").Cells(33, 28).Copy Destination:=.Cells(38, 17)
    End With

End Sub
...