![]() |
resorting columns
I use data that is export from electrical test equipment in CSV
format. For years I have been developing vba code to manipulate this data for analysis. One problem with the data is that it is grouped in columns in a way that makes analysis and charting cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert |
resorting columns
Probably the easiest way would be to open the csv file directly using
VBA's I/O routines, put the data in one large string, then use Split to break the data apart by some delimiter (a comma), and finally picking elements out of the array in the desired order and writing those values out to the worksheet. Cordially, Chip Pearson Microsoft MVP Excel Product Group Pearson Software Consulting, LLC www.cpearson.com (email on web site) On Mon, 15 Dec 2008 06:57:20 -0800 (PST), Robert H wrote: I use data that is export from electrical test equipment in CSV format. For years I have been developing vba code to manipulate this data for analysis. One problem with the data is that it is grouped in columns in a way that makes analysis and charting cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert |
resorting columns
This is what I would do, since your sorting may require multipe steps (Excel
Sorts based in Alphabetical order) First I'd bring the file as it is, setting up an instruction that will split it in columns using comma as my delimiter. The second instruction is the one that may be a little slow, depending of the number of rows in your file... I would set a range for all of the rows and loop through it, sending each row to a "Pivot Sheet" using the Paste Special Transpose option, the applying the sort. This may require an extra step, since your Hertz and Kilohertz may be mixed up due to the fact that excel will place IMP_1_KHZ before IMP_100_HZ. So you probably have to split each string based on your underscore, then do the sort. Once is properly sort you will have to do a Paste Special Transpose again and send it back to the source sheet. Subsequently saving it as a CSV file. -- If this posting was helpful, please click on the Yes button. Regards, Michael Arch. "Robert H" wrote: I use data that is export from electrical test equipment in CSV format. For years I have been developing vba code to manipulate this data for analysis. One problem with the data is that it is grouped in columns in a way that makes analysis and charting cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert |
resorting columns
Unfortunately I'm dealing with more rows than can transpose to
columns :( On Dec 15, 11:18 am, Michael wrote: This is what I would do, since your sorting may require multipe steps (Excel Sorts based in Alphabetical order) First I'd bring the file as it is, setting up an instruction that will split it in columns using comma as my delimiter. The second instruction is the one that may be a little slow, depending of the number of rows in your file... I would set a range for all of the rows and loop through it, sending each row to a "Pivot Sheet" using the Paste Special Transpose option, the applying the sort. This may require an extra step, since your Hertz and Kilohertz may be mixed up due to the fact that excel will place IMP_1_KHZ before IMP_100_HZ. So you probably have to split each string based on your underscore, then do the sort. Once is properly sort you will have to do a Paste Special Transpose again and send it back to the source sheet. Subsequently saving it as a CSV file. -- If this posting was helpful, please click on the Yes button. Regards, Michael Arch. "Robert H" wrote: I use data that is export from electrical test equipment in CSV format. For years I have been developing vba code to manipulate this data for analysis. One problem with the data is that it is grouped in columns in a way that makes analysis and charting cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert |
resorting columns
Chip, if the data is already delimited do I need to put the data into
a string and then split it? and what method would I use to pick the data out. I was thinking something that says find IMP, record that location, find next IMP select column, cut, paste at IMP1 + 1, repeat. Once all IMP is done, repeat foe the next data type. I have the ideas, I just get lost in the methods :O On Dec 15, 10:52 am, Chip Pearson wrote: Probably the easiest way would be to open the csv file directly using VBA's I/O routines, put the data in one large string, then use Split to break the data apart by some delimiter (a comma), and finally picking elements out of the array in the desired order and writing those values out to the worksheet. Cordially, Chip Pearson Microsoft MVP Excel Product Group Pearson Software Consulting, LLCwww.cpearson.com (email on web site) On Mon, 15 Dec 2008 06:57:20 -0800 (PST), Robert H wrote: I use data that is export from electrical test equipment in CSV format. For years I have been developing vba code to manipulate this data for analysis. One problem with the data is that it is grouped in columns in a way that makes analysis and charting cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert |
resorting columns
On 15 dec, 21:50, Robert H wrote:
Chip, if the data is already delimited do I need to put the data into a string and then split it? and what method would I use to pick the data out. I was thinking something that says find IMP, record that location, find next IMP select column, cut, paste at IMP1 + 1, repeat. Once all IMP is done, repeat foe the next data type. I have the ideas, I just get lost in the methods :O On Dec 15, 10:52 am, Chip Pearson wrote: Probably the easiest way would be to open the csv file directly using VBA's I/O routines, put the data in one large string, then use Split to break the data apart by some delimiter (a comma), and finally picking elements out of the array in the desired order and writing those values out to the worksheet. Cordially, Chip Pearson Microsoft MVP * * Excel Product Group Pearson Software Consulting, LLCwww.cpearson.com (email on web site) On Mon, 15 Dec 2008 06:57:20 -0800 (PST),RobertH wrote: I use data that is export from electrical test equipment in CSV format. *For years I have been developing vba code to manipulate this data for analysis. *One problem with the data is that it is grouped in columns in a way that makes analysis and charting *cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert- Tekst uit oorspronkelijk bericht niet weergeven - - Tekst uit oorspronkelijk bericht weergeven - Hi Robert, It seems to me that you are a newbee. I have worked out Chips idea using Excel2003: Sub SplitRobertH() Dim strFileName As String Dim strDataLine As String Dim varSplited As Variant Dim lngFree As Long strFileName = Application.GetOpenFilename _ ("Testdata (*.csv),*.csv", , "Select datafile") If strFileName = vbNullString Then Exit Sub lngFree = FreeFile Open strFileName For Input As lngFree Do While Not EOF(lngFree) Line Input #lngFree, strDataLine varSplited = Split(strDataLine, ",") ActiveCell.Value = varSplited(0) ActiveCell.Offset(0, 1).Value = varSplited(1) ActiveCell.Offset(0, 2).Value = varSplited(2) ActiveCell.Offset(0, 3).Value = varSplited(3) ActiveCell.Offset(0, 4).Value = varSplited(7) ActiveCell.Offset(0, 5).Value = varSplited(11) ActiveCell.Offset(0, 6).Value = varSplited(15) ActiveCell.Offset(0, 7).Value = varSplited(4) ActiveCell.Offset(0, 8).Value = varSplited(8) ActiveCell.Offset(0, 9).Value = varSplited(12) ActiveCell.Offset(0, 10).Value = varSplited(16) ActiveCell.Offset(0, 11).Value = varSplited(5) ActiveCell.Offset(0, 12).Value = varSplited(9) ActiveCell.Offset(0, 13).Value = varSplited(13) ActiveCell.Offset(0, 14).Value = varSplited(17) ActiveCell.Offset(0, 15).Value = varSplited(6) ActiveCell.Offset(0, 16).Value = varSplited(10) ActiveCell.Offset(0, 17).Value = varSplited(14) ActiveCell.Offset(0, 18).Value = varSplited(18) ActiveCell.Offset(1, 0).Select Loop Close lngFree End Sub This code opens the fele select dialog so you are free to select any CSV file. There is no error handling present so it is up to you to select a CSV file with the corrrect number of columns. HTH, Wouter |
resorting columns
Wouter, I played around with that this morning. I have to do some
tweaking but its doing just what I need. After steping the code a few times I understand what Chip was driving at. Thanks for giving me a good starting point. Robert On Dec 16, 5:41*am, RadarEye wrote: On 15 dec, 21:50, Robert H wrote: Chip, if the data is already delimited do I need to put the data into a string and then split it? and what method would I use to pick the data out. I was thinking something that says find IMP, record that location, find next IMP select column, cut, paste at IMP1 + 1, repeat. Once all IMP is done, repeat foe the next data type. I have the ideas, I just get lost in the methods :O On Dec 15, 10:52 am, Chip Pearson wrote: Probably the easiest way would be to open the csv file directly using VBA's I/O routines, put the data in one large string, then use Split to break the data apart by some delimiter (a comma), and finally picking elements out of the array in the desired order and writing those values out to the worksheet. Cordially, Chip Pearson Microsoft MVP * * Excel Product Group Pearson Software Consulting, LLCwww.cpearson.com (email on web site) On Mon, 15 Dec 2008 06:57:20 -0800 (PST),RobertH wrote: I use data that is export from electrical test equipment in CSV format. *For years I have been developing vba code to manipulate this data for analysis. *One problem with the data is that it is grouped in columns in a way that makes analysis and charting *cumbersome. I should have worked this out long ago but must have enjoyed the struggle. the data come in in columns like: TYPE, DATE, DC_RES, IMP_100_Hz, PHASE_100_Hz, LC_100_Hz, QD_100_Hz, IMP_200_Hz, PHASE_200_Hz, LC_200_Hz, QD_200_Hz, IMP_400_Hz, PHASE_400_Hz, LC_400_Hz, QD_400_Hz, IMP_1_kHz, PHASE_1_kHz, LC_1_kHz, QD_1_kHz The data runs higher in frequency I need to reorganize the data so that each data type is grouped together. For instance TYPE, DATE, DC_RES, IMP_100_Hz, IMP_200_Hz, IMP_400_Hz, IMP_1_kHz, etc a push towards efficient way to do this would be helpful. thanks Robert- Tekst uit oorspronkelijk bericht niet weergeven - - Tekst uit oorspronkelijk bericht weergeven - Hi Robert, It seems to me that you are a newbee. I have worked out Chips idea using Excel2003: Sub SplitRobertH() *Dim strFileName As String *Dim strDataLine As String *Dim varSplited *As Variant *Dim lngFree * * As Long *strFileName = Application.GetOpenFilename _ * * ("Testdata (*.csv),*.csv", , "Select datafile") *If strFileName = vbNullString Then Exit Sub *lngFree = FreeFile *Open strFileName For Input As lngFree *Do While Not EOF(lngFree) * Line Input #lngFree, strDataLine * varSplited = Split(strDataLine, ",") * ActiveCell.Value = varSplited(0) * ActiveCell.Offset(0, 1).Value = varSplited(1) * ActiveCell.Offset(0, 2).Value = varSplited(2) * ActiveCell.Offset(0, 3).Value = varSplited(3) * ActiveCell.Offset(0, 4).Value = varSplited(7) * ActiveCell.Offset(0, 5).Value = varSplited(11) * ActiveCell.Offset(0, 6).Value = varSplited(15) * ActiveCell.Offset(0, 7).Value = varSplited(4) * ActiveCell.Offset(0, 8).Value = varSplited(8) * ActiveCell.Offset(0, 9).Value = varSplited(12) * ActiveCell.Offset(0, 10).Value = varSplited(16) * ActiveCell.Offset(0, 11).Value = varSplited(5) * ActiveCell.Offset(0, 12).Value = varSplited(9) * ActiveCell.Offset(0, 13).Value = varSplited(13) * ActiveCell.Offset(0, 14).Value = varSplited(17) * ActiveCell.Offset(0, 15).Value = varSplited(6) * ActiveCell.Offset(0, 16).Value = varSplited(10) * ActiveCell.Offset(0, 17).Value = varSplited(14) * ActiveCell.Offset(0, 18).Value = varSplited(18) * ActiveCell.Offset(1, 0).Select *Loop *Close lngFree End Sub This code opens the fele select dialog so you are free to select any CSV file. There is no error handling present so it is up to you to select a CSV file with the corrrect number of columns. HTH, Wouter |
All times are GMT +1. The time now is 01:49 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com