• 締切済み

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                      い                           き  実力不足で丸投げの形となってしまい申し訳ありませんが、 よろしくお願い致します。    

みんなの回答

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

何か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)
回答No.1

下記でどうでしょう 取得範囲および項目は実際に合わせて変更のこと -- 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

関連するQ&A

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • excelで指定文字間の繰り返し抽出の方法

    excelの文字列でる特定の文字と文字(この場合、カンマ「,」)の間に存在する 文字だけを抽出する方法が分かりません。 シートAとシートBが存在します。 シートA セルA セルB 売上番号 商品名 0001 A,B,C,D,E 0002 A,B,E 0003 AAA 0004 ブランク=(NULL) 0005 xyz  : シートB セルA セルB 商品番号 商品名 0001 A 0002 B 0003 C 0004 AAA 0005 E 0006 BBB 0007 D  : そこで、シートAのセルBにある商品名が、シートBのセルBの商品名に 存在するかを検索し、すべて存在したらシートAの該当する行のセルC に、”〇”か”×”を設定したい。 関数での方法があればどなたか教えてください。 関数が無理でしたら、マクロ、vbaなどで教えてください。 よろしくお願いします。

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • EXL指定した文字列リストと同一を指定セルに表示

    下記のようなエクセルデータになっています。 表示の関数についてご教授願いますようお願いいたします。 上部の検索条件です(50行くらいあります) A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 下部のフィールドです(数百行あります A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 2     2    2     E     2 表示したい条件 A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 2     2    2     E     2 F列のセルにD列と同じ文字列がある場合、文字列又は”○”で 表示出来たらと思います。 よろしくご教授のほどお願いいたします。

  • 【excel2003 vba】指定した文字列が入力されている「セル範囲」の表示方法?

    ◎Sheet1  A B C D E 1○○○-- 2○○○×× 3---×× 4×○--- ※「-」は空白 上記のようにセルに「○」「×」が入力されている「Sheet1」シートがあります。(例として○×の2種類を使っていますが、本当はもっとたくさんの種類の文字列があります。) vbaを使って、以下の一覧表を「List」シートに作成するコードを作成できませんでしょうか? ◎List  A     B 1○     ×  '文字列の種類 2A1:C2  D2:E3 '文字列の範囲  3B4     A4  '同上 【ToDo】 (1)1行目に文字列(○、×)を入力する (2)1行目に入力してある文字列が入力されているすべての「セル範囲」を2行目以降の各列に抽出する。 **1セル内に「○」「×」の両方が入力されているものもある。**  ⇒例えば、A1セルに「○×」と入力されていたら、「Rist」シートのA列B列の両方に「A1」が抽出されるようにしたい。 1セルごとのセル番地(○:A1,A2,B1,…)を一覧化することはできるのですが、同じ文字列をまとめた「範囲」の抽出ができないのです。 どなたかお力添えをお願いできませんでしょうか? 宜しくお願い致します。

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • VBAで打ち消し線の入った文字を特定する方法

    Excel VBAに関する質問です。 指定したセル範囲の中で、打ち消し線の入った文字が記入されているセルを見つけ、 そのセルの行を削除、上詰めにしたいと考えています。 方法をご教授いただけませんでしょうか。 ※空いているセルはどのように使用してもOKです。 イメージとしては下のようになります。(打:打消し線の入った文字) D列を検索し、打ち消し線の入ったセルを特定 特定したセルの属する行(2、4、5、6)ごと削除し、上詰めにする。  A B C D E F G 1     あ 2     打      …削除、上詰 3     い 4 え   打      …削除、上詰 5  お  打      …削除、上詰 6     打 か    …削除、上詰 7     う マクロ実行後↓↓↓  A B C D E F G 1     あ 2     い 3     う

  • 文字を入力すると違うシートに順番に表記する方法

    ①シート1のセルC5に文字を手動で毎回入力すると、シート2のセルB5から下の列に順番に文字を自動で転送するVBAなどはどの様にすれば宜しいでしょうか? ②シート1のセルC6に文字を手動で毎回入力すると、シート2のセルC5から下の列に順番に文字を自動で転送するVBAはどの様にすれば宜しいでしょうか? ③同じ様な法則でシート1のセルC7に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送、シート1のセルC8に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送とする場合はどの様にすれば宜しいでしょうか? ④シート1のセルC5、C6、C7、C8に文字を手動で入力すると同じシート1の左隣のセルB5、B6、B7、B8に入力した回数を自動で表記する方法はありますか?

  • VBA指定した日付に条件が合えば文字を入れたい

    おはようございます。 すいませんが行き詰りましたので 皆様にご教授お願い致します。 やりたいこと sheet1シート内の情報 B2:CB2セルまで日付が入っています。 (B2には3/1、C2には3/2と連続して日付が入っています。) B3:CB3セルまで空白行が有ります。 B4:CB4セルまでどれかに”平日”という文字が有ります。 sheet2シート内の情報 E4:AI4セルに数字 (E4は1、F4は2・・・AI4は31と順番に数字が入っています。) E5:AI5セルには、空白行が有ります。 この中で もし、sheet1のB2:CB2セルまでの間で3/から始まる文字列が有り B3:CB3セルまでの間で""空白が有り B4:CB4セルまでの間で"平日"という文字が有れば (すべての条件が合えば) E4:AI4の数字に合うセル 例:3/1ならE4セルが1なのでE5セルに”勤務という文字”   3/5ならI4セルが5なのでI5セルに”勤務という文字”   3/31ならAI4セルが31なのでAI5セルに”勤務という文字” を入れていきたいのですが 下記コードでは sheet1のB2セルに3/1があったときのみには sheet2のE5セルに”勤務”という文字が入るのですが 実現したいのは 例えば、sheet1のD2セルに3/1から始まっても E5セルに”勤務”と反映させたいです。 このコードでは、D2セルから3/1、E2セルに3/2という形だと sheet2のG5セルとH5セルに”勤務”と入ってしまいます。 変数kの値をいちいち変更したら 希望通りに動くのですが 出来れば、変数kの値を変更させないように うまくsheet1のB2:CB2のどれかに日付が入っても sheet2のE5:AI5の位置に条件が合えば”勤務”っていう文字を 入れたいです。 何回やってもわからなかったため すいませんがコード記載していただけますと 大変助かります。 回答よろしくお願いします。 Sub test() Dim ws1 As Worksheet Set ws1 = Worksheets("Sheet1") Dim ws2 As Worksheet Set ws2 = Worksheets("Sheet2") For k = 2 To 80 If ws1.Cells(2, k).Value Like "3/*" Then 'もし、(sheet1)シートのB2:CB2セルまでの間で3/から始まる文字列が有れば If ws1.Cells(3, k).Value = "" Then 'もし、B3:CB3セルまでの間で""空白が有れば If ws1.Cells(4, k).Value = "平日" Then 'もし、B4:CB4セルまでの間で"平日"という文字が有れば ws2.Cells(5, k + 3).Value = "勤務" ' End If End If End If Next k End Sub

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。

専門家に質問してみよう