[Excel] стобцы в строки
Знаешь точное кол-во А и В ?
знаю сколько А и В
Количество строк с одинаковыми А,В одинаково
Могу написать скрипт на vbs который переделает.
я сейчас вроде сделал путем комбинации concаtenate и text to columns
ТС, насколько я понял, надо не транспонировать, а объединить по признаку в первом столбце
>1000 относилось к числу строк или к количеству различных значений в первом столбце?
без vba
причем для каждого значения в первом столбце кол-во значений во втором одинаково
Кроме А и В есть ещё значения (C, D,E и тд) и этих значений > 1000 ?
Или есть в первом столбце есть только значения А и В и строк > 1000 ?
первый вариант)
А они подряд идут ?
A
B
C
D
или
A
B
A
C
A
D
E
B
подряд)
'====== Настройки =====
'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
не легче экспортнуть в plain text какой-нить и простейшим перлоскриптом обработать?
#!/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
я хз почему криво отсортировано кстати
Почему это проще ?
PS
ну и чисто с эстетической точки зрения на перле как-то красивее выглядит
еще на с# ченить напишите строк так в 100
при том что задача делается встроенными свойствами экселя за 15 секунд. Упорядочиваем по первому столбцу, добавляем слева столбец-счетчик и заголовки сверху, используем сводную таблицу и песдетс
вот бл:
ну а ТС в очередной раз подтвердил что у него ник с ошибкой написан, "без" в начале забыл.
Оставить комментарий
NatalyNoelle
есть таблица такого видаА 1
А 2
А 3
В 1
В 2
В 3
как ее автоматом переделать в
А 1 2 3
В 1 2 3
надо учесть, что А, В, ... > 1000