2014-11-24 6 views
1

У меня есть некоторые данные, которые я хочу, чтобы в основном сократить до первых 12 чисел, независимо от того, сколько из них выходит. То, как я сейчас это делаю, - это взять числа из столбца C и в столбце GI есть формула = Влево (C3,12). Затем я перетаскиваю его так, чтобы он соответствовал диапазону в C. Затем я запускаю макрос, который выглядит как это:Использование Left без копирования и вставки

Sub Macro6() 

    Range("G3:G7").Select 
    Selection.Copy 
    Range("C3").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 

End Sub 

Это работает, но я должен постоянно обновлять диапазон, и это довольно неуклюжий. Кто-нибудь знает лучший способ добиться того же самого? (в основном, значения в C становятся только первыми 12 цифрами)

ответ

1

Если я правильно вас понимаю, вы хотите заменить содержимое ячейки в столбце C на первые 12 цифр того, что находится в той же самой ячейке.

Начиная с данными, выглядит следующим образом:

enter image description here


Run This:

Sub keep12() 
    Dim wks As Worksheet 
    Set wks = Worksheets("Sheet1") 

    Dim rng As Range 
    Set rng = wks.Range("C3:C" & wks.Range("C" & wks.Cells.Rows.Count).End(xlUp).Row) 

    For Each cell In rng 
     cell.Value = Left(cell.Text, 12) 
    Next cell 
End Sub 

Результат:

enter image description here

+0

Это самое близкое к тому, что мне нужно. Как бы то ни было. Сырье номер: 1Е + 11 1.00003E + 11 4E + 13 1.50026E + 15 1.50026E + 17 (Это одна 150025752456000000) Результат: 1Е + 11 1.00003E + 11 4E + 13 1.50026E + 15 1.50026E + 17 (этот становится 150026000000) Мне нужно, чтобы все 12 чисел были одинаковыми с первых 12. – MadChadders

+0

Вот некоторые из сырых чисел, которые я работаю с 100000000000, 100003000000 , 40000010000000, 1500257523000000, 150025752456000000. Я не уверен, почему ваше кодирование округляет эти числа? Когда я его запустил. Они стали 100000000000, 100003000000, 40000000000000, 1500260000000000, 150026000000000000 – MadChadders

+0

Я попробовал это с фактическими данными, которые вы предоставили, и он прошел отлично без округления (см. Мои обновленные фотографии в ответе). Если я запустил его с форматированием ячейки как научным, я вижу вашу проблему. Я предполагаю, что научная нотация теряет точность числа. Можете ли вы изменить формат ячейки на Number вместо Scientific? –

2

Самый быстрый способ! Нет необходимости в VBA.

  1. Вставьте пустой столбец после Col А.
  2. Выделите Col A.
  3. Нажмите на данных | Текст по столбцам
  4. Выберите Fixed Width
  5. Установите поле с, как показано на изображении после 12 символов и нажмите на Finish
  6. Удалить столбец B (тот, который мы вставленной.)

enter image description here

И вот вывод

enter image description here

+0

LOL ... не принято;) –

+0

Это отличная идея и работает, однако проблема в том, что мне нужно, чтобы она была в VBA (именно поэтому я пометил ее таким образом), поэтому я могу сделать это еще дальше и используйте, если тогда утверждения. Иногда мне нужно, чтобы это было 12 цифр, а иногда и 10, в зависимости от того, что находится в столбце до этого. – MadChadders

1

Другие ответы являются правильными решениями для этого, а ответ формулы Excel является наиболее эффективным способом его выполнения @Siddharth Rout. Я просто добавить еще один метод, который в этом случае может более непосредственно отвечать на конкретные потребности Op, в, чтобы скопировать данные из столбца C в колонке G.

Sub LeftFilterAll() 

Dim sheetName As String 
Dim LastRow As Long 

sheetName = "Sheet1" 
LastRow = Sheets(sheetName).Range("C" & Rows.Count).End(xlUp).row ' Count the last row in Column C 

For row = 2 To LastRow 
'Left 12 From C to G 
    Sheets(sheetName).Cells(row, 7).Value = Left(Sheets(sheetName).Cells(row, 3).Text, 12) 
Next row 

End Sub 

Вниз по дороге, вы можете сделать это так просто ОБНОВЛЯЕТ значения в столбце G и не заменяет их всех, если вы обнаружите, что вы используете это снова и снова для 1 или двух новых записей, вместо всей группы вы получаете последнюю строку столбца G и начинаете с этот номер строки. Таким образом, у вас будет следующее обновление. Это нехорошо, если вы планируете менять значения в C после их ввода, поскольку они будут обрабатываться только один раз.

Sub LeftFilterUpdate() 

Dim sheetName As String 
LastCRow = Sheets(sheetName).Range("C" & Rows.Count).End(xlUp).row ' Count the last row in Column C 
LastGRow = Sheets(sheetName).Range("G" & Rows.Count).End(xlUp).row ' Count the last row in Column G 

For row = LastGRow To LastCRow 
'Left 12 From C to G 
    Sheets(sheetName).Cells(row, 7).Value = Left(Sheets(sheetName).Cells(row, 3).Text, 12) 
Next row 

End Sub 
+0

Это делает то же самое, что делает предложение @Portland Runner. У меня были необработанные данные 100000000000, 100003000000, 40000010000000, 1500257523000000 и 150025752456000000, и когда они вставляют числа в G, по какой-то причине они меняют формат на научный, поэтому они округляются (100000000000, 100003000000, 40000000000000, 1500260000000000, 150026000000000000). Мне нужно, чтобы это стало (100000000000, 100003000000, 400000100000, 150025752300, 150025752456) – MadChadders

+0

Что вам нужно сделать, зайдите в лист и выберите «G», затем примените форматирование для ячеек на всей колонке. Возможно, вы захотите рассмотреть «Общие» или «Текст» вместо цифр. – peege