- 締切済み
VBA 異なるファイルを指定して文字を抜き出す
エクセルVBAについてご質問させて頂きます。 お詳しい方、ご教授頂ければ幸いです。 ファイルAを展開中に、別ファイルであるファイルB(ユーザ指定)の特定シートのセル「D2」及び「E2」から下のデータを順番に参照し、条件に合致する列のセル「B2」及び「C2」の文字列を繋げて改行し、 ファイルAの特定シートのセル「E2」から下に順番に貼り付けて行くには、 どのようにすれば良いでしょうか。 例 条件: D2=さ E2=た ・ファイルB(指定) 特定シート A B C D E 1 2 0 あ か さ た 3 0 あ き さ た 4 0 い か さ ち 5 0 い き さ た 6 0 う か し た 7 0 え か し ち 8 0 え か し た ・ファイルA特定シート A B C D E 1 2 あ か 3 あ き 4 い き 実力不足で丸投げの形となってしまい申し訳ありませんが、 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
何かVBAコード化をやってみたのか。何処が行き詰まっている点か、質問には絞って質問すること。質問者の勉強態度としてそれが上達の途と思う。丸投げになっている。 ーー >ファイルAを展開中 VBAモジュールにこのプログラムを書くということになる。 >別ファイルであるファイルB(ユーザ指定)の特定シートのセル 毎回指定するファイル名、シート名は変わるのか。それに対応したいのか。しかし まづ固定で勉強してコードを作ったら。 初心者と上級者が「特定の」という言葉を好むが、勉強には、まずファイル名やシート名を決めて勉強し 全体が動くようになって、相対化(都度指定化)を考えるべきでしょう。 >データを順番に参照し セルの値を取るだけ。全行のD,E列のセルの値を取るコードなど、このコーナーの回答にも毎回出てくるだろう。 For Nextで出来るのでは?。 >条件に合致する列の とは何?条件は何処のある?質問に書いてますか? 検索と表現すると判りやすい。検索文字列は?検索する範囲は? RangeのFindメソッドを使うなど、考えが及んでますか? シートの検索操作で「マクロの記録」でも採ってコードを勉強しましたか? >セル「B2」及び「C2」の文字列を繋げて改行 &でつなげば仕舞い。 なぜセル「B2」及び「C2」の文字列、と固定して第2行目なの?見つかった行のB,C列ではないの? ーー >特定シートのセル「E2」から下に順番に貼り付けて行くには 貼り付けるデータ範囲の最下行を取得し、その+1行(直下行)に書き込めば仕舞い。 最下行の行番号ポインターを変数で持つ手もある。 ==== (1)どのセルの文字列で検索するのか (2)どの範囲を検索対象範囲にするのか (3)行が見つかったらどうするのか。その行のB列&C列をファイルAの最下行に代入するのかな? よく考えないで安易に質問文を書いていると思う少し緻密に考えることが必要。
- o_chi_chi
- ベストアンサー率45% (131/287)
下記でどうでしょう 取得範囲および項目は実際に合わせて変更のこと -- Sub test() Dim strSql As String Dim cnXL As Object Dim rsXL As Object Set cnXL = CreateObject("ADODB.Connection") Set rsXL = CreateObject("ADODB.Recordset") With cnXL .Provider = "MSDASQL" .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;" .Open End With strSql = "select '','','','',B & Chr(13) & Chr(10) & C " _ & " FROM [Sheet1$A1:E8] " _ & " WHERE D = 'さ' and E = 'た' " Debug.Print strSql rsXL.Open strSql, cnXL, adOpenForwardOnly Worksheets("sheet2").Cells(1, 1).CopyFromRecordset rsXL rsXL.Close: Set rsXL = Nothing cnXL.Close: Set cnXL = Nothing End Sub