Страницы: 1
RSS
Распределение данных из таблицы в разные места
 
Добырй день. Долгое время бьюсь с этой проблемой. Имеется столбец с данными. Нужно разделить данные и поместить в разные места, исходя из первых 2 букв. то есть: если первые две буквы "RT" или  "RI", то поместить значение ячейки в одно место, а если "SR" или "SB", то в другое.  
Заранее благодарен.
 
добрый день.  
"разные места" - это какие? первое - под матрас, второе - за печку?  
 
пример или описание - куда помещать (на разные листы, в разные столбцы, в разные файлы,..)?  
и, (если хотите) доп.информация - насколько часто это делается, каков реальный объем и т.п., т.к. способов несколько - от фильтра до макросов...
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
как вариант, все RI,RT копируем на лист 2 A1:An, а SR,SB на тот же лист C1:Cn.    
данные подкачиваются из другой программы в реальном времени и постоянно варьируются.
 
забыл добавить, что копируются в фиксированный диапазон. то есть на листе2 под это дело будет выделено по 30 строк. и туда должны подтягиваться данные
 
вот видите, как всё интересно, оказывается :)  
 
идём дальше - куда и как "подкачиваются" данные из другой программы? файл в общем доступе?.. "другая" программа - DDE-сервер?.. и что именно она "постоянно подкачивает" - целиком список или по одной-несколько новых позиций?..  
и что делать, если "отведенных" 30-ти ячеек под списки не хватит?  
 
пс. я не слишком много ОТ ВАС хочу?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
я запнулся вот на чем. через "левсимвол" выцепил 2 первые буквы. потом с помощью впр нашел совпадение. но проблема в том, что он ищет только первое совпадение, а остальную таблицу не просматривает. ковырялся через поиск, поискпоз, смещение, но не стыкуется ничего. если бы можно было после того как найдено совпадение, начать искать со следующей строки было бы идеально, но я не нашел такую функцию
 
варианты решений:  
1. доп.столбец (ЛЕВСИМВ(...,2), дальше - сводная таблица;  
2. простой фильтр - Условие типа "равно SR* ИЛИ равно SB*", скопировать отфильтрованные и вставить куда надо;  
3. расширенный фильтр  
4. макросом - перебирать диапазон поэлементно или использовать вариант 2.  
5. м.б. что-то еще...
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Очень благодарен Вам за помощь. прошу прощения, если недостаточно полно формулирую мысли. Выводится весь список через DDE, но список постоянно меняется, то есть одни позиции добавляются, другие ликвидируются. 30 строк должно хватить, я взял с запасом. файл пока на локальном компьютере, но находиться будет в общем доступе
 
"ушёл в себя, вернусь не скоро" (с) :)  
я извиняюсь, но мне сейчас надо бежать.  
 
в двух словах - идея:  
1. рядом с диапазоном, куда попадают данные по DDE, с запасом создаем формулы =ЛЕВСИМВ(...,2)  
2. на событие Calculate листа вешаем макрос  
3. в макросе либо с помощью фильтра, либо простым перебором отбираем нужные значения и копируем их в "разные места".  
3-прим. если списки могут то увеличиваться, то уменьшаться - то предварительно "разные места" нужно очищать.  
 
если сами сможете - попробуйте реализовать всё это в VBA, если нет - вернусь, помогу.  
 
пс. не факт, что событие Calculate будет происходить - с DDE это вполне возможно. тогда можно будет попробовать по-другому.  
 
ппс. насчет общего доступа - вообще не могу ничего подсказать, не юзал, но, имхо, возможны подводные камни.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
все сделал с помощью расширенного фильтра. не эффектно, зато эффективно. спасибо за помощь)
 
Два доп. столбца, тоже не айс.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Один доп. столбец.  
 
Владимир, в столбце А можно проще:  
=ИЛИ(ПСТР(C6;1;2)={"SB";"SR"})
 
Интересная связка. Я даже не знал, что кол-во символов в ЛЕВ/ПРАВСИМВ() можно опускать.  
Век учись, только доживи!  
 
:-)  
 
--  
67696
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Без доп. столбцов. При повторах данных не сработает, нужно допилить.
 
{quote}{login=Andych}{date=06.05.2011 02:35}{thema=}{post}Без доп. столбцов. При повторах данных не сработает, нужно допилить.{/post}{/quote}  
 
а вы не жульничаете? :)  
автору темы надо было "начинающиеся с SR или SB", а не "начинающиеся с S".
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=06.05.2011 02:38}{thema=Re: }{post}{quote}{login=Andych}{date=06.05.2011 02:35}{thema=}{post}Без доп. столбцов. При повторах данных не сработает, нужно допилить.{/post}{/quote}  
а вы не жульничаете? :)  
автору темы надо было "начинающиеся с SR или SB", а не "начинающиеся с S".{/post}{/quote}  
 
