You don't need your addresses to be "tagged".
Quoting the help:
[wallet 456789]: help transfer
transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] (<URI> | <address> <amount>) [<payment_id (obsolete)>]
Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)
So just transfer like:
transfer index=N destination amount
Replacing N with the index of the subaddress you wish to send from, destination with the destination address and amount with the amount you want to send.
Per user36303's comment, it's worth also highlighting that if you need to send from a subaddress that's in an account other then the first main account, you will first need to switch account using
account switch <index>.