2013/7/11 Errol Goetsch <er...@xe4.org>:
> Hi all
>
> You can get to a auto-sorted table in 4 steps without macros by using
> vlookup, hlookup, count, max and min.
> Ive sent Charles a working example for 20 salespeople over 12 months, where
> the duplicate list re-sorts as soon as the YTD total changes.

Why not upload it somewhere and give us the link? Maybe someone else
want to study it. Me, for instance…


Johnny Rosenberg

>
> I couldn't bear the thought of Charles spending valuable coffee time
> manually sorting tables.
> Errol
>
>
>
> On 2013/07/11 03:05 PM, Tanstaafl wrote:
>>
>> Thanks for your efforts Johnny, sorry I didn't reply sooner.
>>
>> We do actually add the data into a separate sheet already, then the sheet
>> that we want to be sorted just references those cells for each Sales Rep.
>>
>> But... this all looks a bit too complicated/fragile for me to be
>> comfortable with it. This spreadsheet is important to the boss, and I'd hate
>> to start having problems caused by adding something like this to the mix.
>>
>> I'll look into the extension, but I'm leaning toward just telling him it
>> may be best to just assign someone the job of sorting the thing once every
>> morning and just live with it...
>>
>> Thanks again for all of your responses and looking into it!
>>
>> Charles
>>
>> On 2013-07-10 5:29 PM, Johnny Rosenberg <gurus.knu...@gmail.com> wrote:
>>>
>>> 2013/7/10 Johnny Rosenberg <gurus.knu...@gmail.com>:
>>>>
>>>> 2013/7/10 Johnny Rosenberg <gurus.knu...@gmail.com>:
>>>>>
>>>>> Once again I sent privately. I'm getting tired of this so I really
>>>>> don't care, but I decided to be nice today, so here's to the list.
>>>>>
>>>>> I also added some stuff at the end.
>>>>>
>>>>>
>>>>> ---------- Forwarded message ----------
>>>>> From: Johnny Rosenberg <gurus.knu...@gmail.com>
>>>>> Date: 2013/7/10
>>>>> Subject: Re: [libreoffice-users] Auto-sort group of cells when any
>>>>> cell is modified/saved?
>>>>> To: Tanstaafl <tansta...@libertytrek.org>
>>>>>
>>>>>
>>>>> 2013/7/9 Tanstaafl <tansta...@libertytrek.org>:
>>>>>>
>>>>>> Is it possible to define a range of cells to auto sort themselves,
>>>>>> such that
>>>>>> anytime one of them is modified, the sort is reapplied?
>>>>>>
>>>>>> This is some Sales Numbers for some Sales Reps, and the boss wants
>>>>>> them to
>>>>>> always be sorted based on the total column anytime any numbers in the
>>>>>> sheet
>>>>>> are changed. Currently I'm manually sorting the sheet every morning,
>>>>>> but
>>>>>> he'd like this to happen automatically.
>>>>>>
>>>>>> Thanks
>>>>>
>>>>>
>>>>> I'm not sure you can do it exactly like that. You can make a macro to
>>>>> sort your specific cells, either when you run it manually or at a
>>>>> specific event. Those events are "when the document is opened" and
>>>>> things like that, I don't think you can trig it to "when a cell in
>>>>> A1:F19 is modified" or anything like that.
>>>>>
>>>>> I would just add a button in the sheet that sorts when clicked. As a
>>>>> complement to that, I would probably also trig it to when document is
>>>>> opened and maybe saved, if that's possible.
>>>>>
>>>>>
>>>>> Another way is to use cell formulas to keep your cell range sorted.
>>>>> It's possible but somewhat complicated. I have done it, but I need to
>>>>> do some searching, because I don't remember in which document I did
>>>>> this...
>>>>>
>>>>> In that case you will probably want to use two sheets: One for data
>>>>> input and one for viewing (which is the auto-sorted one).
>>>>>
>>>>> If you want to sort by a column with numbers, take a look here:
>>>>>
>>>>> http://ask.libreoffice.org/en/question/1309/is-there-an-automatic-sort-function-in-calc/
>>>>>
>>>>> I'm doing some experiments right now to find out if this also can be
>>>>> achieved with text... Maybe I'll fail, I don't know... yet...
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Johnny Rosenberg
>>>>>
>>>>>
>>>>> I did some testing and I finally found how to auto-sort text, rather
>>>>> than just numbers. It's probably slow with big cell ranges though,
>>>>> since I needed to write a cell function to get the job done.
>>>>>
>>>>> I'm sure there are much better ways to do this, but this is what I came
>>>>> up with:
>>>>>
>>>>> First create a new cell function called SortValue. The function
>>>>> returns a number between 0 and 1 corresponding to the input text.
>>>>> This function is VERY simple and there is no error handling at all, so
>>>>> feel free to improve it and customise it after your likings!
>>>>>
>>>>> REM  *****  BASIC  *****
>>>>>
>>>>> Option Explicit
>>>>>
>>>>>
>>>>>
>>>>> Function SortValue(sText As String)
>>>>>          Dim sSorted As String
>>>>>          sSorted="0123456789abcdefghijklmnopqrstuvwxyzåäö"
>>>>>
>>>>>          Dim iLen As Integer
>>>>>          iLen=Len(sSorted)
>>>>>
>>>>>          Dim d As Double, i As Integer
>>>>>          sText=LCase(sText)
>>>>>          For i=1 To iLen
>>>>>                  d=d+InStr(sSorted,Mid(sText,i,1))/iLen^i
>>>>>          Next i
>>>>>
>>>>>          SortValue=d
>>>>> End Function
>>>>>
>>>>> First of all, the string variable sSorted is defined as
>>>>> "0123456789abcdefghijklmnopqrstuvwxyzåäö". This is just the sort order
>>>>> for the characters it can handle. Feel free to remove and add
>>>>> characters to suite your needs. In this case, these are numbers
>>>>> followed by the Swedish alphabet. Only lower case characters are
>>>>> present since the macro converts the input string to lower case
>>>>> anyway. This way, "A" gives the same numerical value as "a". If this
>>>>> isn't what you want, add uppercase letters to the list and place them
>>>>> right and remove the "sText=LCase(sText)" line, or "comment it out" by
>>>>> preceding the line with a ' or the text "REM" (without the quotes).
>>>>> For example:
>>>>> sString="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz".
>>>>> Maybe you want to add other characters, like ",.;:-" or whatever.
>>>>> I didn't test this with UNICODE characters, it could work, I think.
>>>>>
>>>>> By the way, my test document can be found here:
>>>>> http://ubuntuone.com/1I7EY6jMoZ4MYLrPejP5Eh
>>>>> Make sure that macro security is set so that you can run the cell
>>>>> formula properly, otherwise this will not work, of course.
>>>>>
>>>>>
>>>>> Now, if your text to be sorted is located at B1:B13, then add the
>>>>> following in A1:
>>>>> =SORTVALUE(B1)
>>>>>
>>>>> Copy downwards, so A2 contains =SORTVALUE(B2) and so on.
>>>>>
>>>>> In C1 we type:
>>>>> =SMALL(A$1:A$13;ROW())
>>>>>
>>>>> Copy down the same way as we did with the A column...
>>>>>
>>>>>
>>>>> In D1:
>>>>> =VLOOKUP(C1;A$1:B$13;2;0)
>>>>>
>>>>> Copy down...
>>>>>
>>>>>
>>>>> And there we are!
>>>>>
>>>>> Of course this can be done with different spreadsheets, but the A and
>>>>> B column needs to be together in that order. However, you can hide the
>>>>> A column and other columns that you don't want to see, of course.
>>>>>
>>>>>
>>>>> Please note that I did this rather quickly. Of course I could have
>>>>> made a couple of mistakes here and there. I'm interested to know if
>>>>> you find any. Thanks. The only test I did was that document, see link
>>>>> above.
>>>>>
>>>>>
>>>>>
>>>>> Johnny Rosenberg
>>>>
>>>>
>>>> I found one serious one myself, when entering the last character in a
>>>> cell ("ö" in this case). The result was > 1 which is supposed to be
>>>> impossible.
>>>> The mistake was of the embarrassing kind. I used the wrong length
>>>> value in the for loop (length of the sort order text instead of the
>>>> lenght of the input text)...
>>>>
>>>>
>>>> Here's my corrected cell function:
>>>>
>>>> Option Explicit
>>>>
>>>> Function SortValue(sText As String)
>>>>          Dim sSorted As String
>>>>          sSorted="0123456789abcdefghijklmnopqrstuvwxyzåäö"
>>>>
>>>>          Dim iLenSorted As Integer, iLenText As Integer
>>>>          iLenSorted=Len(sSorted)+1
>>>>          iLenText=Len(sText)
>>>>
>>>>          Dim d As Double, i As Integer
>>>>          Dim iFoundPos As Integer
>>>>
>>>>          sText=LCase(sText)
>>>>          For i=1 To iLenText
>>>>                  iFoundPos=InStr(sSorted,Mid(sText,i,1))
>>>>                  If iFoundPos>0 Then
>>>>                          d=d+iFoundPos/iLenSorted^i
>>>>                  End If
>>>>          Next i
>>>>
>>>>          SortValue=d
>>>> End Function
>>>>
>>>> Also note that doing this text to number conversion is probably not a
>>>> good idea if the text contains too many characters and the first ones
>>>> are the same, like:
>>>> abcdefghijkl ? 0,282708744247206000
>>>> abcdefghijlk ? 0,282708744247206000
>>>>
>>>> So in many cases, this method should not be used. See my example file
>>>> (which I modified since last time) at:
>>>> http://ubuntuone.com/1I7EY6jMoZ4MYLrPejP5Eh
>>>>
>>>> The next suggestion would probably be to create a cell function that
>>>> replaces the SMALL() function and works with text.
>>>> Maybe I will try that later, I don't know. Or perhaps someone else
>>>> will beat me to it.
>>>>
>>>>
>>>>
>>>> Johnny Rosenberg
>>>
>>>
>>> I did some experiments with a Basic cell function that sorts a cell
>>> range and it works perfectly -- when you run it from the Basic IDE, but
>>>
>>> it doesn't work as a Cell function, for some reason. It does
>>> everything right, but it just doesn't do the actual sorting...
>>>
>>>
>>> I'm not sure it's worth putting more efforts to this for now. After
>>> some searching I found this thread about an array sorting add-in
>>> written in Python. You may want to try it (I didn't though):
>>> http://forum.openoffice.org/en/forum/viewtopic.php?f=21&t=56916
>>>
>>> They were discussing it for a while so I guess you should try the
>>> add-in from the last post in that thread, but reading it all couldn't
>>> hurt, I guess.
>>> Also they are discussing Apache OpenOffice, but it might just work for
>>> LibreOffice as well.
>>>
>>>
>>>
>>> Johnny Rosenberg
>>>
>>
>>
>
>
> --
>
> --
> To unsubscribe e-mail to: users+unsubscr...@global.libreoffice.org
> Problems?
> http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
> Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
> List archive: http://listarchives.libreoffice.org/global/users/
> All messages sent to this list will be publicly archived and cannot be
> deleted
>

-- 
To unsubscribe e-mail to: users+unsubscr...@global.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted

Reply via email to