Во-первых, если человек не до конца понял задание, то это не значит, что он, жульничает.  
Во-вторых, почему вы не задали тот же вопрос vikttur?
 
{quote}{login=Andych}{date=06.05.2011 02:58}{thema=Re: Re: }{post}  
Во-первых, если человек не до конца понял задание, то это не значит, что он, жульничает.  
Во-вторых, почему вы не задали тот же вопрос vikttur?{/post}{/quote}  
 
1. это была шутка, не обижайтесь, пожалуйста :)  
2. не заметил, потому что более интересным по задумке (без доп.столбца) был ваш вариант.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=06.05.2011 03:13}{thema=Re: Re: Re: }{post}  
1. это была шутка, не обижайтесь, пожалуйста :)  
{/post}{/quote}  
 
Ок!
 
{quote}{login=Andych}{date=06.05.2011 02:35}{thema=}{post}Без доп. столбцов. При повторах данных не сработает, нужно допилить.{/post}{/quote}  
Хорошо. Нелетучий вариант:  
=ЕСЛИ(СЧЁТЕСЛИ($C$6:$C$17;"S*")<СТРОКА(2:2);"";ВПР("S*";ИНДЕКС($C$6:$C$17;ПОИСКПОЗ(E6;$C$6:$C$17;)+1):$C$17;1;))
 
Продолжение темы) оказалось, что фильтр отлично работает на моем компьютере, но не на компьютерах других пользователей. поэтому варианта остается два или перебирать таблицу с помощью формулы или с помощью макроса.  
еще раз объясню суть. в ряд один подкачивается произвольное количество данных. нужно исходя из первых двух букв раскидать их в разные столбцы(например, если начинается на "SR" или "SB", то в столбец 2, если на "RT" или "RI", то в столбец 3).  
я решил остановиться на макросе. споткнулся я вот на чем  
Sub CopyCurrentRegion2()  
Sheets("данные").range("O2:O25").Copy Sheets("Лист1").range("A1:A25")  
For Each cell In range("B1:B25")  
 cell.Value = Left(cell.Offset(0, -1).Value, 2)  
Next cell  
For Each cell In range("D1:D25")  
 If cell.Offset(0, -2).Value = "SB" Or cell.Offset(0, -2).Value = "SR" Then  
 cell.Value = cell.Offset(0, -2).Value  
 Else: cell.Value = ""  
 End If  
Next cell  
End Sub  
 
а дальше тупик.  
буду благодарен за помощь.
 
Sub ttt()  
Dim a, x&, y&, i&  
a = [a1].CurrentRegion.Value
x = 1: y = 1  
For i = 1 To UBound(a)  
If Mid(a(i, 1), 1, 2) = "SB" Or Mid(a(i, 1), 1, 2) = "SR" Then Cells(x, 2) = a(i, 1): x = x + 1  
If Mid(a(i, 1), 1, 2) = "RT" Or Mid(a(i, 1), 1, 2) = "RI" Then Cells(y, 3) = a(i, 1): y = y + 1  
Next  
End Sub
Спасибо
 
Дмитрий, тогда красивее так:  
 
 
Sub tt()  
   Dim a, x&, y&, i&  
   a = [a1].CurrentRegion.Value
   x = 1: y = 1  
   For i = 1 To UBound(a)  
       Select Case Mid(a(i, 1), 1, 2)  
       Case "SB", "SR": Cells(x, 2) = a(i, 1): x = x + 1  
       Case "RT", "RI": Cells(y, 3) = a(i, 1): y = y + 1  
       End Select  
   Next  
End Sub
 
{quote}{login=Hugo}{date=20.05.2011 11:39}{thema=}{post}Дмитрий, тогда красивее так:  
 
 
Sub tt()  
   Dim a, x&, y&, i&  
   a = [a1].CurrentRegion.Value
   x = 1: y = 1  
   For i = 1 To UBound(a)  
       Select Case Mid(a(i, 1), 1, 2)  
       Case "SB", "SR": Cells(x, 2) = a(i, 1): x = x + 1  
       Case "RT", "RI": Cells(y, 3) = a(i, 1): y = y + 1  
       End Select  
   Next  
End Sub{/post}{/quote}  
 
точно Игорь так красивее.Честно даже и не знал, что Case  через запятую можно указать.  
Спасибо буду знать.
Спасибо
 
все идеально работает. огромное спасибо за помощь
Страницы: 1
Читают тему
Наверх