• 締切済み

Accessの条件つき抽出>テーブル作成。

「T_マスタ」 ・氏名ID ・氏名 ・会社グループ 「T_サブ」 ・氏名ID ・データ年 というようなテーブルがあり、この2ツから「Q_検索」というクエリを作成しています。 このクエリを元に検索フォームを作成しました。 この検索フォームで「データ年」を選んで「エクスポート」を押すと、 会社グループが「110」のものだけを抽出して「T_Excel_110」という テーブルが作成されるようにしたいのです。 「エクスポート」ボタンのコードは ---------------------------------------- (検索用のコード)省略 DoCmd.RunSQL "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名], [T_マスタ].[会社グループ],[T_サブ].[データ年], INTO T_Excel_110" _ & " FROM (T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID]) " _ & " WHERE ((([T_マスタ].[会社グループID])="110"))" & WhereCond stDocName = "T_Excel_110" DoCmd.OpenTable stDocName, acNormal, acEdit MsgBox "[ファイル]-[エクスポート]でExcelファイルを指定してください。" としたのですが、エラーになってしまいます。 いったいどこを直せばいいのでしょうか?

みんなの回答

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.4

前回の回答に忘れていたことがありましたので、追加です。 Excelファイルの保存先とファイル名をユーザーに指定させたければ、データを一時ファイルとしてエクスポートした後これを Excelで開いて、名前を付けて保存してもらうのはいかがでしょうか? 例えば、以下のコードを末尾に加えてみてください。 Dim objApplication As Object '以下の2行は前のコードで記述済みですが、念のため書いておきます。 '(Dim strOutputFile As String) '(strOutputFile = "C:\Test.xls") MsgBox "開いたExcelワークブックを" & vbCr & vbCr & "名前を付けて保存してください。" Set objApplication = CreateObject("Excel.Application") objApplication.Workbooks.Open strOutputFile objApplication.Visible = True

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.3

回答が遅くなりましてスミマセン。 (このところちょっと忙しくて、時間がとれなかったものですから。) エラーメッセージを見ると、 クエリ式'((([T_マスタ].[会社グループ])='110'))(Q_検索データ年 LIKE ’*2001*')'・・・~ の 「 '110')) 【この部分】 (Q_検索データ年 」 の「AND」が抜けていますね。 WhereCond = Mid(WhereCond, strCount + 1) で、意識的に削除なさっているようですが、これが原因かと思います。 また、「Q_検索」クエリーのフィールドを使うなら、SQLステートメントの FROM の後にこのクエリーを JOIN で結合して入れておく必要があります。 (というか、この場合なら[会社グループ]や[データ年]フィールドは[T_マスタ]や[T_サブ]に存在しますので、不要のだと思いますが。) それから、VBAでエクセルへエクスポートの方法ですが、 出力する Excellファイル名を(フルパスで)指定できるなら、TransferSpreadsheetメソッド(HELPで確認してください)を利用すれば可能だと思います。 本来なら、Excellファイルをリンクテーブルにして DAO か ADO で書き込んでやるのが本道で、パフォーマンス(処理速度)も良いかと思いますが、コードが面倒なのでとりあえずテーブル(またはクエリー)を直接エクスポートする方法を考えてみました。 1.テーブル作成クエリーでテーブルをつくり、これを出力する方法 (今回なさっている方法を VBA で連続処理するやり方です。) Dim I As Integer, str会社グループ As String, strOutputFile As String strOutputFile = "C:\Test.xls" '出力する Excell のブック名(フルパスで記述) For I = 110 To 230 Step 10 str会社グループ = CStr(I) '一時的に書き込みに利用するテーブルを作成 DoCmd.RunSQL "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名],[T_マスタ].[会社グループ], [T_サブ].[データ年]" _ & " INTO T_Excel_" & str会社グループ _ & " FROM T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID]" _ & " WHERE 会社グループ='" & str会社グループ & "' AND データ年 like '*" & Me!データ年 & "*'" 'テーブルを Exellシートに出力 DoCmd.TransferSpreadsheet transfertype:=acExport, spreadsheettype:=acSpreadsheetTypeExcel97, _ tablename:="T_Excel_" & str会社グループ, filename:=strOutputFile '一時テーブルを削除 DoCmd.DeleteObject acTable, "T_Excel_" & str会社グループ Next I 2.(テーブルではなく)選択クエリーをつくり、この抽出条件を変えて出力する方法 (クエリーを一つ作るだけでテーブルをいくつも作らないので、多少パフォーマンスは良いと思いますが、クエリーの抽出条件の記述がちょっと裏技っぽくなってしまいます。) まず標準モジュール(フォームのクラスモジュールではだめです)に、Public変数「str会社グループ」と Public Function「func会社グループ」を記述します。 (クエリーの抽出条件に値を渡す際に、変数を直接記述できないために、ユーザー関数を定義します。) Public str会社グループ As String Public Function func会社グループ() func会社グループ = str会社グループ End Function 以下が、フォームモジュールの記述例です。 Dim dbs As DAO.Database, qdf As DAO.QueryDef Dim I As Integer, strSQL As String, strOutputFile As String, str会社グループ As String Set dbs = CurrentDb strOutputFile = "C:\Test.xls" '出力する Excell のブック名(フルパスで記述) '一時的に書き込みに利用する選択クエリーを作成 strSQL = "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名],[T_マスタ].[会社グループ], [T_サブ].[データ年]" _ & " FROM T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID]" _ & " WHERE 会社グループ=func会社グループ() AND データ年 like '*' & [Forms]![フォーム7]![データ年] & '*'" Set qdf = dbs.CreateQueryDef("Q_データ出力", strSQL) For I = 110 To 230 Step 10 str会社グループ = CStr(I) 'クエリーを Exellシートに出力 'range引数で、Exellブックのワークシート名を指定しています。 DoCmd.TransferSpreadsheet transfertype:=acExport, spreadsheettype:=acSpreadsheetTypeExcel97, _ tablename:="Q_データ出力", filename:=strOutputFile, range:="会社G:" & str会社グループ Next I DoCmd.DeleteObject acQuery, "Q_データ出力" Set dbs = Nothing AccessのHELPでは、エクスポートの場合 range 引数を指定しないとなっていますが、実際は使えます。(問題あるのかな?) さて、Excellファイル名を(フルパスで)指定できない(ファイルを探して、フォルダーとファイル名前を得る必要がある)場合ですが、 Office Developer を使っていらっしゃるのでしたら、コモンダイアログの ActiveX を利用すれば、比較的容易にファイルを探すダイアログが作れますが、Office Pro の場合はコモンダイアログは使えませんから、結構面倒ですね。 (Windows API を利用すれば、できないことはないようですが・・・http://www.okweb.ne.jp/kotaeru.php3?q=275155) コードのテストをしていません(ご容赦ください)ので、自信なしのアドバイスです。

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.2

