Страницы: 1 2 След.
RSS
подстановка символа в каждую ячейку . на VBA
 
всем привет.  
подскажите пож-та , есть столбик А, в нём (в каждом файле по разному), до n-ной строки  имеются коды товара с разной длиной.  
нужно ,  чтобы   перед каждым  кодом вставился значок  '  без пробелов.  
 
например было в столбике А  
 
12321321  
1233574888783  
4875  
48454  
488  
 
а нужно после обработки:  
 
 
'12321321  
'1233574888783  
'4875  
'48454  
'488  
про этом длина столбца А в каждом обрабатываемом файле разная.  
 
Как это сделать  на VBA?  
 
Спасибо.
 
cells(n,1)="'"& cells(n,1)
 
{quote}{login=}{date=21.06.2010 11:24}{thema=}{post}cells(n,1)="'"& cells(n,1){/post}{/quote}  
 
как я понял в данной команде нужно четко  указывать  откуда и до куда нужно вставлять символ?
 
Чётко указывается - ПЕРЕД имеющимся значением. Только учтите - к пустому значению тоже добавится апостроф, если не делать специальную проверку.
 
{quote}{login=Юрий М}{date=21.06.2010 11:38}{thema=}{post}Чётко указывается - ПЕРЕД имеющимся значением. Только учтите - к пустому значению тоже добавится апостроф, если не делать специальную проверку.{/post}{/quote}  
 
т.е. так Cells(D, 1) = "'" & Cells(D, 13)  ?
 
это как хотите, но предполагалось, что берем одну ячейку и в нее же  вставляем апостроф
Живи и дай жить..
 
Что такое D - переменная? Изначально в Вашем вопросе было заместить значение в ячейке, а сейчас - берёте значение ИЗ ДРУГОЙ и добавляете к нему апостроф.
 
{quote}{login=слэн}{date=21.06.2010 11:50}{thema=}{post}это как хотите, но предполагалось, что берем одну ячейку и в нее же  вставляем апостроф{/post}{/quote}  
 
не много не так объяснил. нужно в каждую ячейку данного массива вставить это значение ' ,  с учетом того,  что  длина массива всегда разная.
 
{quote}{login=Юрий М}{date=21.06.2010 11:52}{thema=}{post}Что такое D - переменная? Изначально в Вашем вопросе было заместить значение в ячейке, а сейчас - берёте значение ИЗ ДРУГОЙ и добавляете к нему апостроф.{/post}{/quote}  
 
я не правильно написал ,  извините.  
Cells(D, 2) = "'" & Cells(D, 2)  
 
но мне нужно в каждую ячейку массива  до его конца.
 
Предложенный способ - cells(n,1)="'"& cells(n,1) - так и сделает, в чём проблема?
 
{quote}{login=Юрий М}{date=21.06.2010 11:56}{thema=}{post}Предложенный способ - cells(n,1)="'"& cells(n,1) - так и сделает, в чём проблема?{/post}{/quote}  
 
объясните пож-та,  как привязать это к массиву,  я не пойму пока.    
что такое n? это переменная которой нужно задавать параметры?
 
Макрос обработает все непустые ячейки ст. А текущего листа.  
 
Sub keidfoster()  
Dim x As Range  
For Each x In Range([A1], Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Cells
   If x <> "" Then x.Formula = "'" & x  
Next  
End Sub
 
Ну вот, а keidfoster так ничего и не понял...  
Если с n - в эту переменную заносим номер последнего заполненного ряда по колонке А, затем делаем цикл от 1 до n.  
А номер последнего заполненного ряда обычно определяют так:  
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
 
В коде от Казанский в общем тоже самое.
 
Т.е. чуть не так, цикл  
For n = 1 to iLastRow
 
keidfoster, если Вы испытываете трудности с макросом, то просто вставьте Ваши данные в этот файл, начиная с ячейки А2. Затем нажмите на кнопку.
 
{quote}{login=Hugo}{date=21.06.2010 12:25}{thema=}{post}Ну вот, а keidfoster так ничего и не понял...  
Если с n - в эту переменную заносим номер последнего заполненного ряда по колонке А, затем делаем цикл от 1 до n.  
А номер последнего заполненного ряда обычно определяют так:  
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
 
В коде от Казанский в общем тоже самое.{/post}{/quote}  
 
ребята,  ну я же нуб... не судите строго.  
работает ,  спасибо.
 
А я и не сужу, а пытаюсь объяснить, Вам пригодится, это ведь не последний макрос...
 
{quote}{login=Hugo}{date=21.06.2010 12:46}{thema=}{post}А я и не сужу, а пытаюсь объяснить, Вам пригодится, это ведь не последний макрос...{/post}{/quote}  
 
это только начало  : )  
спасибо большое
 
а можно ещё вопрос?    
команда,  которая будет видеть файлы в определённой папке и делать с ними это:  
Sub 123()  
Dim x As Range  
For Each x In Range([D2], Cells(ActiveSheet.Rows.Count, 1).End(xlUp)).Cells
If x <> "" Then x.Formula = "'" & x  
Next  
End Sub
 
