2014-11-21 3 views
2

Я пытаюсь объединить диапазон с одним значением.Конкатенировать диапазон с одним значением

Почему это не вставляет переменную «комбо» в ячейку?

Больше Объяснение (Скопировано из комментариев)

В основном я хочу, чтобы принимать значения в каждой ячейке столбца С и добавить 00000 к концу всех из них. поэтому, если C1 было 50, я хочу, чтобы конечный результат был скопирован поверх 50 и заменил C1 на 5000000, если C2 был 575, тогда замените это на 57500000, все по всему диапазону данных в C.

Я бы предпочёл его вставьте значения в том же столбце, если это невозможно. Тогда для примера, который вы дали, я бы хотел, чтобы D1 = AAA00000, D2 = BBB00000, D3 = CCC00000 и т. Д.

+3

Я вижу много ошибок в коде. 'A)' Вы находите последнюю строку неправильно. Вы никогда не должны жестко кодировать значения строк. xl2007 + имеет 1048576 строк. Возможно, вы захотите увидеть ссылку [this] (http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba) о том, как получить последнюю строку. 'B)' Чтобы построить диапазон, 'Range (« C3 »& LastRowColC) является неправильным способом. Вы хотите 'Range (« C3: C »и LastRowColC)' 'C)' Следующая строка 'combos = rngOne & strngOne'. Что вы пытаетесь достичь здесь? –

+0

Возможно, если вы сможете это объяснить, нам будет легче понять. Допустим, у вас есть только 3 ячейки в Col C, которые заполняются 'C1 =" AAA ",' C2 = "BBB" и 'C3 =" CCC "', так что вы хотите в 'D3'? –

+0

Диапазон колеблется в столбце C, но его значения не превышают 65 тыс., Поэтому я начал его там и поднял, по-видимому, на последние данные, я понимаю эту ошибку сейчас. Спасибо за ссылку. В основном я хочу взять значения в каждой ячейке столбца C и добавить 00000 в конец всех из них. поэтому, если C1 равен 50, я хочу, чтобы конечный результат копировал по 50 и заменил C1 5000000, если C2 был 575, тогда замените это на 57500000, все по всему диапазону данных в C. – MadChadders

ответ

3

Это то, что вы пытаетесь? Я дал вам два пути.

WAY 1

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long 
    Dim rng As Range 

    '~~> Change this to the relevant worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> Get last row in Col C 
     lRow = .Range("C" & .Rows.Count).End(xlUp).Row 

     '~~> Construct your range 
     Set rng = .Range("C3:C" & lRow) 

     '~~> Multiply all the cells in the range with 100000 
     '~~> so that 55 become 5500000, 123 becomes 12300000 and so on 
     rng.Value = Evaluate(rng.Address & "*100000") 
    End With 
End Sub 

WAY 2

Тип 100000 в ячейке D1, а затем запустить этот макрос

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long 
    Dim rng As Range 

    '~~> Change this to the relevant worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> Get last row in Col C 
     lRow = .Range("C" & .Rows.Count).End(xlUp).Row 

     '~~> Construct your range 
     Set rng = .Range("C3:C" & lRow) 

     '~~> This cell has 100000 
     .Range("D1").Copy 

     '~~> Paste Special Value/Multiply 
     rng.PasteSpecial Paste:=xlPasteValues, _ 
         Operation:=xlMultiply, _ 
         SkipBlanks:=False, _ 
         Transpose:=False 

     Application.CutCopyMode = False 
    End With 
End Sub 
+0

, да, что работает, что поможет мне на правильном пути поблагодарить вас за вашу помощь! Теперь мне просто нужно выяснить, что делать, когда люди добавляют дефисы к своим номерам, поэтому это может работать для всех учетных записей, но это спасатель жизни, я даже не думал о умножении на 100000, но это имеет смысл. – MadChadders

+1

'что делать, когда люди добавляют дефисы к своим номерам? Знаете ли вы, что вы можете использовать формулу' If' в 'Evaluate'? ;) –

+0

Одна вещь, которую можно сделать, чтобы улучшить это кодирование, вместо Set ws = Thisworkbook.Таблицы («Лист1») вы можете написать Set ws = Worksheets (1) Затем он запускает его как первый рабочий лист, даже если имя изменено;) – MadChadders

Смежные вопросы