A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
すみません。
少し単純なことに気が付きませんでした。実際には、わざわざ「日付」を数値に変換する必要は
ありませんでした。「日付」の比較に難儀したので
数値化したのですが、関数の中では直接比較できるので
わざわざ「日付」を数値化する必要はなかったようです。
以下のコードをコード表に貼り付け、保存します。
「テーブル名」は実際に合わせて変更してください。
Function funcDateRank(ByVal dData As Date) As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim minNum As Long
Dim i As Long
Dim j As Long
Dim strSQL As String
'日付だけを取り出しグループ化
strSQL = "SELECT 日付 FROM テーブル名 GROUP BY 日付"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
'自分より大きい日付を見つける
rs.MoveFirst
Do Until rs.EOF
If num < rs!dData Then
i = i + 1
End If
rs.MoveNext
Loop
'レコード数の取得
j = rs.RecordCount
'ランクの算出
funcDateRank = j - i
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Function
次にテーブルを基にクエリを作成します。
そのクエリの新しいフィールドに、
funcDateRank([日付])
と設定し、保存してください。
以上です。
No.4
- 回答日時:
すみません。
もう一つ。Int((Format([日付],"yyyymmdd")))
は、
CLng((Format([日付],"yyyymmdd")))
のほうがいいのかもしれませんが、
Intでも対応できるので、Intにしています。
たびたびで。
No.3
- 回答日時:
すみません、(2)のコードの中で、「Q123」を
レコードデットとして使用していないので、コードは
Function funcRank(ByVal num As Long) As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long
Dim j As Long
Dim strSQL As String
'変換数値だけを取り出しグループ化
strSQL = "SELECT 変換数値 FROM Q123 GROUP BY 変換数値"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
'自分より大きい数値を見つける
rs.MoveFirst
Do Until rs.EOF
If num < rs!変換数値 Then
i = i + 1
End If
rs.MoveNext
Loop
'レコード数の取得
j = rs.RecordCount
'ランクの算出
funcRank = j - i
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Function
と、置き換えてください。あとは変更はありません。
そのままでも変わりはないのですが、無駄な記述に
なるので除きます。
それと、
Dim minNum As Long
も除きます。minNumも変数として使っていませんでした。
以上です。
No.2
- 回答日時:
日付を数値型に変換して、いろいろやってみましたが、
面倒くさい(すみません)ので、関数で対処することに
しました。
(1)
テーブルをもとにクエリを作ります。クエリ名を「Q123」としておきます。
「テーブル名」は実際に合わせて変換してください。
新しいフィールドに、
変換数値: Int((Format([日付],"yyyymmdd")))
を設定します。クエリのSQLビューでは、以下のようになっていると
思います。
SELECT 日付, Int((Format([日付],"yyyymmdd"))) AS 変換数値
FROM テーブル名;
「日付」以外にフィールドがある場合はそのまま
フィールドをクエリに設定してください。
(2)
次に、以下のコードを標準モジュールに貼り付け保存して
ください。
なお、DAOを使っているのでコード表のツールから参照設定
を選択して、Microsoft DAO XX Object Library にチェックが
入っているか確認してください。XXは3.6あるいは4.0のような
数字です。
Function funcRank(ByVal num As Long) As Long
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim minNum As Long
Dim i As Long
Dim j As Long
Dim strSQL As String
'変換数値だけを取り出しグループ化
strSQL = "SELECT 変換数値 FROM Q123 GROUP BY 変換数値"
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Q123")
Set rs2 = db.OpenRecordset(strSQL)
'自分より大きい数値を見つける
rs2.MoveFirst
Do Until rs2.EOF
If num < rs2!変換数値 Then
i = i + 1
End If
rs2.MoveNext
Loop
'レコード数の取得
j = rs2.RecordCount
'ランクの算出
funcRank = j - i
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Function
本当はレコードの数が相当のものであれば、strSQL
のところはクエリを作成しておいたほうがいいかも
しれませんが、そのときにはstrSQLの中身
SELECT 変換数値 FROM Q123 GROUP BY 変換数値
でクエリを作成して、クエリをstrSQLの替わりにすればすむことです。
そのときは、
>Set rs2 = db.OpenRecordset(strSQL)
を
Set rs2 = db.OpenRecordset(クエリ名)
とします。
(3)
次に、作成しておいたクエリをデザインビューで開き、
新しいフィールドに、
順位: funcRank([変換数値])
を設定してください。
(4)
(1)、(2)、(3)をまとめますと、「Q123」をデザインビューで
開くと、
(A) 変換数値: Int((Format([日付],"yyyymmdd")))
(B) 順位: funcRank([変換数値])
フィールド 日付 (A) (B)
テーブル テーブル名
並べ替え
表示 チェック チェック チェック
抽出条件
のようになっていると思います。
これでクエリを開いてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- 日本語 複数枚ある画像を日付降順(最新順)に並べた場合、最新から3番目までの順位を何と言いますか? 2 2022/08/05 23:14
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のテキストボックスに数...
-
日付を昇順で並び替えし、空白...
-
datetime型でのソート
-
【Tableau Desktop】文字列から...
-
FileMaker Pro 10 で令和を表示
-
挿入した日付の自動更新を中止...
-
日付がインポートされない
-
Word2010 フィールド内での和...
-
Accessで秒を時間で表示させる...
-
EXCELからACCESSへのインポート...
-
ピポットテーブルの月のグルー...
-
日付を差し込み印刷で表示した...
-
Wordで、ヘッダーに印刷日付を...
-
クエリで日付型のIIF関数の使用
-
「24日の0時」って・・・
-
VBAでエクセルシートを更新...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
エクセルのチェックボックスを...
-
エクセルで最高値、最低値の日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付を差し込み印刷で表示した...
-
日付を昇順で並び替えし、空白...
-
差し込み印刷で日付の曜日を表...
-
Word2010 フィールド内での和...
-
クエリで日付型のIIF関数の使用
-
Wordで、ヘッダーに印刷日付を...
-
日付型のテキストボックスに数...
-
Accessで秒を時間で表示させる...
-
ファイルメーカーの日付の検索
-
Wordの日付変換ってできますか?
-
【Word】 今日の「年」「月」...
-
accessで残業時間計算
-
日付がインポートされない
-
メインサブフォームでメインの...
-
【Tableau Desktop】文字列から...
-
アクセス:エクセルからのイン...
-
ACCESSの自動連番について
-
重複を除外したカウント方法を...
-
Accessで日付から曜日を自動で...
-
挿入した日付の自動更新を中止...
おすすめ情報