VBからExcelを起動しています。

Set xlSheet = CreateObject("Excel.Application")
xlSheet.Workbooks.Open FileName:="C:\My Documents\demo.xls"

Excelでの処理が終わった時、Excelを終了させます。

xlSheet.Quit

「Quit」で終わらせているのですが、
どうも「プログラムの強制終了」で見る限り
Excelが残ったままです。
対処策はあるのでしょうか?
教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

EXCELの残骸・・・


確かに残ることがあります。
EXCELに対してのコーディングの仕方により、残ることがあるそうです。
ぼくも経験しました。

Set xlSheet = CreateObject("Excel.Application")
      ・
      ・
      ・
xlSheet.Quit
Set xlSheet = Nothing

の間を修正することにより、回避できるそうなのですが・・・
その時はコードが長くてほとんど完成していた物の修正ということもあり、別の方法で強制的に終了させました。

サンプルは、全てのEXCELを閉じるようになってます。


Sub quitAllExcel()
  Dim strSQL   As String
  Dim objXlsApp  As Object
  Dim lngCnt   As Long
  Dim i      As Long
  
  'エクセルの起動している数を得る
  strSQL = "SELECT Handle FROM Win32_Process WHERE Name = ""EXCEL.EXE"""
  lngCnt = GetObject("winmgmts:").ExecQuery(strSQL).Count
  
  '問い合わせ
  If lngCnt < 1 Then
    MsgBox "EXCELは起動してません"
    GoTo PGMEND
  ElseIf vbCancel = MsgBox(lngCnt & "個の起動中のEXCELをみつけました。全て破棄終了しますか?", vbOKCancel) Then
    GoTo PGMEND
  End If
  
  'エクセル閉じる処理
  For i = 1 To lngCnt
    Set objXlsApp = GetObject(, "Excel.Application")
    On Error GoTo 0

    If Not (objXlsApp Is Nothing) Then
      Call quitExcel(objXlsApp)
      Set objXlsApp = Nothing
    End If
  Next i
PGMEND:
End Sub

'指定のエクセルアプリケーション内で開いているブック全てを「保存済み」状態にして終了させる
Sub quitExcel(inObjXlsApp As Object)
  Dim objXlsBook As Object
  
  For Each objXlsBook In inObjXlsApp.WorkBooks
    objXlsBook.Saved = True
  Next objXlsBook
  inObjXlsApp.Quit
End Sub
    • good
    • 0

Setで作成したObjectにはNothingをセットして消してください。



Set xlSheet = Nothing

この回答への補足

お返事ありがとうございます。

現在、Qutiの後に Nothingも記述しています。
それでも、残骸があるのです。

補足日時:2002/03/08 10:01
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

QCreateObjectで作成したExcelのプロセスを終了させたい。

VBからCreateObjectで作成したExcelのプロセスを終了させたいと考えています。
困っている点として、CreateObjectで作成したときにプロセスIDをどのように取得すれいいのかという点です。
宜しくお願いします。

環境
VB6.0+SP5
Windows2000+SP2
Excel2000

Aベストアンサー

VB5では、これでいいはずです。VB6でも同じでは?!

Dim ExcelObj As Excel.Application
:
:
Set ExcelObj = CreateObject("Excel.Application")
:
:
ExcelObj.ActiveWorkbook.Close (False)
ExcelObj.Quit
Set ExcelObj = Nothing

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qなぜ「Workbook」ではなく「Workbook

なぜ「Workbook」ではなく「Workbooks」なのでしょうか?
エクセルVBAについて教えてください。

ファイルのタイトルバーのところに、文字を入れたくてVBAコードを調べていたら
Workbooks.Application.Caption = "タイトル"
と言うコードが出てきました。

このコードでやりたいことが行えるので問題ないのですが、
なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?

Aベストアンサー

■Application クラス
・EXCEL本体の親ウインドウ側のクラス
・主なプロパティとして
Caption EXCEL本体のタイトルバーの文字列
Visible EXCEL本体を表示/非表示
TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する
Workbooks
EXCEL 本体で開いている ブック(複数)のリスト

■Workbooks クラス
・Workbook クラスのコレクションクラス
・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス
・主なプロパティ、メソッドとして
Add 新たなブックを表示する
Open ブックを開く
Item Workbook を選択する
Application 親元の EXCEL

■Workbook クラス
・Workbook ブックのクラス
・主なプロパティ、メソッドとして
Save ブックを保存する
Application 親元の EXCEL
WorkSheets
 ブック内にあるシート(複数)のリスト

■WorkSheets クラス
・WorkSheet クラスのコレクションクラス
・主なプロパティ、メソッドとして
Add 新たなシートを作成する
Item WorkSheet を選択する
Application 親元の EXCEL

■WorkSheet クラス
・WorkSheet シートのクラス
・主なプロパティ、メソッドとして
Range 各セル単位のクラス
Application 親元の EXCEL



だいたいのEXCELクラスの位置づけ(雰囲気)はこんな感じ

■Application クラス
・EXCEL本体の親ウインドウ側のクラス
・主なプロパティとして
Caption EXCEL本体のタイトルバーの文字列
Visible EXCEL本体を表示/非表示
TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する
Workbooks
EXCEL 本体で開いている ブック(複数)のリスト

■Workbooks クラス
・Workbook クラスのコレクションクラス
・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス
・主なプロパティ、メソッドとして
Add 新たなブックを表示する
Open ブッ...続きを読む

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

