• ベストアンサー

AccessVBA 並べ替えの条件

こんにちは! sql_c = "SELECT * FROM [テーブル] ORDER BY [cnt] ASC" Me![subform].Form.RecordSource = sql_c Me![subform].Requery というVBAを書き込んだのですが、[cnt]フィールドはテキストフィールドであり、文字も数字も入ってるからだと思いますが、並べ替えがうまくいきません。 1,10,11,12,2,3,4・・・,V1,V10,V11,V2,V3・・・とった具合です。 文字が入るといっても、頭に「V」が付くか付かないかだけです。 きれいに並べるには、どのように書けばいいでしょうか?

  • jobvba
  • お礼率60% (166/274)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

ソート・キーのフィールドを新たに作るほか無いのでは。 1、V1、10、V10・・なら(Vしかないとして) 数で10、11、100、101、・・を導出する。 ソートのルールを考慮して、並べてほしいようにソーとキーを作る。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>1,10,11,12,2,3,4・・・,V1,V10,V11,V2,V3・・・とった具合です。 テキストの並べ替えならその表示で正常です。 数値の桁数を揃えるしか方法はありません。 01,02,03 ・・・ V01,V02 ・・・・

関連するQ&A

  • AccessVBA RecordSourceのリセットについて

    こんにちは。 フォーム上で、データベースを検索するものを作っています。 SELECT ~ WHERE ~ で条件に合致するレコードを、サブフォームを連続表示しています。 リセットボタンを作成して、検索結果を消したい(カラにしたい)と思うのですが、 Me![subform].Form.RecordSource = "" Me![subform].Requery 上記のVBAを実行すると、1レコードだけ表示され、コントロール上では「#Name?」が出てしまっています。 参照するテーブルが無いためにこういうことが起きているのだと思うのですが、防ぐ方法が分かりません。 教えてください。 宜しくお願いします。

  • Access2007のサブフォームのRequeryで悩んでいます。。

    Access2007のサブフォームのRequeryで悩んでいます。。 Aメインフォーム Bサブフォーム埋め込みコントロール Cサブフォーム リストボックスう AにBを貼り付けBのソースオブジェクトにCを指定しています。 Cは帳票形式です リストボックスをクリックしたら、 CのRecordSourceにSQLを挿入し、 CをRequeryしていますが、全くRequery出来ていない模様なのです。。 B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。 B.Form.Requery Me.B.Form.Requery どれも試して駄目でした。 CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、 Requeryが機能していない気がします。 実行結果は、数件対象データはあるのに、Cの中身は空になります。。。 正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

  • accessvba 複数条件でFilterをしたい

    テーブル1 --------------------------------------- ID フィールド1 フィールド2 1 あ A 2 い B 3 う C 4 え D 5 お E --------------------------------------- を作成し、そのテーブルをもとに、帳票フォームを作成しました。 そのフォームに非連結のテキストボックス ID_テキスト フィールド1_テキスト フィールド2_テキスト 3つを設置しました。 行いたい事をクエリ(SQL文)で例えると、 --------------------------------------- SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*")); --------------------------------------- なのですが、 これをクエリを作成せずに、VBAで行いたいです。 各非連結のテキストボックスには、 更新後処理:[イベント プロシージャ] としています。 --------------------------------------- Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub --------------------------------------- は、問題なくできるのですが、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _ "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub にすると、エラーになります。 andの繋げ方が良くないと思うのですが、どうすればいいでしょうか? 最終的には、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" "フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub のような感じにしたいです。 ご回答よろしくお願いします。

  • Requeryしても並べ替えはされないのでしょうか

    【条件】*************************** (テーブル1) フィールド1 1 2 3 4 5 (クエリ1) SELECT テーブル1.フィールド1 FROM テーブル1 ORDER BY テーブル1.フィールド1; (フォーム1) レコードソース:クエリ1 既定のビュー:帳票フォーム コマンド3:コマンドボタン Private Sub コマンド3_Click() Me.Requery End Sub ************************************ 上記の条件で、3レコード目の「3」を「10」に変更し、 コマンド3を押下しても、10は3レコード目のままです。 フォーム1をバツボタンで閉じて、フォーム1を開きなおすと10は一番下に来ます。 Requeryで更新しているのに、なぜ並び替えがされないのでしょうか?

  • AccessVBA ControlSourceのデータについて

    こんにちは。 サブフォームを連続表示させているフォームがあって、 Me.RecordSourceに指定したSQLでデータを取ってきています。 Me[テキストボックス]には0か-1のどちらかしか入ってきません。 やりたいことは、0が入ってきた場合は「文字A」を表示し、-1が入ってきた場合は「文字B」を表示する、ということです。 そういったことは出来るのでしょうか?

  • 「Me.Form」と「Me」の違いは?

    アクセスのフォームで並べ替えをする時、 --------------------------------------------------------- Private Sub cmd_昇順_Click() With Me.Form .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub でも Private Sub cmd_昇順_Click() With Me .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub --------------------------------------------------------- でも出来ますが、 「Form」は必要なのでしょうか? あってもなくてもどっちでもいいなら、理由が知りたいです。

  • SQL count 別名を条件に使用

    いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか

  • 特定条件でWHERE句の条件を変更したい

    @jouken int @sql varchar(MAX) @select varchar(MAX) @where varchar(MAX) set @select = 'select * from table1' set @where = ' where case when @jouken = 0 then 'field1 = 1' when @jouken = 1 then 'field1 = 1 or field2 = 1' when @jouken = 2 then 'field1 = 1 or field2 = 1 or field3 = 1' end ' set @sql=@select+@where exec(@sql) 上記のような文字列の組み合わせでの作成でやりたいことはできたのですが、 こちらを直接SQLの中でやりたいのです。 以下の文は機能しません。 select * from table1 where case when @jouken = 0 then field1 = 1 when @jouken = 1 then field1 = 1 or field2 = 1 when @jouken = 2 then field1 = 1 or field2 = 1 or field3 = 1 end ご教授の程、よろしくお願い致します

  • アクセス2007 VBA 並べ替え

    テーブル1のフィールド1にデータを入れ それを元に帳票フォームを作成しました。 フォームヘッダー部分に 昇順ボタンと降順ボタンを作り、 ボタンを押すごとに並び替えを行いたいのですが どのようなVBAコードを書けばいいのかわかりません。 命令分としては、 「フォームに表示されるテーブル1のフィールド1データの 昇順に並べ替える」です。 SQLを使う方法ではなく、 DocmdかacCmdを使う方法が希望です。 アクセスのヘルプの ----------------------------------------- Access 開発者用リファレンス Form."OrderBy/並べ替え" プロパティ ----------------------------------------- を見ると、 ----------------------------------------- 構文 式.OrderBy 式 Form オブジェクトを表す変数です。 ----------------------------------------- と書いてありますがこの式がわからないのでご教授よろしくお願いします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

専門家に質問してみよう