{quote}{login=}{date=21.06.2010 01:48}{thema=}{post} видеть файлы в определённой папке и делать с ними это{/post}{/quote}  
Для этого придётся писать/использовать готовый макрос, который циклом откроет все/выбранные файлы в указанной папке. Примеров таких макросов на Форуме достаточно.
 
Это Вам надо Dir() изучать.  
Вот пример, сможете приспособить?  
 
Sub Spalik()  
Const fldr = "C:\temp\"         ' Путь к папке с файлами  
Dim strFile As String, wb As Workbook, ws As Worksheet, wsSum As Worksheet  
   
Application.ScreenUpdating = False  'нет мелькания на экране  
Set wsSum = ActiveSheet  
strFile = Dir(fldr & "*.xls")  
Do While strFile <> ""          'Цикл по файлам  
   Set wb = Workbooks.Open(fldr & strFile, ReadOnly:=True)  
   For Each ws In wb.Worksheets    'цикл по рабочим листам файла  
       ws.UsedRange.Copy  
       wsSum.Range(ws.UsedRange.Address).PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd, False, False  
   Next  
   wb.Close False  
   strFile = Dir  
Loop  
Application.ScreenUpdating = True  
End Sub
 
И вот здесь  
Range([D2], Cells(ActiveSheet.Rows.Count, 1).End(xlUp))
немного нестыковка, может выйти ошибка.  
Тогда уж надо    
Range([D2], Cells(ActiveSheet.Rows.Count, 4).End(xlUp))
просмотр четвёртого столбца.
 
{quote}{login=Hugo}{date=21.06.2010 02:05}{thema=}{post}Это Вам надо Dir() изучать.  
Вот пример, сможете приспособить?  
 
Sub Spalik()  
Const fldr = "C:\temp\"         ' Путь к папке с файлами  
Dim strFile As String, wb As Workbook, ws As Worksheet, wsSum As Worksheet  
   
Application.ScreenUpdating = False  'нет мелькания на экране  
Set wsSum = ActiveSheet  
strFile = Dir(fldr & "*.xls")  
Do While strFile <> ""          'Цикл по файлам  
   Set wb = Workbooks.Open(fldr & strFile, ReadOnly:=True)  
   For Each ws In wb.Worksheets    'цикл по рабочим листам файла  
       ws.UsedRange.Copy  
       wsSum.Range(ws.UsedRange.Address).PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd, False, False  
   Next  
   wb.Close False  
   strFile = Dir  
Loop  
Application.ScreenUpdating = True  
End Sub{/post}{/quote}  
 
 
а почему он всё вставляет в файл где я поставил кнопку на макрос а не в той папке где я указал вложения?
 
Set wsSum = ActiveSheet
 
Если проект разрастается, давай сразу создавай правильную структуру: константы вынесены из кода, переменные объявлены, имена информативны. За основу можешь взять этот код, разберись, как он работает.  
 
Option Explicit  
Const ColumnToProcess As Integer = 4  
Const fldr As String = "c:\temp\"   'с \ в конце!  
 
Sub AddApostrophe()  
Dim strFile As String, wb As Workbook, ws As Worksheet, blWBChanged As Boolean  
 
Application.ScreenUpdating = False  
strFile = Dir(fldr & "*.xls")  
Do While strFile <> ""    'Цикл по файлам  
   Set wb = Workbooks.Open(fldr & strFile)  
   blWBChanged = False  
   For Each ws In wb.Worksheets 'цикл по рабочим листам файла  
       blWBChanged = blWBChanged Or processSheet(ws)  
   Next  
   wb.Close blWBChanged  
   strFile = Dir  
Loop  
Application.ScreenUpdating = True  
End Sub  
 
Function processSheet(sh As Worksheet)  
Dim x As Range  
On Error GoTo err_nocells  
For Each x In sh.Columns(ColumnToProcess).SpecialCells(xlCellTypeConstants)  
   x.Formula = "'" & x  
Next  
processSheet = True  
Exit Function  
 
err_nocells:  
End Function
 
Лучше добавить тип в описании функции:  
Function processSheet(sh As Worksheet) As Boolean  
 
Она возвращает True, если хоть одна ячейка была изменена.  
Соответственно, если в книге ни одна ячейка не изменена, она закрывается без сохранения, иначе - с сохранением.
 
А нельзя просто  
blWBChanged = processSheet(ws)  
?  
 
И наверное ещё надо добавить  
Application.EnableEvents = False/True
 
Нельзя, т.к. нужен OR по всем листам книги.  
 
А какой Event может помешать выполнению этого кода?
 
Event открываемых книг. Мало ли что там понаписано. Я на тесте столкнулся...
 
{quote}{login=Hugo}{date=21.06.2010 03:43}{thema=}{post}Event открываемых книг. Мало ли что там понаписано. Я на тесте столкнулся...{/post}{/quote}Пасиб, буду иметь в виду.  
Кста, при выборе ячеек для обработки можно дописать параметр, чтобы выбирались только числовые. В реальности только к ним имеет смысл апостроф дописывать.  
 
For Each x In sh.Columns(ColumnToProcess).SpecialCells(xlCellTypeConstants, xlNumbers)
Страницы: 1 2 След.
Читают тему
Наверх