コードを見て気付いたところをお知らせします。 テストはしていませんのでこれだけの問題なのかはわかりませんが、とりあえず確認してみてください。 ~ [T_サブ].[データ年], INTO ~ の INTO の前の「,」は不要。 ~ WHERE ((([T_マスタ].[会社グループID])="110")) ~ の [会社グループID] は、[会社グループ] の間違い? 同じ個所で、"110" は、[会社グループ]フィールドが数値型なら、「"」 は不要。 テキスト型なら 「'110'(または ""110"")」 (HELP で「文字列内でのクォーテーション」を確認してください。) SQLステートメントを書く際は、クエリーをデザインビューで作ってから、その SQLビューを修正してやる方が、簡単で間違いも少ないと思います。 おまけですが、 MsgBox "[ファイル]-[エクスポート]でExcelファイルを指定してください。"  の後ろに、 DoCmd.RunCommand acCmdSaveAs と記述してやると、[ファイル]-[エクスポート] の操作まで VBA で処理できます。

KODAMAR
質問者

お礼

回答ありがとうございます。 別の仕事にとりかかってしまって、実験&お返事遅れてしまいました。 実際の状態をもう少し詳しく書きますね。 「T_マスタ」 ・氏名ID ・氏名 ・会社グループ 「T_サブ」 ・氏名ID ・データ年 「エクスポート」ボタンのコードは ---------------------------------------- Dim SQL As String Dim WhereCond As String Dim condKaisyagroup As String Dim condNendo As String Dim tempOper As String Dim strCount As Long Dim tempCond As String WhereCond = "" '変数の初期化。本当はいらないけど明示的に。 Select Case Me!fraOper.Value Case 1 'and tempOper = " AND " strCount = 5 Case 2 'or tempOper = " OR " strCount = 4 End Select '会社グループ If Me!会社グループ.Value <> "" Then condKaisyagroup = "(Q_検索.会社グループ like '*" & Me!会社グループ.Value & "*')" WhereCond = WhereCond & tempOper & condKaisyagroup End If 'データ年 If Me!データ年.Value <> "" Then condNendo = "(Q_検索.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & " AND " & condNendo End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.RunSQL "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名],[T_マスタ].[会社グループID], [T_サブ].[データ年]] INTO T_Excel_110" _ & " FROM (T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID])" _ & " WHERE ((([T_マスタ].[会社グループ])='110'))" & WhereCond DoCmd.RunSQL "SELECT [T_マスタ].[氏名ID], [T_マスタ].[氏名],[T_マスタ].[会社グループID], [T_サブ].[データ年]] INTO T_Excel_110" _ & " FROM (T_マスタ INNER JOIN T_サブ ON [T_マスタ].[氏名ID]=[T_サブ].[氏名ID])" _ & " WHERE ((([T_マスタ].[会社グループ])='120'))" & WhereCond : : : (会社グループが「230」まで) stDocName = "T_Excel_110" DoCmd.OpenTable stDocName, acNormal, acEdit MsgBox "[ファイル]-[エクスポート]でExcelファイルを指定してください。" End Sub ---------------------------------------- というようにしました。 これで「110」・「120」・・・「230」と会社グループごとのテーブルを作成することができたのですが、 検索(2001年度とか2002年度と指定した場合)が ---------------------------------------- 実行時エラー'3075'; クエリ式'((([T_マスタ].[会社グループ])='110'))(Q_検索データ年 LIKE ’*2001*')'の'.'、'!'、または'()'の使い方が正しくありません。 ---------------------------------------- と出てしまうのです。 やはり検索させるためのところがどこか違うのだとは思うのですが、わかりません。 それと、1つ1つテーブルを作成していくのが結構量が多いので、できれば、検索した結果を、 グループごとにエクセルへエクスポート、なんてことはできないでしょうか? 申し訳ありませんが、よろしくお願いします。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

どこで、どういうエラーになりますか? 作成なさろうとしている「T_Excel_110」はACCESS上のテーブルでしょうか? いったん"Insert into T_Excel_110 select * from Q_検索"で テーブル化した方がわかりやすいのでは?

KODAMAR
質問者

お礼

回答ありがとうございます。 別の仕事にとりかかってしまい、実験&お返事が遅れてしまいました。 エラーは ---------------------------------------- 実行時エラー'3075'; クエリ式'((([T_マスタ].[会社グループ])='110'))(Q_検索データ年 LIKE ’*2001*')'の'.'、'!'、または'()'の使い方が正しくありません。 ---------------------------------------- だったと思います。 >作成なさろうとしている「T_Excel_110」はACCESS上のテーブルでしょうか? はい、そうです。 >いったん"Insert into T_Excel_110 select * from Q_検索"で テーブル化した方がわかりやすいのでは? これは、検索結果を一度テーブルにして、それをまた抽出してテーブルを作成する、ということでしょうか?

