This is a good solution if you can have 'nonsense' data. Our testers/UAT object to that on the whole. We've gone in for randomly combining realistic data - having a set list of first names and surnames, towns and street types ('rd', 'st', 'ave', 'place') etc, and using cross joins to generate names/street names. Emails, in any system we always replace with an email at our own domain, just in case they get accidentally sent.
The downside of both approaches, is that they're not consistent - if you get a data update, then in the next run you get brand new PII for the same clients, and testers sometimes need to compare like-for-like. However, any consistency does leave you with the potential to get back to the original. Of course, you can keep any code or mapping data from the end users - testers or UAT business users, but not from the DEV team, which is fine if you're the owner of the data and providing it to a third party.