• ベストアンサー

VBAで特定の条件に合致しているデータを抽出する方法

家計簿シート○月.xlsで Sheet1には 列A:収入、列B:支出、列C:(支出/収入)率(%) で、行にはそれぞれの値が入力されています。 具体的には   A   B   C 2 収入 支出  率 3 1000 950  95% 4 500  250  50% 5 2000 4000 200%   :  :  :   ここで、 1:ボタンを押すと    ↓ 2:読み込むファイルを聞いて、ここで   家計簿シート○月.xlsを読み込んで(開いて)    ↓ 3:Sheet1の列Cの値が90%以上の行だけを抜き出して (抽出して)    ↓ 3:それをSheet2に表示する   (2行目の収入、支出、率という文字列も入れて) というプログラムをVBAで組みたいのですが どう組めばいいのかアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 1 sh2.Cells(k, "A") = sh1.Cells(1, "A") sh2.Cells(k, "B") = sh1.Cells(1, "B") sh2.Cells(k, "C") = sh1.Cells(1, "C") k = k + 1 d = sh1.Range("A65536").End(xlUp).Row For i = 2 To d If sh1.Cells(i, "c") >= 0.9 Then sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, "C") = sh1.Cells(i, "C") k = k + 1 End If Next i End Sub

Alma2005
質問者

補足

具体的なコードをありがとうございます。 ついでに表示形式をパーセント表示にしたいので Next iとEnd Subの間に以下のようにコードを付け加えてみましたがここで 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 という実行エラーが出ました。 sh2.Columns("C:C").Selection.NumberFormatLocal = "0%" このような書き方は間違っているのでしょうか?

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#2です。 >ついでに表示形式をパーセント表示にしたいので sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, "C") = sh1.Cells(i, "C") sh2.Cells(K, "C").NumberFormatLocal = "##0.0%" k = k + 1 End If Next i でどうですか。 まとめてやるなら sh2.Range(Cells(1, "C"), Cells(k - 1, "C")).NumberFormatLocal = "##0.0%"

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#2で既にやっておられるようなので ファイルの開き方だけ filename = Application.GetOpenFilename Workbooks.Open Filename:= filename セレクトされている処を%表示にするには Selection.Style = "Percent" でいいみたいですよ。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

家計簿シート○月.xls にいる(ボタンを押せる)のに >家計簿シート○月.xlsを読み込んで とはどういう意味でしょうか? 前月のものを読み込むということ?

Alma2005
質問者

補足

説明不足でした。 集計用ブックがあって、そこにユーザフォームなりでボタンを作って、 そのボタンを押すと、 「ファイルを開く」ダイアログが出て、 そこでファイルを選んで開くと、 自動的にSheet1に家計簿シート○月.xlsの全部が、 Sheet2にこのシートから該当する行だけを抽出したものが それぞれ出力できるようにしたい、という意味です。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

あなたが説明されている手順どおり、コードを書けばOKです。 まずは、マクロの記録からですね。 1:ボタンを押すと =>取りあえず、「マクロを実行する」にしましょう。    ↓ 2:読み込むファイルを聞いて、ここで   家計簿シート○月.xlsを読み込んで(開いて) =>マクロの記録でEXCELファイルを開く作業を記録してみましょう。    ↓ 3:Sheet1の列Cの値が90%以上の行だけを抜き出して 3:それをSheet2に表示する   (2行目の収入、支出、率という文字列も入れて) =>C列の値を調べ、90%以上だったらSheet2に転記します。   あとは最終行まで繰り返し処理です。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

集計用ブックがあり、そこにボタンを作ってマクロを登録し、ボタンを押すと「家計簿シート○月.xls」を開いて必要データを転記したいって感じ? 取りあえずマクロ記録で操作を記録して、必要に応じて可変させたい部分を変数に置き換えて行くと良いです。