関連するQ&A

  • サブフォーム用のテーブルのデータで検索をしてマスタフォームに表示したい。

    Access2000での質問です。 T_マスタ(氏名ID・氏名)・T_サブ(氏名ID・データ年・データ種類)というテーブルから F_マスタ・F_サブというフォームを作成し、 F_マスタの中にサブフォームとしてF_サブを入れています。(氏名IDでリンク) F_検索というフォームを作成し、 データ年・データ種類で検索するようにしました。 この結果を、F_マスタで表示したいのですが、 F_マスタはT_マスタから作成されているため、検索結果が 希望するものではなくなってしまいます。 F_サブでみればきちんと検索されているのですが、 それでは氏名がみれないので。。。 このようなことはできるのでしょうか? F_検索の検索ボタンのコードです。 ------- Private Sub コマンド1_Click() Dim SQL As String Dim WhereCond As String Dim condNendo As String Dim condSyurui As String 'データ年 If Me!データ年.Value <> "" Then condNendo = "(T_サブ.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & " AND " & condNendo End If '種類 If Me!データ種類.Value <> "" Then condSyurui = "(T_サブ.データ種類 like '*" & Me!データ種類.Value & "*')" WhereCond = WhereCond & " AND " & condSyurui End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_サブ", acNormal, , WhereCond End Sub ------- *上記の「F_サブ」を[F_マスタ」で開くようにしたいのです。 宜しくお願いします。

  • ACCESSフォームフィルタで抽出したデータのみをレポートで表示する方法

    フォームフィルターでデータを抽出した後,抽出されたデータのみをレポート上に表示させるコマンドボタンをフォーム上に作っています。 下記のコードを作成しましたが,これだと抽出前の全部のデータが表示されてしまいます。 どうしたら良いでしょうか。 Private Sub ラベルプレビュー_Click() Dim stDocName As String DoCmd.Echo False, stDocName = "rpt宛名ラベル" DoCmd.OpenReport stDocName, acViewDesign DoCmd.SelectObject acReport, stDocName, False ' Reports(stDocName).RecordSource = Me.RecordSource DoCmd.OpenReport stDocName, acViewPreview End Sub

  • Accessのクエリの結果で。。。

    Access2000です。 「T_マスタ」 ・ID ・名前 ・会社名 「T_サブ」 ・ID ・年度 ・種類 「T_備考」 ・ID ・年度 ・種類 ・備考 というようなテーブルが3つあります。 これらを検索するために、すべてを入れた「Q_検索」というクエリを作成しました。 リレーションは T_マスタ:ID - T_サブ:ID T_サブ:ID - T_備考:ID T_サブ:年度 - T_備考:年度 T_サブ:種類 - T_備考:種類 となっています。 入力例として 「T_マスタ」 1  山田太朗  ●●株式会社 2  前田前   □□店 3  大坪拳   △△有限会社 「T_サブ」 1  2001  お中元 1  2002  お歳暮 1  2002  お中元 2  2001  お歳暮 2  2002  お中元 3  2001  お歳暮 「T_備考」 1  2001 お中元  お菓子 1  2002 お中元  水菓子 2  2002 お中元  果物 3  2001 お歳暮  ケーキ となっていたとすると、希望では、「Q_検索」クエリの結果が 6件となっていてほしいのに、実際は3件(T_マスタの件数分)しか出てこないのです。 これをすべて反映させるためにはどうしたらいいのでしょうか?

  • Access テーブル内検索を教えてください。

    いつもお世話になっております。今回、また皆様のお知恵をお貸しいただきたく思います。 検索対象テーブル:社員マスタ(ユニオンクエリ)複数件 検索値:画面リストボックスより入力された部署コード・BUSYO 処理内容:社員マスタの部署コードに入力値BUSYOが一致している データに【更新処理:(仮)INSERTクエリ】を実行したい。 DLookup()や、FindRecord を調べましたが私の技力は限界です。 どうか、ご教授お願いします。 ■コード(実際チャレンジした一部です。) 'str検索条件を条件にバンドIDをT_メンバーテーブルから検索する strBusyo = DLookup("[部署コード]", "qry_社員マスタ", BUSYO) '結果のテスト表示 If strBusyo = "" Then  MsgBox BUSYO& "は、見つかりませんでした" Else  qry_社員マスタから条件に合致したデータをテーブルにInsert  DoCmd.OpenQuery "qry_追加処理"  DoCmd.FindRecord strBusyo 'データを検索する  DoCmd.GoToControl "[部署CD]" 'コントロールを[部署CD]へ移動 End If

  • Access VBAでのフィルタ処理

    アクセス2003を使用しています。 今VBAを使用して、フォームのテキストボックスに記入された文字列を検索条件に、 クエリからデータ抽出したいのですが、 うまくいきません。 解決したい事は、 「abc*」といったように、前方が一致している文字列データを すべて抽出するといった処理です。 今は下記のようなプログラムを組んでいます。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "クエリ1" DoCmd.OpenQuery stDocName, acNormal, acEdit If IsNull(テキストボックス) Then Else stLinkCriteria = "[クエリデータ]=" & "'" & Me![テキストボックス] & "'" End If DoCmd.ApplyFilter stDocName, stLinkCriteria Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub これだと完全に一致しなければ抽出してくれません。 どの様に変更すればよいでしょうか? よろしくお願いします。

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

  • Accessでレコードの複製

    Access2010を使用して入力フォームを作成しています。 メインフォームとサブフォームにそれぞれ顧客情報を表示させていて、 「複製」ボタンを押すと、 メインフォーム、サブフォームのレコードがコピーされるようにしています。 メインフォームの元テーブルはJIK サブフォームの元テーブルはREN です。 JIKおよびRENテーブルはほかからリンクさせているのですが、 これで「複製」ボタンを押すと、 "実行時エラー '3022': インデックス、主キー、またはリレーションシップで重複する値が生成されるためテーブルに要求した変更でした成功しました。フィールドまたは重複データが含まれている、インデックスを削除するフィールド内のデータを変更または重複するエントリを許可して、やり直してのインデックスを再定義します。このエラーは、レポートやレポートの生成に変更を保存するときに発生します。 が出てしまいます。 テーブルをインポートすると正常に動作します。 テーブルをリンクさせる場合、レコードの複製は不可能なのでしょうか? VBAは以下のように記述してみました。 Private Sub コマンド10_Click() On Error GoTo Err_コマンド10_Click Dim Result As Integer Result = MsgBox("このデータを複製しますか?", vbYesNo + vbDefaultButton2 + vbQuestion, "データの複製確認") If Result = vbYes Then Me!txtCopy事件ID = Me!事件ID Dim stDocName As String DoCmd.RunCommand acCmdSelectRecord 'カレントレコードの選択 DoCmd.RunCommand acCmdCopy '選択レコードのコピー DoCmd.GoToRecord , , acNewRec '新規レコードに移動 DoEvents ' (必要に応じて) DoCmd.RunCommand acCmdPasteAppend 'コピーレコードの追加貼り付け DoCmd.SetWarnings False ' システムメッセージ非表示 stDocName = "追加クエリ" DoCmd.OpenQuery stDocName, acNormal, acEdit DoCmd.SetWarnings True ' システムメッセージ表示 ' サブフォーム再クエリ Me!SREN.Requery ' 追加したレコードに移動 DoCmd.GoToRecord , , acLast Me.リスト31.Value = Me.リスト31.ItemData(0) MsgBox ("データを複製しました") Exit_コマンド10_Click: Exit Sub Err_コマンド10_Click: MsgBox Err.Description Resume Exit_コマンド10_Click Else MsgBox "データの複製をキャンセルしました" End If End Sub 追加クエリは以下のように作成してみました。 【追加クエリ】 INSERT INTO REN ( 事件ID, 氏名, フリガナ, ・・・ ) SELECT [Forms]![MAIN]![事件ID] AS 式1, REN.氏名, REN.[フリガナ], REN.報告書, ・・・ FROM REN WHERE (((REN.事件ID)=[Forms]![MAIN]![txtCopy事件ID]));

  • テキストボックスから一致したデータを抽出したい。

    初心者です。Access2003で、 (1)テーブルで「氏名」、「住所」のデータを作成。 (2)フォームでテキストボックス(txt_入力)とコマンドボタンを作成。 (3)押下時で開くようなフォームを作成(F_データリスト) テキストボックス(txt_入力)に氏名を入力し、テーブルと一致したものだけを抽出したい。 以下のように記述するとコマンド45押下でパラメータの入力画面がでてしまします。助けてください。 Private Sub コマンド45_Click() On Error GoTo Err_コマンド45_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_データリスト" stLinkCriteria = "[氏名]=" & " Me![txt_入力]" DoCmd.OpenForm stDocName, , , stLinkCriteria 以下省略。

  • サブフォームのデータをそのままひっぱってきたい。

    Access2002です。 T_マスタ・T_サブ・T_備考という3つのテーブルをもとに F_マスタ・F_サブ・F_備考という3つのフォームを作成しています。 F_マスタの中にF_サブをサブフォームとして設定してあります。(氏名IDでリンク) F_サブの中に、Fサブ上の情報(氏名ID・データ年)で検索をして開く F_備考を開くためのコマンドボタンを設置してあります。 そこでF_備考を開いた後に、何も検索結果が出されなかったら、 入力をするために、「入力」というボタンを設置しました。 このボタンを押すと、F_サブ上の「氏名ID」「データ年」を 自動でF_備考の同じ名前のところへ入力したいのです。 ですが、実行すると「F_サブフォームは見つからない」という旨の エラーが出てしまいます。 それならF_サブを開いてしまえと、コマンドボタン上に、 F_サブを開く設定をしたのですが、今度は 「サブフォームに設定してあるフォームは開けない」という エラーメッセージが表示されてしまいました。 サブフォームのデータをそのまま参照することはできないのでしょうか? 実際のコードは以下のような簡単なものです。 F_備考の「入力」ボタン Me!氏名ID = Forms![F_サブ]![氏名ID] Me!データ年 = Forms![F_サブ]![データ年] どうやったらデータをひっぱってこれるのでしょうか? 宜しくお願いします。

  • アクセス オプショングループで選択した条件を抽出

    先に条件を指定するフォームを作成します。 その条件の指定には、オプショングループを使います。 そのフォームに基づいたクエリを作成したいです。 例えば、国語・算数・英語 の中から一つを選択させるオプショングループを作成しておきます。 そこで選択された科目のみを抽出させるクエリを作りたいです。 (すでに氏名・科目・点数等入ったレコードソースはあります) クエリの抽出条件にはなんと入力すればよいのでしょうか。 どうぞよろしくお願いします。

専門家に質問してみよう