5 返信 最新の回答 日時: Aug 31, 2014 9:34 PM ユーザー:sunnyheights

    長い住所の自動改行の方法

    sunnyheights

      タイトル

      長い住所の自動改行の方法

      フォーラムに投稿

      たびたびとても有益なご教示をいただいております。

      長い住所をDBのフィールドでは1行に書いておりますが、封筒やラベルなどに印刷する時に表示しきれません。

      DBの幅を2行分にして、既存の住所を自動改行させようとしているのですが、ちょっとうまく行きません。

      このような長い住所は;

       AAA県BBB市CCC町nnn番地nnn メゾンDDD205-15

                      ↑ ここに半角スペースが入っている

      のような例です。

       関数のLeftWordsを使って

      Case(

      PatternCount (住所; " " ) ; LeftWords( 住所;1) & ¶ & RightWords(住所; 3)

      と書いたのですが、英数字のところで改行されたり、改行された後半の文字が消えてしまいます。どうもLeftWords関数は日本語が連続しているところは1単語として認識してくれるのですが、番地が半角で表示していると別のWordとしてカウントするようです。

      しかしなんで右半分が消えてしまうのか分かりません。

      こんな場合は皆さんどのようにして処理をされているのでしょうか、ご教示ください。

        • 1. Re: 長い住所の自動改行の方法
          sago350@未来Switch

          GetValue ( Substitute ( 住所 ; " "; "¶"); 1 ) & "¶" & 
          GetValue ( Substitute ( 住所 ; " "; "¶"); 2 )

          半角スペースを改行に変換して、1行目2行目を取り出して、間に改行入れてます。

          元のデータから市区町村を分けて管理すればもっと良いレイアウトになると思いますが、今からメンテナンスするもの大変かと思います。なので、レイアウトにこだわるなら筆まめ等の年賀状ソフトに読み込んで印刷されてはどうでしょうか。

          もしくは、郵便番号が入力されているならば、郵便番号の住所と登録されている住所を比較すれば市区町村辺りの改行位置も割り出せるかなと思います。

          • 2. Re: 長い住所の自動改行の方法
            sunnyheights

            sago35さん、

             

            いつもお世話になっております。

            ありがとうございました。

            バッチリ動作しました。

            ところが幾つかのケースでは期待通りに改行されないものが出て来て、データを調べてみると全角スペースで区切られていました。数が少なかったので、マニュアルで全角スペースを半角スペースに変換してうまく行きました。

            全角スペースでも動作するようにGetValue(Substituteの式に全角スペースを入れたものを並べてみましたが、どうもうまく行きません。

            今回は良いのですが、後学のため全角スペースでも半角スペースでも動作するような式の記述を、誠に恐縮ですがお教えいただければありがたく存じます。

            • 3. Re: 長い住所の自動改行の方法
              Shin

              上の式は、

               Substitute ( 住所 ; " "; "¶")

              だけで良いのでは。全角スペースも対応するには

               Substitute ( 住所 ;[ " "; "¶" ];[ " "; "¶" ])

              • 4. Re: 長い住所の自動改行の方法
                sago350@未来Switch

                ↓コレで。

                GetValue ( Substitute ( 住所 ; [ " "; "¶" ];[ " "; "¶" ]); 1 ) & "¶" & 
                GetValue ( Substitute ( 住所 ; [ " "; "¶" ];[ " "; "¶" ]); 2 )

                 

                あと、1行目と2行目でフォントサイズや位置を変えたい時は上の計算式を

                1行目フィールド:GetValue ( Substitute ( 住所 ; [ " "; "¶" ];[ " "; "¶" ]); 1 )
                2行目フィールド:GetValue ( Substitute ( 住所 ; [ " "; "¶" ];[ " "; "¶" ]); 2 )

                とすればフィールドを分けることが出来ます。

                • 5. Re: 長い住所の自動改行の方法
                  sunnyheights

                  Shinさん、

                   

                   どうもありがとうございます。

                   Substitute式は並列にセミコロンで並べて行けるのですね。ありがとうございました。

                   GetValueなしでも動作することが確認できました。

                   

                   Sago35さん、

                   上にも書きましたが、検索文字と置換文字をセミコロンで区切って並べて書けるのですね。これは便利です。

                   GetValueが無くても動作することが分かりました。

                   しかし2行目フィールドを作り、文字サイズを小さくするなどの時は、この式はいいですね。

                   助かりました。ありがとうございました。