[Excel] стобцы в строки

NatalyNoelle

есть таблица такого вида
А 1
А 2
А 3
В 1
В 2
В 3
как ее автоматом переделать в
А 1 2 3
В 1 2 3
надо учесть, что А, В, ... > 1000

Impils

Значения А и В фиксированы ?
Знаешь точное кол-во А и В ?

NatalyNoelle

значения А и В фиксированы
знаю сколько А и В
Количество строк с одинаковыми А,В одинаково

Impils

Могу написать скрипт на vbs который переделает.

NatalyNoelle

а без него никак?
я сейчас вроде сделал путем комбинации concаtenate и text to columns :grin:

lubanj

СЗМ!
первая ссылка в гугле
http://ispolzuy.ru/kak-perevernut-tablitsu-v-excel

nata_chira

ТС, насколько я понял, надо не транспонировать, а объединить по признаку в первом столбце

nata_chira

>1000 относилось к числу строк или к количеству различных значений в первом столбце?

lilia13

без vba :)

NatalyNoelle

кол-ву значений первом столбце
причем для каждого значения в первом столбце кол-во значений во втором одинаково

Impils

Что то я не понял.
Кроме А и В есть ещё значения (C, D,E и тд) и этих значений > 1000 ?
Или есть в первом столбце есть только значения А и В и строк > 1000 ?

NatalyNoelle

первый вариант)

Impils

Отлично :)
А они подряд идут ?
A
B
C
D
или
A
B
A
C
A
D
E
B

NatalyNoelle

подряд)

Impils

Вот, сохранить как blahblah.vbs (чуть подредактировать код: в настройках указать название exel файла откуда читать значения, и имя файла куда писать значения положить в папку с exel файлом и запустить :)
 
'====== Настройки =====
'Exel файл откуда читать значения
strReadExcel = "test.xlsx"
'Exel файл куда записывать результат
strWriteExel = "test_new.xlsx"
'====== Настройки =====

Set fso = CreateObject("Scripting.FileSystemObject")
Set objRead_Excel = CreateObject("Excel.Application")
Set objSheet = objRead_Excel.Workbooks.Open(fso.BuildPath(fso.GetParentFolderName(WScript.ScriptFullName strReadExcel
Set objWrite_Excel = CreateObject("Excel.Application")
Set objWB = objWrite_Excel.Workbooks.Add
Set objWSheet = objWB.Worksheets(1)
strWriteExel = fso.BuildPath(fso.GetParentFolderName(WScript.ScriptFullName strWriteExel)
K = objRead_Excel.Cells(1,1).Value
i = 1
intRow = 1
intRow0 = 1
Do Until (objRead_Excel.Cells(intRow,1).Value) = "" and Trim(objRead_Excel.Cells(intRow,2).Value) = ""
If objRead_Excel.Cells(intRow,1).Value = K then
i = i
else
i=i+1
K = objRead_Excel.Cells(intRow,1).Value
intRow0 = 1
end if
objWSheet.Cells(i, 1).Value = objRead_Excel.Cells(intRow,1).Value
objWSheet.Cells(i, intRow0+1).Value = objRead_Excel.Cells(intRow,2).Value
intRow = intRow + 1
intRow0 = intRow0 +1
Loop
objWB.SaveAs strWriteExel
objWB.Close
objWrite_Excel.Quit
objRead_Excel.Quit
Set objWSheet = Nothing
Set objWB = Nothing
Set objWrite_Excel = Nothing
Set objRead_Excel = Nothing
WScript.Echo "Готово."
WScript.Quit 0

juliuzz

не легче экспортнуть в plain text какой-нить и простейшим перлоскриптом обработать?

juliuzz

вот что у меня получилось
#!/usr/bin/perl

open (FI, "<mozg.txt");
my %h = ;
my @arr = ;
while (<FI>)
{
@arr = split (/\s/, $_);
if (!$h{$arr[0]})
{
$h{$arr[0]} = $arr[0]."\t".$arr[1];
}
else { $h{$arr[0]}.="\t".$arr[1]; }
}
open (FO, ">mozg2.txt") or die "Error!\n";
foreach (keys %h)
{
print FO "$h{$_}\n";
}
close FI;
close FO;


файл mozg.txt получен сохранением из экселя в простой текст в MS-DOS формате
a	1
a 3
a 4
a 5
b 2
b 5
b 6
b 8
b 5
c 6
c 7
c 8
d 3
d 4
d 2
d 3

на выходе mozg2.txt который спокойно скармливается обратно экселю с разделителем tab
c	6	7	8
a 1 3 4 5
b 2 5 6 8 5
d 3 4 2 3

я хз почему криво отсортировано кстати :confused:

Impils

Почему это проще ? :)

juliuzz

потому что по-видимому источником таких данных уже изначально является текстовый файл вывода из какой-нить проги
PS
ну и чисто с эстетической точки зрения на перле как-то красивее выглядит :grin:

SergZ495

пипец какое позорище
еще на с# ченить напишите строк так в 100
при том что задача делается встроенными свойствами экселя за 15 секунд. Упорядочиваем по первому столбцу, добавляем слева столбец-счетчик и заголовки сверху, используем сводную таблицу и песдетс
вот бл:

SergZ495

ну а ТС в очередной раз подтвердил что у него ник с ошибкой написан, "без" в начале забыл.
Оставить комментарий
Имя или ник:
Комментарий: