Page 149 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼製品名の並び替え poppy 04/3/23(火) 21:56 ┗混在するデータから数字を抜き出す ykitz 04/3/24(水) 5:53 ┣Re:混在するデータから数字を抜き出す poppy 04/3/24(水) 22:04 ┗Re:混在するデータから数字を抜き出す poppy 04/3/24(水) 23:14 ┗Re:混在するデータから数字を抜き出す ykitz 04/3/25(木) 19:28 ┗Re:混在するデータから数字を抜き出す poppy 04/3/25(木) 22:41 ┣頭にゼロを付けましょう。 sylph 04/3/26(金) 0:21 ┃ ┗Re:頭にゼロを付けましょう。 poppy 04/3/26(金) 0:57 ┗Re:混在するデータから数字を抜き出す ykitz 04/3/26(金) 18:18 ┗Re:混在するデータから数字を抜き出す poppy 04/3/26(金) 22:30 ─────────────────────────────────────── ■題名 : 製品名の並び替え ■名前 : poppy <yitkw@cts.ne.jp> ■日付 : 04/3/23(火) 21:56 -------------------------------------------------------------------------
| アプローチ2001を使用しています。WINDOWSはXPです。 製品名で並べ替えをしたいと思っています。 製品名の例としては AA00025 AA0025B AA0260K AA00260 と、AAで始まるのは同じなのですが、その後が”0”がいくつかありその後に数字となります。また、図面の版数がが変わると数字の後ろに”K”などの文字が入ってしまうことがあります。これを数字のみ抜き出し数字順に並べ替えたいのです。 上記の例だと上記の様に並べ替えたいのですが、この製品名のままだと AA00025 AA0025 AA00260 AA0260K となってしまいます。 AAを除く所までは出来るのですが、その後何かいい方法はないでしょうか? 製品名の桁数も5〜7桁と統一していません。また、取引先からの製品名なので変更は出来ません。いろいろ試したのですがうまくいきません。 アドバイスよろしくお願いいたします。 |
| AA0260K このように、半角のアルファベットと数字が混在するデータから、 数字の部分を抜き出すということで、下記のような方法を試してみたら、 うまくいきましたのでお知らせします。 ポイント、SpanUntil()関数です。 対象となるデータを入力してあるフィールドは、つぎの名前だとします。 [元のコード、文字型] そして、以下の5つフィールドを追加します。 ------------------- [作業対象コード、計算型] Right(元のコード, Length(元のコード) - SpanUntil(元のコード, '0123456789')) [alphabetの位置、計算型] SpanUntil(作業対象コード, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') [ほんと?、計算型] If(Length(作業対象コード) = alphabetの位置, 0, 1) [alphabetの文字数、計算型] If(ほんと? = 1, Length(Right(作業対象コード, Length(作業対象コード) - alphabetの位置)), 0) [コードの数字部分、計算型] Left(作業対象コード, Length(作業対象コード) - alphabetの文字数) -------------------- [作業対象コード]では、以降の作業で、 コードの先頭に付いているアルファベットは不要なので、 元のデータから、先頭のアルファベットを取り除きます。 [alphabetの位置]では、[作業対象コード]で先頭のアルファベットを取り除いた コードの中の、アルファベットの位置を探します。 [ほんと?]は、[alphabetの位置]で使っている、SpanUntil()関数の制限を 回避するために使います。 [alphabetの位置]の値が正しくない場合は0、正しい場合は1になります。 [alphabetの文字数]では、[作業対象コード]のデータから数字部分を抜き出すため、 その中に含まれるアルファベットの文字数を取り出します。 [コードの数字部分]では、作業対象コード]のデータから数字部分を抜き出します。 If()以外の各関数の詳細は、「ヒント集」の中の「文字列関数」のページをご覧下さい。 |
| ykitzさん,早速の回答有り難うございます。 ちょっと複雑そうなので一つ一つ順を追ってやってみます。 SpanUnit() 初めて聞く関数です。 ヒント週も参考にさせていただきます。 |
| >> ykitzさん: >AA0260K このように、半角のアルファベットと数字が混在するデータから、 >数字の部分を抜き出すということで、下記のような方法を試してみたら、 >うまくいきましたのでお知らせします。 試してみました。 数字だけ抜き出すのは何とかうまくいきました。が、、、、 私のやり方が悪いのか、抜き出したのは数字なのですが、データ型が文字型なので下記のようなデータだと 24 240 25 250 と言うように並んでしまいます 文字列を数字によみかえることの出来る関数はあるでしょうか? 24 25 240 250 と並び替えたいのですが。 私が最初に作った例がちょっと悪かったかも知れません。すみません。 よろしくお願いいたします |
| 実は、アプローチには極秘機能があります、 ということでもありませんが..... 普通、ソートはワークシートでやりますから、ワークシートでの操作を説明します。 1.ワークシートを開き、デザインモードにする。 2.前回の説明で追加したフィールドのうち、最後の「コードの数字部分」の項目名の部分を クリックし、列全体を選択(反転)した状態)にする。 3.「ワークシート」−「ワークシートのプロパティ」とクリックして、 「プロパティ画面」を開く。 4.「プロパティ画面」の「#」タブを開き、「表示型式」欄の中の「数値形式」をクリックする。 「現在の表示形式」欄は、「整数」または「一般」をクリックする。 なお、「#」タブの「現在の表示形式」欄で「整数」または「一般」を選択すると、 3桁ごとに , (カンマ)が表示されるので、カンマが不要なら、 「表示形式の編集」ボタンをクリックし、「フォーマットコード」を編集して、 カンマを表示しないようにする。 6.つぎに、「プロパティ画面」の「aZ」タブを開き、 「文字揃え」欄の右詰め表示のボタンをクリックする。 これで、Left関数で抜き出した、文字データのはずの数字が、 あーら不思議、数値データに変身します。 ソートすると、数値型フィールドをソートしたのと同じ結果になります。 もちろん、フォームの画面で、上記と同様の操作をすれば、同じようになります。 アプローチって、柔軟というか、なんというか、 初めてこの方法を見つけたときは、ビックリでした。 |
| 試してみました。 数字表示は出来ました。が、ソートがうまくいきません。 試しにレポートを作り抜き出した数字を足し算すると計算は正しく表示されます。 が、ソートについては何故か下記のようになってしまいます。 元のデータは AA000245 AA00233I AA002330 AA002400LA AA00250 AA02400 とすると、頭に付いている0がいたづらしているようなんです。 アルファベットをはずしても、上記と同じ並び方になってしまいます。 ちなみに、自宅で試してみましたので、WINDOWSはMeです。 何度もすみません。よろしくお願いいたします。 |
| poppyさんこんにちは 混在している文字と数字についてはちゃんと見ていませんが、数字を抜き出したところから先を考えてみました。 無理やり左側に0を沢山追加して桁をそろえます。 コンバイン関数です。 Right(Combine(00000,数字抜き出しフィールド名),5) こうすれば強制的に0がつくのでソートできると思います。 00024 00025 00240 00250 となると思います。 コンバインと言うとコンバトラーVを思いだします。 |
| 有り難うございます。 頭が固くなってて、桁揃えすること思いつきませんでした。 何とか数字にしようと頑張ってましたが、、、桁揃えが出来れば文字も思い通りに並び替えられますね。 試しではうまくいきました。 明日会社で早速やってみます。 うまくいきそう。な、予感。 皆様、有り難うございました。 万が一の時はまたよろしくお願いいたします。 |
| >が、ソートについては何故か下記のようになってしまいます。 >AA000245 >AA00233I >AA002330 >AA002400LA >AA00250 >AA02400 こちらでも、「コードの数字部分」フィールドを昇順ソートすると、 上記と同じ結果になりました。なぜなんでしょうね? ならば、「コードの数字部分」フィールドのデータを更に数値データにしてみたら(?) とばかりに、計算式に *1 を追加しました。 Left(作業対象コード, Length(作業対象コード) - alphabetの文字数) * 1 そして、「コードの数字部分」フィールドを昇順ソートすると、 下記のようになりました。 AA00233I AA000245 AA00250 AA002330 AA002400LA AA02400 以上、お知らせします。 |
| sylphさん、ykitzさん、うまくいきました。 有り難うございます。 いろいろなやり方ありますね。 文字型の数字に”*1”なんて思いつきもしませんでした。 でも、何故数字になるんだろう? 足し算が出来るんだからかけ算もと言うことでしょうか? すっごく不思議だけどうまくいきました。 また、一つアプローチの使い勝手が良くなって嬉しいです。 また、よろしく! |