エクセルでデータが取り消し線で見え消しになっていても、Alteryxで読み込むと普通に存在するデータとして処理されます。なので、時折「見え消しデータは削除のつもりだから、それらを無視してデータ処理してほしい」vs「見え消しされてもAlteryxで区別できなくて困る」というミスマッチが発生します。という相談を何回か受けたことがあったので、実現するワークフローを作ってみました。
処理の手順は以下のような感じになります;
① エクセルをzipファイルとみなし、zip内のxmlファイルからデータを読み取る
sheet1.xml
セル内の値等が格納されてる。シートが複数あるとsheet2.xml,sheet3.xml...のように複数xmlが存在する
style.xml
セルの書式設定が格納されている
sharedStrings.xml
文字列データは前述のsheet1.xmlではなく、こちらに格納されている。セル内に個別に書式設定がある場合、このファイルでオーバーライドされる。エクセル内に文字列データがひとつも無い場合、このxmlは存在しない
② ①で読み込んだxmlから必要なデータをどんどんパースしていって、取り消し線が設定されているデータを突き止め、空文字に置き換える
③ 特殊文字置換や日付データなどの変換処理を行って出力する
例えばこういうデータを処理すると
マクロの上側のアンカーからはこんな感じで出てきます。A1,C1,D2,B4,B6はセル内全部取り消しなので、空です。B3,C5は文字列の一部だけ取り消しなので、部分的に取り除かれます。
下側のアンカーからは、取り消し線があるセル限定で、処理前後のデータを見比べることができるようにしてます
添付にマクロ含んだyxzp一式置いておきますので、ご自由にお使いください。
一応デバッグはしてありますが、エラー出たらすいません(エクセルの自由度が高すぎるので、複雑なxml書式に対応したREGEXパースできているか、ちょっと自信ないです)。
あと、条件付き書式で取り消しになってるデータは、どうやっても無理だったので、対象外にしてます。こちらも、予めご承知おきください。
弊社は未だにエクセルに見え消しを多用する人が多くて、割と需要があったりします。こういうの作ると「エクセルに見え消しでデータいれても良いんだ~」と、データリテラシー的にはあまりよろしくない方向に曲解されそうで、それはそれで嫌なのですが・・・笑