• ベストアンサー

ACCESS2000,桐,ファイルメーカーでカスタマバーコード印刷について

ACCESS2000でカスタマバーコードを印字したいのですが、関数の使い方で困っております。 例)郵便番号 123-4567   東京都千代田区8-9東京マンションA-1号 を123456789A1 と抜き出したいのです。 桐,ファイルメーカーの関数でも構いません。 最終的に ACCESS2000で印刷を行いますのでCSV出力ができれば良いのです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> 文字列の長さだけ繰りかえすとのことですが、色々考えてみましたがどうも関数が作成できずマクロになってしまいます。何とか関 > 数で処理したいのでよろしければ > 参考例をおしえていただければ大変有り難いのですが。 関数だけでやるなら、事前に最大何バイトになるか調べておいて ひたすら繰り返すしかないんじゃないでしょうか? =midb(a1,1,1)&midb(a1,2,1)&midb(a1,3,1)&midb(a1,4,1)&… だから、「マクロでループさせる方が美しい」んですね。

noname#3145
質問者

補足

私もaccessで同じ方法でやったのですがだめでした。 それはaccess95以降、文字コードが変わったからです。 以前はANSI でしたが現行は UNICODE になり、すべての 文字が2バイト表示となったからです。 結局2バイトめが 0 でなおかつ1バイトめが英数字だけを判断させるという面倒な方法になります。 あわせて文字列が最大バイト数以下ですと計算結果がerrorを返します。よってさらに複雑になります。 やはりマクロでループがよいのかもしれません。

その他の回答 (4)

  • aqula
  • ベストアンサー率60% (70/115)
回答No.5

ファイルメーカーの関数ですが、 Substitute(郵便番号,"-","") & MiddleWords(Substitute(住所,"-",""),2,3) でどうでしょうか。 ただし、すべての住所で正しい出力が得られるか確認していません。

回答No.4

アクセスの組み込み関数だけを使いたいとのことですが、関数を作るイコール組み込み関数では無くなってしまいます。アクセスの提供している関数には、mr_ayumi さんが求めているものは無いので関数を使わないイコールマクロを使用するしかありません。 「諸事情によりaccessがもっている組み込み関数だけで処理を行いたい」 の背景を説明してもらえると、ご回答できるのですが。 ちなみに 桐を使用して一括処理で #条件選択 を使用しても同様のことが出来ますが、この場合表を作成→データ読み込み→置換 と言う一括処理をくむことになります。 それでいいのでしょうか?

noname#3145
質問者

補足

grumpy_the_dwarf さんのようなご返答をお待ちしております。

回答No.3

カスタマバーコードを印字するのになぜ半角文字だけが抽出できなければいけないのかは分かりませんが、全半角混じりから半角英数字のみを抽出する関数は以下の通りです Public Function HankakuDake(Hikisu As String) As String Dim i As Integer Dim Moji As String Dim MojiAsc As Integer For i = 1 To Len(Hikisu) Moji = Mid(Hikisu, i, 1) MojiAsc = Asc(Moji) If (MojiAsc >= 48 And MojiAsc <= 57) Or _ (MojiAsc >= 97 And MojiAsc <= 122) Or _ (MojiAsc >= 65 And MojiAsc <= 90) Then  HankakuDake = HankakuDake & Moji End If Next End Function これでいいのでしょうか?

noname#3145
質問者

補足

関数は関数なのですが諸事情によりaccessがもっている組み込み関数だけで処理を行いたいのです。

回答No.1

東京都千代田区8-9東京マンションA-1号 を89A1にするというと、一番 大変なのは2バイト文字を消すところでしょうかねぇ。 Accessでも同じじゃないかと思うんですが、Excelやファイルメーカの テキストの指定位置から指定バイト数取り出す関数(MIDBとかMiddleb) で、2バイト文字のところから1バイトだけ取り出そうとすると1バイト スペースが返ってきます。これを文字列の長さだけ繰り返すとすべての 2バイト文字が1バイトスペースに化けますので、あとはSubstituteで スペースやハイフンを詰めてやれば完成です。 マクロでlenb(文字列)回ループさせる方が美しいけど、とりあえず関数 だけでも何とかなりますということで。

noname#3145
質問者

補足

ご指導ありがとうございました。 2バイト文字のところから1バイトだけ取り出そうとすると1バイトスペースが返ってくることを知りませんでした。 文字列の長さだけ繰りかえすとのことですが、色々考えてみましたがどうも関数が作成できずマクロになってしまいます。何とか関数で処理したいのでよろしければ 参考例をおしえていただければ大変有り難いのですが。 よろしくお願いいたします。

関連するQ&A