2023-11-10 02:15:59
Re①:配列の特定の行を削除する方法について
エクセルの対象セルの中に複数の文字があります。
該当リストのコードに該当する場合その行は削除しようとプログラムを考えておりますが うまくいかないので、誰かお教えいただけないでしょうか。 対象セルの各行は前半に半角スペースで区切られたコードがあります。 そのため正規表現マッチでコードを抜き取ります。 その後該当リストの配列にそのコードがあるかを検索します。 当初、検索し該当するならば、配列削除でその行を消そうとしていました。 しかし該当する行を削除してしまうと反復の回数と、処理する行が不一致になることから 末尾に削除するフラグzzzzzをつけ https://w.atwiki.jp/isoroku_be/pages/190.html 上記の●一括配列行削除 関数で対象セルの中で削除フラグがついている行を削除することを考えました。 下記を実行した場合 4行目の"25 あまだい"にも(部品コード25で、該当リストに存在するため)削除フラグがつくことを期待しのですが 削除フラグは付与されません。 どなたか解決方法を教えていただけないでしょうか。 また、配列の中で特定の行を逐次消すいい方法はあるのでしょうか? ***********プログラム*********** 対象セル内容=「04 にしん 99 いぬ 87 さる 25 あまだい」 該当リスト=「01 04 07 20 25 」 対象セル内容を反復 対象セル内容\(回数-1)を「^([^ ]*)」で正規表現マッチ 「部品コードは{それ}」を表示する 該当リストの0からそれを配列検索 「該非判定結果{それ}」を表示する もし、それ=-1でなければ #NFEとNFDTではない場合 対象セル内容\「処理行」にzzzzzを追加する 「****************」を表示する 対象セル内容を表示する ***********ここまで*********** > 下記を実行した場合 > 4行目の"25 あまだい"にも(部品コード25で、該当リストに存在するため)削除フラグがつくことを期待しのですが > 削除フラグは付与されません。 対象セル内容\「処理行」の部分が、 対象セル内容\0 として扱われています 対象セル内容\「処理行」にzzzzzを追加する は 対象セル内容\処理行に「zzzzz」を追加する に変更。 変数の処理行に値が入っていないので、反復の次の行に 処理行=回数-1 を入れます。 //------------ここから 対象セル内容を反復 処理行=回数-1 //←ここ 対象セル内容\(回数-1)を「^([^ ]*)」で正規表現マッチ 「部品コードは{それ}」を表示する 該当リストの0からそれを配列検索 「該非判定結果{それ}」を表示する もし、それ=-1でなければ #NFEとNFDTではない場合 対象セル内容\処理行に「zzzzz」を追加する //←ここ 「****************」を表示する //------------ここまで > また、配列の中で特定の行を逐次消すいい方法はあるのでしょうか? 反復で処理して、残したいものだけを別の変数に配列追加していく方法がわかりやすいと思います。 //------------ここから 対象セル内容=「04 にしん 99 いぬ 87 さる 25 あまだい」 該当リスト=「01 04 07 20 25」 結果とは配列 //別の変数を用意 対象セル内容を反復 対象を「^([^ ]*)」で正規表現マッチ 「部品コードは{それ}」を表示する 該当リストの0からそれを配列検索 「該非判定結果{それ}」を表示する もし、それ=-1ならば 結果に対象を配列追加 //のこすものだけ配列追加 「****************」を表示する 結果を表示する //------------ここまで そのほかには、配列を後ろから処理するとか、表ピックアップ(表正規表現ピックアップ)命令を活用する方法とかあります。 この場合は正規表現置換で消す手が使えるかも。 //------------ここから //正規表現置換 対象セル内容=「04 にしん 99 いぬ 87 さる 25 あまだい」 該当リスト=「01 04 07 20 25」 該当リストの改行を「|」に置換 正規表現は「^({それ}) .*」 正規表現を表示 対象セル内容の正規表現を「」に正規表現置換 それを表示 //------------ここまで あっているかは自信なし |