Страницы: 1
RSS
Как прописать в макросе "плавающие" строки?
 
Не могу подобрать нужное слово. В общем, есть массив данных представленных в виде:  
 
1  
2  
3  
 
Нужно преобразовать в    
 
""  
"1 3"  
""  
 
Понятно, что будет использоваться функция "сцепить", хочу повесить макрос на кнопку и применять его к необходимым ячейкам. Как указывать в макросе эти "плавающие номера" ячеек? Т.е. чтобы не было жесткой привязки к A1, например, а просто при выделении любой макрос выполнялся.
 
$A$1  
или  
R1C1
There is no knowledge that is not power
 
Мне нужно чтобы макрос выполнялся и на A1, и на любой другой выбраной строке
 
Спасибо.    
Однако это порадило новые вопросы - не понятно как сдвигать функцию selection.  
 
Загрузил файл: На Лист1 исходник, на Лист2 желаемый вариант. Как выглядит макрос, который позволяет выделив произвольную строку (в данном случае 4 и 22), сцепить строки (в данном случае 4+"_"+6 и 22+"_"+24), перенести значение одного из столбцов вверх+2 (G6 и G24 в G4 и G22, соответственно) и почистить пять строк под ней (в данном случае 5-9 и 23-27).  
 
Сейчас курю весь поиск, буду благодарен за подсказку (у меня массив из десятков тысяц строк, посыпаю голову пеплом =( )
 
имхо:  
для десятков тыщ строк лучше работать не с каждой ячейкой (или парой ячеек), а со всем массивом сразу.  
вам надо список получить?    
чтобы на каждую позицию было по одной строке данных?  
на этом листе или можно на другом?    
и как определять первую строку для каждой следующей позиции? (как варианты - они всегда идут через определенное одинаковое кол-во строк, всегда содержат акое-то ключевой слово (например, "пиво") и т.д. и т.п.)?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Какая итоговая задача?  
Если нужно сделать список вида  
Пиво "фортеция" светлое - 5% 0,5 л стеклянная бутылка 5 литр (или куб.дм) 4,600,721,001,414  
Пиво "толстяк крепкое" светлое - креп.8% 0,5 л стеклянная бутылка 5 литр (или куб.дм) 4,600,721,001,421  
то я бы делал так - брал исходное в массив, потом перебором искал "Пиво" и перекладывал в другой массив эту строку и строку на две ниже. Потом массив выгрузил на новый лист.  
Если строк десятки тысяч - тогда работать напрямую с листом будет долго.  
Ну а если нужно именно на исходном листе преобразовать - так же - нашёл/переложил/очистил. Но это медленно.
 
С массивом было бы конечно на порядок лучше, но дело в том, что он не однороден (разное количество промежуточных строк, хотя ключевое слово "Пиво" есть в 90% случаев). Список необходимо получить на этом листе, хотя это не принципиально.
 
Пейте пиво пенное...  
 
Sub ПЫВО()  
Dim lr&, i&  
lr = Cells(Rows.Count, 1).End(xlUp).Row  
For i = 1 To lr  
If Cells(i, 1) Like ("Пиво*") Then  
Cells(i, 1) = Cells(i, 1) & " " & Cells(i, 1).Offset(2, 0)  
Cells(i, 1).Offset(0, 1) = Cells(i, 1).Offset(2, 1)  
End If  
Next i  
End Sub
 
Другой алгоритм исходя из примера - нужная строка та, где есть данные в А и пусто в G. Склеиваем с данными из следующей ниже заполненной в этих ячейках строки.
 
чрезвычайно заинтересованный, напряженно думаю:    
это каким волшебным образом в одной строке соседствуют "0,5 л стеклянная бутылка" и "5 литр" ? %)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
RAN, большое спасибо! Сейчас вникаю.  
ikki, это заговор поставщиков - литраж упаковки))
 
Как можно удалить все строки, которые не содержат слово "Пиво"?
 
Вам нужно стереть данные или удалить строки?  
Если удалить - тогда почему не сделать быстро через массив на другой лист?
 
как-то так:  
 
Sub test()  
Application.ScreenUpdating=False  
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1  
If Not Cells(i, 1).Value Like "*Пиво*" Then Rows(i).Delete  
Next  
Application.ScreenUpdating=True  
End Sub  
 
правда, для "десятка тыщ строк" это довольно медленный вариант :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Мужчины, спасибо! Очень помогли! Сейчас ручками чищу - все равно массив не однородный, нужно каждую позицию перепроверить, но пободрее пошло)
 
На массиве, может пригодится. Если возможны варианты как ниже красным записано - можно чуть подкорректировать.
Страницы: 1
Читают тему
Наверх