Now, macros do have some shortcomings. I've used Racket (a variant of Scheme) a fair bit, and I'm now very wary of using macros too much. However, when they are useful, I've found they're very useful: writing the same program in a language without macros would often be extremely awkward.
Of course, if you're willing to entertain radical changes to your language, you can get many of the benefits of macros with a minimalist syntax, laziness and a simple mechanism for controlling how statements get evaluated. Which ultimately just amounts to Haskell. And I've even found good use cases for macros in Haskell, albeit far less than in any other language.