Some times ago I had trouble in using the ALIGN-command too - so I made my own:
(defun C:XALIGN(/ p1 p2 p3 q1 q2 q3 ep1 ep2 ep3 eq1 eq2 eq3 auswahl pp2 pp3 qq1 qq2)
; scj,
www.black-cad.de, 2007
(setq nullpunkt (list 0 0 0))
(command "_UCS" "_W")
(setq P1 (getpoint "\nStartpoint 1: "))
(command "_point" p1)
(setq ep1 (entlast))
(setq Q1 (getpoint "\nTargetpoint 1: "))
(command "_point" q1)
(setq eq1 (entlast))
(setq P2 (getpoint "\nStartpoint 2: "))
(command "_point" p2)
(setq ep2 (entlast))
(setq Q2 (getpoint "\nTargetpoint 2"))
(command "_point" q1)
(setq eq2 (entlast))
(setq P3 (getpoint "\nStartpoint 3: "))
(command "_point" p3)
(setq ep3 (entlast))
(setq Q3 (getpoint "\nTargetpoint 3"))
(command "_point" q3)
(setq eq3 (entlast))
(prompt"\npick the objects to align")
(setq auswahl (ssget))
(command "_move" auswahl ep1 ep2 ep3 "" p1 q1)
(setq pp2 (cdr (assoc 10 (entget ep2))))
(command "_ucs" "_3p" q1 q2 pp2)
(setq qq1 (trans q1 0 1))
(setq pp2 (trans pp2 0 1))
(setq qq2 (trans q2 0 1))
(command "_rotate" auswahl ep1 ep2 ep3 "" qq1 "B" qq1 pp2 qq2)
(command "_UCS" "_w")
(command "_ucs" "_ZA" q2 q1)
(setq pp3 (trans (cdr (assoc 10 (entget ep3))) 0 1))
(setq q3 (trans q3 0 1))
(command "_rotate" auswahl "" nullpunkt "B" nullpunkt pp3 q3)
(princ)
); end xalign.lsp
Good luck
Jochen