ACCESSの質問です。


フィールド1

あ >> い >> う >> え >> お

上記のようなテーブルがあるのですが、これを

フィールド1

お << え << う << い << あ

のように逆順する方法を教えてください。

回答の条件
  • 1人5回まで
  • 登録:2009/04/17 09:23:12
  • 終了:2009/04/18 09:41:59

回答(2件)

id:kaiton No.1

kaiton回答回数260ベストアンサー獲得回数342009/04/17 11:48:32

ポイント50pt

StrRvというユーザ定義の関数を作成しましたので、モジュールに次のコードを貼り付けてください。

Function StrRv(StrA As String, StrSplt1 As String, StrSplt2 As String) As String
    Dim StrB
    StrB = Split(StrA, StrSplt1)
    StrRv = ""
    For i = 0 To UBound(StrB)
        StrRv = StrRv & StrB(i)
        If i <> UBound(StrB) Then StrRv = StrRv & StrSplt2
    Next
End Function

http://vba.officehp.com/article/97483290.html

を参考に


この関数は、 逆順にするフィールド 、 区切りの文字 、 変更後の区切りの文字

の3個の値を指定します。


そして、クエリでフィールドのところに

フィールド2:StrRv([フィールド1]," >>"," << ")

これで、逆順になっていると思いますので、元のテーブルを変更するなら更新クエリなどで

利用してください。


うまくいかないなら、コメントで補足します。

id:rupopon

すみません。結果は、記号は逆になりましたが、中身の単語は

そのままの順番でした。

りんご >> みかん >> かき >> なし >> バナナ

りんご << みかん << かき << なし << バナナ

2009/04/17 15:35:50
id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212009/04/17 11:56:45

ポイント20pt

フィールド1の中の値が

「あ >> い >> う >> え >> お」

となっているのでしょうか?

いろいろ手段はあると思いますが、VBAを使って、例えばこんなの。

フィールド1の中身を取り出し(レコードセット)、

Split関数で分割し、並び替え、

Joinで欲しい文字列を作り、

UpdateのSQLでフィールド1に反映させる。

SQLの中で終わらせるなら、

フィールド1の文字列の順番を入れ替える。便利な関数は無いので自作しておき(strReverseとか)、

Update テーブル Set フィールド1=strReverse(フィールド1)

その後、<<と>>を入れ替える。

Update テーブル1 set フィールド1=Replace(フィールド1,">>","<<")

でしょうか。

id:rupopon

フィールド1の中身を取り出し(レコードセット)、

Split関数で分割し、並び替え、

Joinで欲しい文字列を作り、

UpdateのSQLでフィールド1に反映させる。

これを実際のコードにしていただけるとたすかります。。

2009/04/17 16:54:58
  • id:kaiton
    フィールド1の中のデータが「あ >> い >> う >> え >> お」で「お << え << う << い << あ」にしたいのか?

    フィールドの並びが「あ >> い >> う >> え >> お」で「お << え << う << い << あ」にしたいのか?
    これなら、クエリを新規作成し、そのフィールドの並び順にするだけですが...
  • id:rupopon
    すみません。ひとつのフィールドに
    あ >> い >> う >> え >> お
    という文字列が入っています。
    よろしくお願いします。
  • id:frkw2004
    Jet にstrReverse関数が使えますね。
    SELECT Replace(strReverse("あ >> い >> う >> え >> お") ,">","<")

    お << え << う << い << あ
    が出力されます。(Access2003です)
  • id:rupopon
    すみません。例が不適切でした。
    りんご >> みかん >> かき >> なし >> バナナ

    バナナ << なし << かき << みかん << りんご
    になるようにしたいです。

    単語はそのままの読み順なので、strReverseが使えませんでした。
  • id:kaiton
    時間から、
    りんご >> みかん >> かき >> なし >> バナナ

    りんご << みかん << かき << なし << バナナ
    が最終仕様なら

    単純に、テーブルを開いて 編集の置換で >> を << に、検索条件を「フィールドの一部」にして
    置き換えればいいのではないですか?
  • id:rupopon
    いえ、回答いただいたコードを試した結果は、

    りんご >> みかん >> かき >> なし >> バナナ



    りんご << みかん << かき << なし << バナナ

    だったのですが、求めている結果は、

    りんご >> みかん >> かき >> なし >> バナナ



    バナナ << なし << かき << みかん << りんご

    です。
    わかりにくくてすみません。

  • id:kaiton
    すみません。 間違っていました。
    For文のところを次のとおりに変えてください。m(__)m
    For i = UBound(StrB) To 0 Step -1
    StrRv = StrRv & StrB(i)
    If i <> 0 Then StrRv = StrRv & StrSplt2
    Next
  • id:kaiton
    フィールド2:StrRv([フィールド1]," >>"," << ")

    フィールド2:StrRv([フィールド1]," >> "," << ")
    に変更してください。
    変更前の区切り文字の>>の後ろのスペースが抜けていました。m(__)m
  • id:rupopon
    出来ました!ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません