Page 813 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼フォーム上のチェックボックス ishy 03/2/26(水) 15:41 ┣Re:フォーム上のチェックボックス ichinose 03/2/26(水) 19:13 ┃ ┗Re:フォーム上のチェックボックス ishy 03/2/27(木) 17:33 ┃ ┗Re:フォーム上のチェックボックス ichinose 03/2/27(木) 21:27 ┗Re:フォーム上のチェックボックス Jaka 03/2/28(金) 9:32 ┗Re:フォーム上のチェックボックス ishy 03/2/28(金) 17:36 ─────────────────────────────────────── ■題名 : フォーム上のチェックボックス ■名前 : ishy <ishy88@hotmail.com> ■日付 : 03/2/26(水) 15:41 -------------------------------------------------------------------------
初めて投稿いたします。 不慣れな点がございましたらご指導お願いします。 現在excel97作業しております。 フォームを作成し、モジュールのコードにてフォーム上に任意の数のチェックボックスと ラベルを作成します。 例えばcheckbox1がチェックされれば、checkbox2もチェックされる。 checkbox1のチェックがはずされれば、checkbox2もチェックがはずされる。 といったことがしたいのです。 最初から用意しているチェックボックスにはクリックイベントで 行えますが、モジュールで作成したチェックボックスは反映されません。 Dim MyControl As Object Set MyControl = Controls.Item(ControlsIndex) Label1.Caption = MyControl.Name Label2.Caption = ControlsIndex で名前や、ControlsIndexは取得できます。そのチェックボックスがONかOFFかも 判断できます。 ただ、どうしてもクリックしたときの反応ができません。 一応、 [#9952]を見て研究しましたがだめでした。 下記にチェックボックスの作り方のコードを載せます。 長いのですが、これをみてもらった方が、何をしたいかよく わかるのではないかと思います。 もしかしたらいらない変数が混じってるかもしれません。(すいません) UserForm1にCommandButton1とFrame1を用意します。 (コマンドボタンとフレーム1のみ最初から作成しています。) UserForm1に貼り付けて頂ければ、機能すると思います。 ご助言、回答お待ちしております。 Option Explicit Private chkcnt As Integer '全体で何行(個)チェックボックスを作成したか。 Private f1Cnt(5) As Integer 'frcnt =1の時のカウントを保持 Private f2Cnt(2) As Integer 'frcnt =2の時のカウントを保持 Private f1chk As Integer 'コマンドボタン1を押下時 Private Sub CommandButton1_Click() Dim ret As Integer ret = cmdAdd(1, 5, 5) 'チェックボックスとラベルを作成 ret = chkbox(5) '作成されたチェックボックスの一部を確認 '(認識はできるということです。) End Sub 'チェックボックスとラベルを作成 Private Function cmdAdd(frcnt As Integer, lcnt As Integer, lrcnt As Integer) 'frcnt 1か2。1なら物件2なら部屋。 lcnt 物件の件数。 lrcnt 列数 Dim ret As Integer Dim cmbAdd_cnt As MSForms.Label Dim chkAdd_cnt As MSForms.CheckBox Dim frmAdd_cnt As MSForms.Frame Dim Cnt As Integer, rcnt As Integer Dim Haba As Integer, TH As Integer, TW As Integer, TT As Integer, TL As Integer Dim TW1 As Integer, TW2 As Integer, TW3 As Integer, TW4 As Integer Dim ctlName As String Dim fr As String TH = 20 'height Haba = 3 If frcnt = 1 Then TL = 18 'left TT = 15 chkcnt = 0 TW1 = 150 TW2 = 300 TW3 = 60 fr = "a" Else TL = 50 TT = 15 + (TH * chkcnt) + (Haba * chkcnt) TW1 = 100 TW2 = 200 TW3 = 60 fr = "b" End If '行 For Cnt = 1 To lcnt 'チェックボックス作成 If frcnt = 1 Then f1chk = Cnt f1Cnt(lcnt) = Cnt 'frcnt = 1の時のカウント ctlName = "CheckBox" & fr & Cnt Else ctlName = "CheckBox" & fr & f1chk & Cnt End If Set chkAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.CheckBox.1", ctlName, True) ' MsgBox ctlName & "は、作成されました" chkAdd_cnt.Value = True chkAdd_cnt.Left = TL - 13 chkAdd_cnt.Top = TT chkcnt = chkcnt + 1 '列 For rcnt = 1 To lrcnt 'ラベル作成 If frcnt = 1 Then ctlName = "label" & fr & Cnt Else ctlName = "label" & fr & f1chk & Cnt End If Set cmbAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.Label.1", ctlName, True) cmbAdd_cnt.Caption = "コントロールが追加されました。" & Cnt ' MsgBox ctlName & "は、作成されました" cmbAdd_cnt.Left = TL cmbAdd_cnt.Top = TT Select Case rcnt Case 1 TW = TW1 'width Case 2 TW = TW2 Case 3 TW = TW3 Case 4 TW = TW3 Case 5 TW = TW3 End Select cmbAdd_cnt.Width = TW cmbAdd_cnt.Font.Size = 12 cmbAdd_cnt.Height = 18 TL = TL + TW + Haba '最終列は物件コードを代入。不可視 If rcnt = lrcnt Then cmbAdd_cnt.Caption = "" Else cmbAdd_cnt.SpecialEffect = fmSpecialEffectSunken If frcnt = 1 Then cmbAdd_cnt.BackColor = RGB(205, 207, 176) Else cmbAdd_cnt.BackColor = RGB(229, 236, 197) End If End If Next rcnt ' Stop If frcnt = 1 Then ret = cmdAdd(2, 2, 2) frcnt = 1 TL = 18 End If If frcnt = 2 Then TL = 50 End If TT = 15 + (TH * chkcnt) + (Haba * chkcnt) Next Cnt If frcnt = 1 Then Set cmbAdd_cnt = Nothing Set chkAdd_cnt = Nothing 'フレームの形を整える。 UserForm1.Frame1.Left = 8 UserForm1.Frame1.Top = 10 UserForm1.Frame1.Width = 150 + 300 + 60 + 50 UserForm1.Frame1.Height = 350 UserForm1.Frame1.ScrollBars = 3 UserForm1.Frame1.KeepScrollBarsVisible = 3 UserForm1.Frame1.ScrollHeight = 400 UserForm1.Frame1.ScrollWidth = 600 End If End Function '作成されたチェックボックスの一部を確認(5個分。数に意味はありません) Function chkbox(lcnt As Integer) Dim i As Integer Dim nCnt As Integer Dim strCtl As String For nCnt = 1 To lcnt Step 1 strCtl = "CheckBox" & "a" & CStr(nCnt) If UserForm1.Controls(strCtl).Value = True Then MsgBox strCtl & "は、ONです" Else MsgBox strCtl & "は、OFFです" End If Next nCnt End Function 以上です。宜しくお願いします。 |
▼ishy さん: こんばんは。 見せていただいたコードで動作確認はしました。 で・・・・。 「cmdAdd」というFunctionモジュールをちゃんと理解していませんが、 以下のコードでイベントが発生しますので、イベント内をCase文等で処理を分けてください。 クラスモジュールを作成してください(既定名のClass1)。 クラスモジュール内で・・・ '====================================== Public WithEvents chkAdd_cnt As MSForms.CheckBox Public id As Long Public enableevent As Boolean Private Sub chkAdd_cnt_Click() If enableevent = True Then If chkAdd_cnt.Value = True Then mes$ = "チェックされました" Else mes$ = "チェックはずされました" End If MsgBox id & "番のチェックボックスが" & mes$ End If End Sub 「cmdAdd」を少し変更しました(内容全て把握してないんで少しだけです)。 '================================================================== Private ev_chk() As New Class1 '追加データ '================================================================== Private Function cmdAdd(frcnt As Integer, lcnt As Integer, lrcnt As Integer) 'frcnt 1か2。1なら物件2なら部屋。 lcnt 物件の件数。 lrcnt 列数 Dim ret As Integer Dim cmbAdd_cnt As MSForms.Label 'Dim chkAdd_cnt As MSForms.CheckBox '↑これ要りません Dim frmAdd_cnt As MSForms.Frame Dim Cnt As Integer, rcnt As Integer Dim Haba As Integer, TH As Integer, TW As Integer, TT As Integer, TL As Integer Dim TW1 As Integer, TW2 As Integer, TW3 As Integer, TW4 As Integer Dim ctlName As String Dim fr As String TH = 20 'height Haba = 3 If frcnt = 1 Then TL = 18 'left TT = 15 chkcnt = 0 TW1 = 150 TW2 = 300 TW3 = 60 fr = "a" Else TL = 50 TT = 15 + (TH * chkcnt) + (Haba * chkcnt) TW1 = 100 TW2 = 200 TW3 = 60 fr = "b" End If '行 For Cnt = 1 To lcnt 'チェックボックス作成 If frcnt = 1 Then f1chk = Cnt f1Cnt(lcnt) = Cnt 'frcnt = 1の時のカウント ctlName = "CheckBox" & fr & Cnt Else ctlName = "CheckBox" & fr & f1chk & Cnt End If ReDim Preserve ev_chk(1 To chkcnt + 1) ' 必要な数だけClass1を設定します With ev_chk(chkcnt + 1) Set .chkAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.CheckBox.1", ctlName, True) ' MsgBox ctlName & "は、作成されました" .chkAdd_cnt.Value = True .chkAdd_cnt.Left = TL - 13 .chkAdd_cnt.Top = TT .id = chkcnt + 1 '↑どのチェックボックスかを識別するID .enableevent = True '↑Falseの時は、イベントを発生させないように制御する(自分でですよ) End With chkcnt = chkcnt + 1 '列 For rcnt = 1 To lrcnt 'ラベル作成 If frcnt = 1 Then ctlName = "label" & fr & Cnt Else ctlName = "label" & fr & f1chk & Cnt End If Set cmbAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.Label.1", ctlName, True) cmbAdd_cnt.Caption = "コントロールが追加されました。" & Cnt ' MsgBox ctlName & "は、作成されました" cmbAdd_cnt.Left = TL cmbAdd_cnt.Top = TT Select Case rcnt Case 1 TW = TW1 'width Case 2 TW = TW2 Case 3 TW = TW3 Case 4 TW = TW3 Case 5 TW = TW3 End Select cmbAdd_cnt.Width = TW cmbAdd_cnt.Font.Size = 12 cmbAdd_cnt.Height = 18 TL = TL + TW + Haba '最終列は物件コードを代入。不可視 If rcnt = lrcnt Then cmbAdd_cnt.Caption = "" Else cmbAdd_cnt.SpecialEffect = fmSpecialEffectSunken If frcnt = 1 Then cmbAdd_cnt.BackColor = RGB(205, 207, 176) Else cmbAdd_cnt.BackColor = RGB(229, 236, 197) End If End If Next rcnt ' Stop If frcnt = 1 Then ret = cmdAdd(2, 2, 2) frcnt = 1 TL = 18 End If If frcnt = 2 Then TL = 50 End If TT = 15 + (TH * chkcnt) + (Haba * chkcnt) Next Cnt If frcnt = 1 Then Set cmbAdd_cnt = Nothing 'Set chkAdd_cnt = Nothing '↑これは、取る 'フレームの形を整える。 UserForm1.Frame1.Left = 8 UserForm1.Frame1.Top = 10 UserForm1.Frame1.Width = 150 + 300 + 60 + 50 UserForm1.Frame1.Height = 350 UserForm1.Frame1.ScrollBars = 3 UserForm1.Frame1.KeepScrollBarsVisible = 3 UserForm1.Frame1.ScrollHeight = 400 UserForm1.Frame1.ScrollWidth = 600 End If End Function としてみましたが、クラス内の構成を考えてみて下さい。 |
ichinoseさん さっそくのご指導ありがとうございます。 なんかものすごくレベルが高いところの話のような気がしました。 教えてもらわなければ、絶対できなかったと思います。 おかげさまで、きっちり機能しております。 もし宜しければ、教えて頂きたいのですが、 目指しているのは一件ツリー構造に見える画面です。 一回目のループが親、二回目のループが子供を作っています。 親は一行その子供は複数行(データにより異なる) 親子ともに列は変りません。 親のチェックボタンが外れれば、子供のチェックボタンがすべて外れます。 親のチェックボタンにチェックがなくても、どれか一つでも子供にチェックがつくと、 親にも自動的にチェックがつきます。 (最終的にはチェックのついている、行を必要データとして、シートに取り込みます。) この判断として、チェックボックスに、一意の名前(但し、 親と子の関係がわかるようにグループも判断できる)をつけようと頑張っています。 もし、洗練された名前の付け方や、名前に関係なくこの判断が行えるのなら 教えて頂けないでしょうか。 宜しくお願いします。 宜しくお願いします。 |
▼ishy さん: こんばんは。 >親のチェックボタンが外れれば、子供のチェックボタンがすべて外れます。 >親のチェックボタンにチェックがなくても、どれか一つでも子供にチェックがつくと、 >親にも自動的にチェックがつきます。 そうでしたね。これがしたいんでしたっけ・・・。 クラスモジュールを次のように変更してください。 '==================================================== Public WithEvents chkAdd_cnt As MSForms.CheckBox Public id As Long Public frcnt As Integer Public f1chk As Integer Public cnt As Integer ' 上3つの変数は ishy さんが宣言した変数と同じ意味です Public enableevent As Boolean '====================================================== Private Sub chkAdd_cnt_Click() If enableevent = True Then call UserForm1.chk_value(id) ' 当該ユーザーフォーム名で・・・ End If End Sub フォームモジュールは・・・ '===================================================== Option Explicit Private ev_chk() As New Class1 Private chkcnt As Integer '全体で何行(個)チェックボックスを作成したか。 'Private f1Cnt(5) As Integer 'frcnt =1の時のカウントを保持 'Private f2Cnt(2) As Integer 'frcnt =2の時のカウントを保持 '上2つは、要りません Private f1chk As Integer 'コマンドボタン1を押下時 '============================================================= Private Sub CommandButton1_Click() Dim ret As Integer ret = cmdAdd(1, 5, 5) 'チェックボックスとラベルを作成 ret = chkbox(5) '作成されたチェックボックスの一部を確認 '(認識はできるということです。) End Sub '===================================================================== 'チェックボックスとラベルを作成 Private Function cmdAdd(frcnt As Integer, lcnt As Integer, lrcnt As Integer) 'frcnt 1か2。1なら物件2なら部屋。 lcnt 物件の件数。 lrcnt 列数 Dim ret As Integer Dim cmbAdd_cnt As MSForms.Label 'Dim chkAdd_cnt As MSForms.CheckBox Dim frmAdd_cnt As MSForms.Frame Dim cnt As Integer, rcnt As Integer Dim Haba As Integer, TH As Integer, TW As Integer, TT As Integer, TL As Integer Dim TW1 As Integer, TW2 As Integer, TW3 As Integer, TW4 As Integer Dim ctlName As String Dim fr As String TH = 20 'height Haba = 3 If frcnt = 1 Then TL = 18 'left TT = 15 chkcnt = 0 TW1 = 150 TW2 = 300 TW3 = 60 fr = "a" Else TL = 50 TT = 15 + (TH * chkcnt) + (Haba * chkcnt) TW1 = 100 TW2 = 200 TW3 = 60 fr = "b" End If '行 For cnt = 1 To lcnt 'チェックボックス作成 If frcnt = 1 Then f1chk = cnt 'f1Cnt(lcnt) = cnt 'frcnt = 1の時のカウント ctlName = "CheckBox" & fr & cnt Else ctlName = "CheckBox" & fr & f1chk & cnt End If ReDim Preserve ev_chk(1 To chkcnt + 1) With ev_chk(chkcnt + 1) Set .chkAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.CheckBox.1", ctlName, True) ' MsgBox ctlName & "は、作成されました" .chkAdd_cnt.Value = True .chkAdd_cnt.Left = TL - 13 .chkAdd_cnt.Top = TT .id = chkcnt + 1 .frcnt = frcnt If frcnt = 1 Then .f1chk = cnt .cnt = 0 Else .f1chk = f1chk .cnt = cnt End If .enableevent = True End With chkcnt = chkcnt + 1 '列 For rcnt = 1 To lrcnt 'ラベル作成 If frcnt = 1 Then ctlName = "label" & fr & cnt Else ctlName = "label" & fr & f1chk & cnt End If Set cmbAdd_cnt = _ UserForm1.Frame1.Controls.Add("Forms.Label.1", ctlName, True) cmbAdd_cnt.Caption = "コントロールが追加されました。" & cnt ' MsgBox ctlName & "は、作成されました" cmbAdd_cnt.Left = TL cmbAdd_cnt.Top = TT Select Case rcnt Case 1 TW = TW1 'width Case 2 TW = TW2 Case 3 TW = TW3 Case 4 TW = TW3 Case 5 TW = TW3 End Select cmbAdd_cnt.Width = TW cmbAdd_cnt.Font.Size = 12 cmbAdd_cnt.Height = 18 TL = TL + TW + Haba '最終列は物件コードを代入。不可視 If rcnt = lrcnt Then cmbAdd_cnt.Caption = "" Else cmbAdd_cnt.SpecialEffect = fmSpecialEffectSunken If frcnt = 1 Then cmbAdd_cnt.BackColor = RGB(205, 207, 176) Else cmbAdd_cnt.BackColor = RGB(229, 236, 197) End If End If Next rcnt ' Stop If frcnt = 1 Then ret = cmdAdd(2, 2, 2) frcnt = 1 TL = 18 End If If frcnt = 2 Then TL = 50 End If TT = 15 + (TH * chkcnt) + (Haba * chkcnt) Next cnt If frcnt = 1 Then Set cmbAdd_cnt = Nothing 'Set chkAdd_cnt = Nothing 'フレームの形を整える。 UserForm1.Frame1.Left = 8 UserForm1.Frame1.Top = 10 UserForm1.Frame1.Width = 150 + 300 + 60 + 50 UserForm1.Frame1.Height = 350 UserForm1.Frame1.ScrollBars = 3 UserForm1.Frame1.KeepScrollBarsVisible = 3 UserForm1.Frame1.ScrollHeight = 400 UserForm1.Frame1.ScrollWidth = 600 End If End Function '=============================================================== '作成されたチェックボックスの一部を確認(5個分。数に意味はありません) Function chkbox(lcnt As Integer) Dim i As Integer Dim nCnt As Integer Dim strCtl As String For nCnt = 1 To lcnt Step 1 strCtl = "CheckBox" & "a" & CStr(nCnt) If UserForm1.Controls(strCtl).Value = True Then MsgBox strCtl & "は、ONです" Else MsgBox strCtl & "は、OFFです" End If Next nCnt End Function '================================================================ 'このプロシジャーでチェックボックスのValueプロパティを制御しています Sub chk_value(id As Long) Dim idx As Long Dim ans As Boolean ans = ev_chk(id).chkAdd_cnt.Value If ev_chk(id).frcnt = 1 Then For idx = LBound(ev_chk()) To UBound(ev_chk()) With ev_chk(idx) If ev_chk(id).f1chk = .f1chk Then .enableevent = False .chkAdd_cnt.Value = ans .enableevent = True End If End With Next idx Else If ans = True Then For idx = LBound(ev_chk()) To UBound(ev_chk()) With ev_chk(idx) If ev_chk(id).f1chk = .f1chk And .cnt = 0 Then .enableevent = False .chkAdd_cnt.Value = ans .enableevent = True End If End With Next idx End If End If End Sub 以上ですが、Class1というオブジェクトが強度の弱い、結合度の大きいものになってしまいましたが、Excel2000ですが、動作確認はしました。 試してみて下さい。 >目指しているのは一件ツリー構造に見える画面です。 >一回目のループが親、二回目のループが子供を作っています。 >親は一行その子供は複数行(データにより異なる) >親子ともに列は変りません。 ところで、この「cmdAdd」Functionプロシジャーで再帰ロジックになっていますが、 この先、ツリー構造が深くなっていってもいいようにという拡張性からですか? (でも、その時は、中のロジックも大きく変更しなければなりませんよね) 本日も花粉症がひどく、代替コードを載せられませんが、普通のループのネストでいけそうに思えるんですが・・・。 |
ishyさん ichinoseさん おはようございます。。 ishyさんへの直接回答ではありません。 私は、ichinose師匠様の様に高度な脳みそを持ち合わせていないので、ishyさんのコードを解析できませんでした。 で、参考になと思えない自己満足出展と言う事で..。 (作っちゃったから) Object名の1部に連番を使っています。 Class1モジュール Public WithEvents ChecEvent As MSForms.CheckBox Public WithEvents ButnEvent As MSForms.CommandButton Private Sub ButnEvent_Click() Dim ctobj As Object With ButnEvent MsgBox ButnEvent.Caption If ButnEvent.Caption = "終 了" Then Unload UserForm1 End Else For Each ctobj In UserForm1.Controls If TypeName(ctobj) = "CheckBox" And _ ctobj.Value = True Then MsgBox ctobj.Caption & " は、" & ctobj.Value End If Next End If End With End Sub Private Sub ChecEvent_Click() Dim MC As Long With ChecEvent MC = Application.Substitute(UserForm1.ActiveControl.Name, "MCheckBox", "") If MC <> 10 Then 'MTBC Application.EnableEvents = False If UserForm1.Controls("MCheckBox" & MC) = True Then UserForm1.Controls("MCheckBox" & MC + 1) = True Else UserForm1.Controls("MCheckBox" & MC + 1) = False End If Application.EnableEvents = True End If End With End Sub Form1モジュール Dim ChecCls() As New Class1 Dim ButnCls() As New Class1 Dim i As Long, J As Long, N As Long, CCnt As Long Dim ボタン位置高 As Single, 実行ボタン位置横 As Long Const 行間隔 = 16, ボタン基準値 = 50 Const チェック標準数 = 5 Private Sub UserForm_Initialize() N = 0: J = 5 Me.Width = 240 Me.Caption = "シート削除" Me.Height = 140.25 ボタン位置高 = Me.Height - ボタン基準値 実行ボタン位置横 = 135 For i = 1 To 10 If N = J Then N = 0 End If N = N + 1 CCnt = CCnt + 1 ReDim Preserve ChecCls(1 To CCnt) Set ChecCls(CCnt).ChecEvent = Me.Controls.Add("Forms.CheckBox.1", "MCheckBox" & i) With Me.Controls("MCheckBox" & i) If i <= J Then .Left = 15 ElseIf i <= J * 2 Then .Left = 120 ElseIf i <= J * 3 Then .Left = 225 Else .Left = 325 End If If N = 1 Then .Top = 0 Else .Top = N * 行間隔 - 行間隔 End If .Height = 行間隔 .Caption = "チェックボックス" & i End With Next FMCNT = 0 For i = 1 To 2 CCnt = CCnt + 1 ReDim Preserve ButnCls(1 To CCnt) If i = 1 Then ButtnN = "終了ボタン" Else ButtnN = "実行ボタン" End If Set ButnCls(CCnt).ButnEvent = Me.Controls.Add("Forms.CommandButton.1", ButtnN) If i = 1 Then With Me.Controls(ButtnN) .Caption = "終 了" .Width = 75 .Top = ボタン位置高 .Left = 25 .SetFocus End With Else With Me.Controls(ButtnN) .Caption = "実行処理" .Width = 75 .Top = ボタン位置高 .Left = 実行ボタン位置横 '135 End With End If Next End Sub |
ichinoseさん jakaさんありがとうございます。 ichinoseさん花粉症大丈夫ですか? 私の気持ち先行型のコードなんでわかりにくかったと思います。 ichinoseさんに教えていただいたコードを実際に 97のSR2に貼り付けた所、見事私が考えていたことができました。 おっしゃられた通り再帰処理になっています。 特に理由はなく、ちょっと再帰処理にしてみたかっただけです。 コンピューターに余分な力を使わせてしまうのでしょうか? ループのネストに直します。 修正したものも見ていただきたかったのですが、 今日は内容の仕様変更があったのでそれに追われてしまいました。 正直、すぐに内容を理解して、ぱっと書き直すほど できる人間ではないのです。 すいません。ですので とりあえずお礼にお返事を、と思い先に投稿します。 jakaさんに教えていただいた方も前述の理由で まだ解読できていません。 解読してからまた投稿いたします。 とても拙い問に迅速に回答をいただき感謝しております。 ありがとうございました。 |