A 回答 (16件中1~10件)
- 最新から表示
- 回答順に表示
No.16
- 回答日時:
× DoCmd.RunSQL Replace(strRecord(I), XXXXX, strRecord(I))
〇 DoCmd.RunSQL Replace(strSQL, ”XXXXX”, strRecord(I))
No.15
- 回答日時:
【続】DXSelect()
DXSelect()の戻り値は添付図のようです。この戻り値をSplit関数で配列 strRecord()に格納。その後、For-Next でテーブルに挿入。
strSQL = "INSERT INTO テーブル3 (ID, 担当者, 種別, 数量) VALUES (XXXXX)"
N=UBound(strRecord)
For I = 0 To N
DoCmd.RunSQL Replace(strRecord(I), XXXXX, strRecord(I))
Next I
DBSelect関数では敢えて数量0を除外していません。もし、仮にそういう希望であれば、最後に
DoCmd.RunSQL "DELETE FROM ・・・・"
の1行を。
Public Function DXSelect(ByVal strQuerySQL As String, _
Optional strPause As String = ";") As String
On Error GoTo Err_DXSelect
Dim isTopField As Boolean
Dim I As Integer
Dim J As Integer
Dim N As Integer
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim strTanto As String
Dim strList As String
Dim strNewList As String
Set rst = New ADODB.Recordset
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
J = 0
N = .RecordCount - 1
.MoveFirst
For I = 0 To N
isTopField = True
For Each fld In .Fields
If isTopField Then
strTanto = "'" & fld.Value & "'"
isTopField = False
Else
strList = strList & J & "," & _
strTanto & "," & _
"'" & fld.Name & "'" & "," & _
fld.Value & Chr(13)
End If
J = J + 1
Next fld
.MoveNext
Next I
Else
strList = ""
End If
End With
Exit_DXSelect:
On Error Resume Next
rst.Close
Set rst = Nothing
DXSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", Chr(13) & "[END]", ""), "")
Exit Function
Err_DXSelect:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DXSelect)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DXSelect
End Function
No.14
- 回答日時:
>数量がゼロのところを表示しないようにはできないでしょうか?
(1)
それでは、Nullの場合も0の場合もはじく、ということならば、
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim j As Long
Dim k As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("テーブルA")
Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)
For k = 1 To rs1.Fields.Count - 1
rs1.MoveFirst
Do Until rs1.EOF
If Not IsNull(rs1.Fields(k)) Then
If Not rs1.Fields(k).Value = 0 Then
rs2.AddNew
rs2!担当者 = rs1!名前
rs2!種別 = rs1.Fields(k).Name
rs2!数量 = rs1.Fields(k).Value
rs2.Update
End If
End If
rs1.MoveNext
Loop
Next k
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
(2)
テーブルのデータにはNullがないので、0の場合を
はじく、というのであれば、
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim j As Long
Dim k As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("テーブルA")
Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)
For k = 1 To rs1.Fields.Count - 1
rs1.MoveFirst
Do Until rs1.EOF
If Not rs1.Fields(k).Value = 0 Then
rs2.AddNew
rs2!担当者 = rs1!名前
rs2!種別 = rs1.Fields(k).Name
rs2!数量 = rs1.Fields(k).Value
rs2.Update
End If
rs1.MoveNext
Loop
Next k
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
要するに、
If Not IsNull(rs1.Fields(k)) Then
If Not rs1.Fields(k).Value = 0 Then
の条件式を両方入れるか一方にするかの違いです。
No.12
- 回答日時:
失礼しました。
訂正です。No11の(2)の終わりに、
Nullのデータの処理については(1)と同じです。
としていますが、処理には多少コードを
変更しなければならないので、必要ならば
提示しますが。
何度も申し訳ありません。
元々のデータが
佐藤…りんご2、みかん1、ぶどう1、バナナ1、いちご1
鈴木…りんご1、バナナ1、いちご1
田中…りんご1、みかん2、いちご1
となっているテーブルを
ID 担当者 種別 数量
1 佐藤 りんご 2
2 鈴木 りんご 1
3 田中 りんご 1
4 佐藤 みかん 1
5 田中 みかん 2
6 佐藤 ぶどう 1
7 佐藤 バナナ 1
8 鈴木 バナナ 1
9 佐藤 いちご 1
10 鈴木 いちご 1
11 田中 いちご 1
のようにできればOKなので、(1)のほうでしょうか。
No.11
- 回答日時:
担当者 種別
佐藤 りんご 2
鈴木 りんご 1
田中 りんご 1
佐藤 みかん 1
田中 みかん 2
佐藤 ぶどう 1
鈴木 ぶどう 1
佐藤 バナナ 1
鈴木 バナナ 1
…
といった感じにできれば。
の、.... 以下がどのようになっているのかが
問題なのですが・・・・。
質問のデータでは「鈴木」には「ぶどう」は無かったような・・・。
(1)
ともあれ、以下では
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim j As Long
Dim k As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("テーブルA")
Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)
For k = 1 To rs1.Fields.Count - 1
rs1.MoveFirst
Do Until rs1.EOF
If Not IsNull(rs1.Fields(k)) Then
rs2.AddNew
rs2!担当者 = rs1!名前
rs2!種別 = rs1.Fields(k).Name
rs2!数量 = rs1.Fields(k).Value
rs2.Update
End If
rs1.MoveNext
Loop
Next k
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
データは、
ID 担当者 種別 数量
1 佐藤 りんご 2
2 鈴木 りんご 1
3 田中 りんご 1
4 佐藤 みかん 1
5 田中 みかん 2
6 佐藤 ぶどう 1
7 佐藤 バナナ 1
8 鈴木 バナナ 1
9 佐藤 いちご 1
10 鈴木 いちご 1
11 田中 いちご 1
のように、単純に「テーブルA」の先頭レコードから
データを取り出し、「テーブルB」に格納します。
なお、「テーブルA」でデータがNullのものも表示するならば、
rs2!数量 = rs1.Fields(k).Value
を、
rs2!数量 = Nz(rs1.Fields(k).Value)
Nullを0とするならば、
rs2!数量 = Nz(rs1.Fields(k).Value, 0)
とします。
(2)
以下では、
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim i As Long
Dim iMax As Long
Dim j As Long
Dim k As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("テーブルA")
Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)
iMax = 1
rs1.MoveFirst
Do Until rs1.EOF
For i = 1 To rs1.Fields.Count - 1
If Not IsNull(rs1.Fields(i)) Then
If rs1.Fields(i).Value > iMax Then
iMax = rs1.Fields(i).Value
End If
End If
Next i
rs1.MoveNext
Loop
For j = 1 To iMax
For k = 1 To rs1.Fields.Count - 1
rs1.MoveFirst
Do Until rs1.EOF
If Not IsNull(rs1.Fields(k)) Then
If rs1.Fields(k).Value >= j Then
rs2.AddNew
rs2!担当者 = rs1!名前
rs2!種別 = rs1.Fields(k).Name
rs2!数量 = rs1.Fields(k).Value
rs2.Update
End If
End If
rs1.MoveNext
Loop
Next k
Next j
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
取り出したデータは、
ID 担当者 種別 数量
1 佐藤 りんご 2
2 鈴木 りんご 1
3 田中 りんご 1
4 佐藤 みかん 1
5 田中 みかん 2
6 佐藤 ぶどう 1
7 佐藤 バナナ 1
8 鈴木 バナナ 1
9 佐藤 いちご 1
10 鈴木 いちご 1
11 田中 いちご 1
12 佐藤 りんご 2
13 田中 みかん 2
のように、「テーブルB」に格納されます。
Nullのデータの処理については(1)と同じです。
(1)と(2)のどちらのデータの並びが必要なのかを
もう少し・・・。
以上です。たぶん動くと思いますが。
No.10
- 回答日時:
No9の追加ですが、
もし、数量を加えるならば、
担当者 種別 数量
田中 りんご 1
鈴木 りんご 1
佐藤 りんご 1
田中 みかん 1
佐藤 みかん 1
佐藤 ぶどう 1
鈴木 バナナ 1
佐藤 バナナ 1
田中 いちご 1
鈴木 いちご 1
佐藤 いちご 1
佐藤 りんご 1
田中 みかん 1
のようにすることですか?
そのあたりがあいまいなのですが。
曖昧な記述になり申し訳ないです。
担当者 種別
佐藤 りんご 2
鈴木 りんご 1
田中 りんご 1
佐藤 みかん 1
田中 みかん 2
佐藤 ぶどう 1
鈴木 ぶどう 1
佐藤 バナナ 1
鈴木 バナナ 1
…
といった感じにできれば。
No.9
- 回答日時:
>何故かデータがダブって出てきてしまうところがありました
どのようなことですか?
質問の並べ替えのデータは
担当者 種別
田中 りんご
鈴木 りんご
佐藤 りんご
田中 みかん
佐藤 みかん
佐藤 ぶどう
鈴木 バナナ
佐藤 バナナ
田中 いちご
鈴木 いちご
佐藤 いちご
佐藤 りんご
田中 みかん
のように複数のデータがだぶっているので
このような結果がほしいのだろうという意図で
コードを作成しています。あとは単純に
数量をくっつけただけですが。このような
結果だけならば数量を除いてください、と
補足しています。
もし、
佐藤 みかん 2
佐藤 みかん 2
ならば、
佐藤 みかん 2
だけの表示にしたいのであれば
そのようにしますが、
>上記のようなテーブルがあるのですが、これを下記のようにしたいです
>種別の隣に数量がきてもOKです。
のような説明があれば、普通はこのように考えるのが
妥当だと思いますが。
No.8
- 回答日時:
【ADOと参照設定】
http://accessvba.pc-users.net/ado/
紹介のサイトを一読下さい。
=========================================
PS、DLookup()関数でもOK!
=========================================
http://www.accessclub.jp/samplefile/help/help_16 …
DBLookup()は、Access が提供している DLookup() のADO版です。
(1)Select文を生で書く。
(2)DLookup()の重さを克服する。
この二つの目的で開発したものでDLookup()の三倍速で動作します。今回は、DLookup()を多用するので高速版であるDBLookup()を利用しています。そういうことですから、該当部分は当然にDLookup() でも書けます。
No.7
- 回答日時:
No5です。
「数量」が必要なければ、「テーブルB」の
「数量」フィールドを除き、コードの
rs2!数量 = rs1.Fields(k).Value
をコメントアウトするか、削除してください。
なお、「テーブルB」は、コードを実行すると、
ID 担当者 種別 数量
1 田中 りんご 1
2 鈴木 りんご 1
3 佐藤 りんご 2
4 田中 みかん 2
5 佐藤 みかん 1
6 佐藤 ぶどう 1
7 鈴木 バナナ 1
8 佐藤 バナナ 1
9 田中 いちご 1
10 鈴木 いちご 1
11 佐藤 いちご 1
12 佐藤 りんご 2
13 田中 みかん 2
のようにデータが格納されます。
当然ながら、数量はたとえば、まちまち
であっても同じことです。
なお、コードについて若干補足しますと、
「テーブルA」は、
名前 りんご みかん ぶどう バナナ いちご
佐藤 2 1 1 1 1
鈴木 1 1 1
田中 1 2
1
のようになっていますが、コードでは「テーブルA」のフィールドを
For i = 1 To rs1.Fields.Count - 1
If Not IsNull(rs1.Fields(i)) Then
If rs1.Fields(i).Value > iMax Then
iMax = rs1.Fields(i).Value
End If
End If
Next i
のようにして追いかけていますが、フィールドのIndexは0から
はじまるので、先頭の「名前」フィールドは rs1.Fields(0)
です。したがってこの先頭の「名前」フィールドを除くため
For i = 1 To rs1.Fields.Count - 1
のようにして1からデータを取得するようにしています。
その他、あれやこれやの説明が必要であれば、補足してください。
なお、このコードは、フィールドがいくら増えてもこのまま
使用できます。コードを変更する必要はありません。たとえば、
データのフィールドが、
りんご みかん ぶどう バナナ いちご メロン すいか トマト・・・・
のようになってもこのままです。
IDフィールドは順序を確定するだけなので、順序の確保が必要なければ
IDフィールドを取り除けば単に「横を縦に」というだけのテーブルが
できます。ただ、その場合も基本的なコードはほとんど同じで、
無駄なループをなくすだけです。このままでも使えますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) 日本語について 3 2022/04/07 22:50
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Android(アンドロイド) アンドロイドのスマホ2台の連絡先のクラウドへの同期について 5 2023/08/20 09:34
- Access(アクセス) アクセスで教えてください。 例えばテーブル1に 1 佐藤 2 鈴木 3 佐々木 コードと住所一覧があ 3 2022/06/11 20:45
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- 野球 世界一ですか 4 2022/11/11 06:17
- Excel(エクセル) ランダムに並んだ人の名前から、全種類の人を抜き出す関数 7 2022/07/08 08:06
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- 野球 世界一ですか 2 2022/11/11 06:15
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
アクセスで教えてください。 縦持ちデータを横持ちデータに変更したいです。 項目数が多くてクロス集計で
Access(アクセス)
-
【アクセス】クエリで、行と列を入れ替えるには?【access】
Access(アクセス)
-
-
4
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
5
ACCESSのテーブルの行と列を入れ替えたい
Excel(エクセル)
-
6
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
7
Accessの桁区切りについて教えてください。
Access(アクセス)
-
8
Access 縦(行)のデータを横(列)並びに
その他(データベース)
-
9
アクセスで同じ種類のものを横に並べたい
Access(アクセス)
-
10
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
11
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
12
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
13
ACCESS側からEXCELの書式を設定するには?
Visual Basic(VBA)
-
14
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
15
ACCESS 「パラメータの入力」を消したい!!
Access(アクセス)
-
16
Access_Formのデザインビュー画面を拡大表示
Access(アクセス)
-
17
「#エラー」の回避
Access(アクセス)
-
18
ACCESSの一覧フォームで2つの日付の条件で、条件付き書式をしたい。
その他(データベース)
-
19
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
20
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS VBAでテーブル内の特定...
-
ACCESS DCOUNTの抽出条件について
-
データがあれば○○なければのSQL
-
ACCESSで実行時エラー3008
-
重複した複数のレコードを1レ...
-
【access】複数のフィールドの...
-
アクセスで定数を利用したい。
-
Access から Excelのシートをイ...
-
Access BetweenとLikeの組み合...
-
抽出条件でデータ型が一致しま...
-
DAOでSQLServerに接続し、LeftJ...
-
以下の場合のSQL文の書き方教え...
-
Accessリンクするテーブルが見...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Excelシート上のマクロを登録し...
-
VBA エンターキーでイベントに...
-
リストボックスの選択解除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
【access】複数のフィールドの...
-
Accessで縦と横を入れ替えたい
-
Access vbaで重複レコードの削...
-
抽出条件でデータ型が一致しま...
-
SQLServer→Access インポート
-
別のaccessファイルからデータ...
-
sql文で削除クエリを書く
-
ACCESSで購入回数を表示する方...
-
Accessリンクするテーブルが見...
-
DAOでSQLServerに接続し、LeftJ...
-
アクセスで定数を利用したい。
-
access vbaで前景色を指定したい
-
VBAでテーブル名とカラム名を動...
-
ACCESSのクエリ、SQLに変数を使...
-
access追加クエリーでform入力...
-
【PHP/MySQL】コード上で生成...
-
Access BetweenとLikeの組み合...
おすすめ情報