QApplication.WorksheetFunction.VLookupがどうしても出来ないです。教えて下さい。

前回も問い合わせさせていただいていますが 少し私の言っている問い合わせと意味合いがちがうのでもう一度投稿させていただきます。

    A      B     C      D
1 15001    15001       A社 本店
2 1500101  15001    01 A社 A店
3 15002   15002       B社 本店
4 1500202    15002 02       B社 B店
上記のようにSheet1があります。
 A列のセルは 式で B & CでSETしています。
ユーザーフォームのTextbox1は得意先コード textbox2は支店コード
textbox3に店名
textbox1とtextbox2を入力してコマンドボタンを押すとtextbox3に店名をsetすると言うことがしたいんですが支店コードの入っている店名はひっぱってくるのですが 支店コードのないものの店名が表示されません。
Private Sub CommandButton1_Click()
On Error GoTo ExitER
Set ADR = Worksheets("sheet1").Range("A1:D4")

TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 & TextBox2, ADR, 4, False)
On Error GoTo 0
Exit Sub
ExitER:
MsgBox "一致するコードがありません"
On Error GoTo 0
End Sub

エラーの部分は前回の質問の時に教えて頂いたものです。

どうしてもわからないのでお分かりの方お教えください。




 

前回も問い合わせさせていただいていますが 少し私の言っている問い合わせと意味合いがちがうのでもう一度投稿させていただきます。

    A      B     C      D
1 15001    15001       A社 本店
2 1500101  15001    01 A社 A店
3 15002   15002       B社 本店
4 1500202    15002 02       B社 B店
上記のようにSheet1があります。
 A列のセルは ...続きを読む

Aベストアンサー

A1に次の式を設定してみてください
=B1&C1
フィルで下方向に
#1さんの回答を適用後は
=VALUE(B1&C1)
に変更してください

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

Q質問2回目になっちゃいます excelのマクロを使って決まった入力データ位置の文字を.......トホホ

入力する場所を決めて、その入力した内容を違う場所にコピーしたいのです 
 このコピーの仕方として、セルC2:M2に入力し 実行ボタン1を選択したら1回目の コピーはC5:M5 2回目はC6:M6 3回目はC7:M7...と順にコピーし

実行ボタン2を選択したら1回目のコピーはC30:M530 2回目はC31:M31 3回目は...と実行1と同じように順にコピーしていきたいのです。

色々本を見たのですが、なかなか理解できず 頭打ちです...
あと似たようなコピーで右移動コピーもしたいのです

           回答まってます  ヨロシクお願いいたします

Aベストアンサー

条件が曖昧すぎます
実行ボタン1を26回選択した場合はC30:M30に上書きするのですか?
実行ボタン1を3回選択、実行ボタン2を3回選択、次に実行ボタン1を選択した場合はC5:M5それともC8:M8?

勝手に決めちゃいます
実行ボタン1は24回以上は選択できない
C5以下C列に入力の無い行を見つけてコピペ
実行ボタン2はC30以下C列に入力の無い行を見つけてコピペ

Sub 実行ボタン1()
Dim rng As Range
Dim i As Integer
Set rng = Range("C5")
For i = 0 To 24
If rng.Offset(i, 0).Value = "" Then
rng.Offset(i, 0).Resize(1, 3).Value = Range("C2:M2").Value
Exit Sub
End If
Next i
End Sub

Sub 実行ボタン2()
If Range("C30").Value = "" Then
Range("C30").Resize(1, 3).Value = Range("C2:M2").Value
Else
Range("C65536").End(xlUp).Offset(1, 0).Resize(1, 3).Value = Range("C2:M2").Value
End If
End Sub

参考まで
あららいけませんね
#1さんのリンク先見ちゃいました
マルチポストはいけません
どちらかを締め切ってください
マナー違反ですよ
回答いただいた方にお礼しないのも
これまたマナー違反ですよ
それでは、おやすみなさい

条件が曖昧すぎます
実行ボタン1を26回選択した場合はC30:M30に上書きするのですか?
実行ボタン1を3回選択、実行ボタン2を3回選択、次に実行ボタン1を選択した場合はC5:M5それともC8:M8?

勝手に決めちゃいます
実行ボタン1は24回以上は選択できない
C5以下C列に入力の無い行を見つけてコピペ
実行ボタン2はC30以下C列に入力の無い行を見つけてコピペ

Sub 実行ボタン1()
Dim rng As Range
Dim i As Integer
Set rng = Range("C5")
For i = 0 To 24
If rng.Offset(i, 0).Value = "" Then
rng.O...続きを読む

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

QExcelが終了終了しない!

またまた困っています。
VBからのExcelファイル操作、たしかに処理上はうまく行っているのですが...
ExcelApp.Quit
Set ExcelApp = Nothing
デバッグしてみても、きちんとメモリ開放されていました。
が、vbFormをCloseせずに同一処理(別Excelファイル)を行うと
『Withブロックが定義されていません』と怒られました(>。<)
Ctl+Alt+Delでプログラム強制終了画面を見ると、何故かそこには、Closeしたはずの『Excel』の文字が...
神様、仏様、ARC様~(頼りにしています、師匠!(笑))

Aベストアンサー

Excelのオブジェクトには階層がいくつかあるので
開放していないオブジェクトが存在しているかも
知れません。(例えばWorkSheetオブジェクトとか。)
ExcelAppオブジェクトだけでなく他に使用している
オブジェクトを開放してあげると良いかも。


人気Q&Aランキング

おすすめ情報