• 締切済み

Excel2007で複数のセルを併せて参照して

Excel2007で複数のセルを併せて参照してデータを抽出したいんですがやり方がわかりません。ここから質問になります。 セルO4,P4,Q4から下に向かって各セルにア、イ、ウ、エ、オのいずれかが(今のところ)セルO50、P50、Q50までデータとして入ってます。マクロボタンを押すと一行ずつデータが追加されます。 B3からD5に格子を用意しました。B3:D5にデータO,P,Qの最下行から2行上までをまとめてコピペします。コピペされたそれらを併せて参照してデータO4:Q48(今のところO50:Q50が最下行なのと2行上までがコピー範囲なのでQ48としました)から探してその1つ下の3列データ(O?,P?,Q?)をG3、H3、I3、から下に向かって抽出したいです。 私的にはUnionメソッドを使ってするのかなぁと思ってます。 ご協力お願いします。

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.9

>O:Qのどこから取り出されたか一見して分かりやすいようにするには色を着けたいと思っております。 Sub Test5()   Dim LastO As Long, LastG As Long   Dim i As Long, str As String   'G3:I* 範囲をクリア   Range("G3", Cells(Rows.Count, "I").End(xlUp)).ClearContents   LastO = Cells(Rows.Count, "O").End(xlUp).Row   '前回 O:Q列、塗りつぶしなしに   Range("O3:Q" & LastO).Interior.Color = xlNone   Range("B3:D3").Value = Cells(LastO, "O").Resize(, 3).Value   str = Range("B3").Value & Range("C3").Value & Range("D3").Value   For i = 3 To LastO - 1     If str = Cells(i, "O").Value & Cells(i, "P").Value & Cells(i, "Q").Value Then       LastG = Cells(Rows.Count, "G").End(xlUp).Row + 1       If LastG < 3 Then LastG = 3       Cells(LastG, "G").Resize(, 3).Value = Cells(i + 1, "O").Resize(, 3).Value       Cells(i + 1, "O").Resize(, 3).Interior.Color = vbYellow     End If   Next End Sub

961awaawa
質問者

お礼

watabe007さんいつもありがとうございます。同じ様な内容でまた質問しますのでまた是非ともご協力頂けたら幸いです。仕事や私生活にテンヤワンヤでバイタリティも萎え中々自分の作りたい物に手を着けられずの日々になりがちです

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.8

>複数個あるのにG,H,Iに1つだけしか取り出されていません。 G3から下に継ぎ足すのですね Sub Test4() Dim LastO As Long, LastG As Long Dim i As Long, str As String 'G3:I* 範囲をクリア Range("G3", Cells(Rows.Count, "I").End(xlUp)).ClearContents LastO = Cells(Rows.Count, "O").End(xlUp).Row Range("B3:D3").Value = Cells(LastO, "O").Resize(, 3).Value str = Range("B3").Value & Range("C3").Value & Range("D3").Value For i = 3 To LastO   If str = Cells(i, "O").Value & Cells(i, "P").Value & Cells(i, "Q").Value Then     LastG = Cells(Rows.Count, "G").End(xlUp).Row + 1     If LastG < 3 Then LastG = 3     Cells(LastG, "G").Resize(, 3).Value = Cells(i + 1, "O").Resize(, 3).Value   End If Next End Sub

961awaawa
質問者

お礼

お礼が遅くなりました。ありがとうございますWatabe007さん。お陰様でできました。続きがあります。 検索されて取り出された対照データがO:Qのどこから取り出されたか一見して分かりやすいようにするには色を着けたいと思っております。どのようにすればよろしいですか。また、着けられた色が、次の別の参照データで被ったりしないように前の色を消してからにしたいと思います。ご協力お願いします。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.7

ANo.1です。 > mt2015さん、ありがとうございました。(B3:D5)を(B3:D3)にして最下行だけをコピペするには何処をどう変えれば良いですか? 「最下行だけ」とはどういう意味でしょうか。 B3:D3と一致するデータが複数個所あった場合、その一番下だけを抽出対象にすると言う意味ですか。

961awaawa
質問者

お礼

返事遅くなりました。OPQにはマクロボタンを1度押すと新たなデータが付加されます。その新しいデータはOPQの最下行にあたります。それを、別のマクロボタンを押すと(B3:D3)にコピペがされてそれを参照してデータOPQから在るだけ探してGHIに全てコピペしたいです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

Sub Test3()   Dim LastRow As Long, i As Long, j As Long   Dim flg As Boolean   LastRow = Cells(Rows.Count, "O").End(xlUp).Row   Range("B3:D3").Value = Cells(LastRow, "O").Resize(, 3).Value   For i = 3 To LastRow     For j = 1 To 3       If Range("B3:D3").Item(j) <> Cells(i, "O").Resize(, 3).Item(j) Then flg = True     Next     If flg = False Then Exit For     flg = False   Next   'G3:I3範囲をクリア   Range("G3:I3").ClearContents   Range("G3:I3").Value = Cells(i + 1, "O").Resize(, 3).Value End Sub

961awaawa
質問者

お礼

返事遅くなりました。このやり方でやってみましたが対照となる物が複数個あるのにG,H,Iに1つだけしか取り出されていません。どうしたらよろしいですかまたスミマセンけどもお願いいたします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>G,H,Iにある前の抽出データをデリートしてからにしたいんですが、 ならG3:I3を固定にしてデータを入れます。   If Cells(i, "O").Offset(1).Value <> "" Then     Range("G3:I3").Value = Cells(i + 1, "O").Resize(, 3).Value   End If End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>B3:D5をB3:D3にして最下行を参照にしたい場合は と言うことは転記も抽出も1行で良いのかな Sub Test2()   Dim LastRow As Long, i As Long, j As Long   Dim flg As Boolean   LastRow = Cells(Rows.Count, "O").End(xlUp).Row   Range("B3:D3").Value = Cells(LastRow, "O").Resize(, 3).Value   For i = 3 To LastRow     For j = 1 To 3       If Range("B3:D3").Item(j) <> Cells(i, "O").Resize(, 3).Item(j) Then flg = True     Next     If flg = False Then Exit For     flg = False   Next   If Cells(i, "O").Offset(1).Value <> "" Then     LastRow = Cells(Rows.Count, "G").End(xlUp).Row + 1     LastRow < 3 Then LastRow = 3     Cells(LastRow, "G").Resize(, 3).Value = Cells(i + 1, "O").Resize(, 3).Value   End If End Sub

961awaawa
質問者

お礼

Watabe007さんありがとうございます。常に新しい抽出データにしたい場合はG,H,Iにある前の抽出データをデリートしてからにしたいんですが、どのようなソースを組み足せばよろしいですか?今のままでは前のデータの下に新しいデータが継ぎ足しされる形になるんです。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

ANo.1です。 やっている事はNo.2の回答とほぼ同じですが、3×3のセル範囲をfunctionのサブルーチンで文字列化し、文字列同士を比較しています。 Sub Sample()   '最終データをB3:D5に   nLastRow = Range("O4").SpecialCells(xlCellTypeLastCell).Row - 2   Range("B3:D5").Value = Cells(nLastRow, 15).Resize(3, 3).Value      sTarget = fDataString(Range("B3:D5")) 'セル範囲を1つの文字列にする      nWriteRow = 3   For i = 4 To nLastRow     sCheck = fDataString(Cells(i, 15).Resize(3, 3))     '文字列にしたセル範囲同士を比較     If StrComp(sTarget, sCheck) = 0 Then       Cells(nWriteRow, 7).Resize(, 3).Value = Cells(i + 3, 15).Resize(, 3).Value       nWriteRow = nWriteRow + 1     End If   Next i End Sub Function fDataString(rRange As Range) As String   'セル範囲の値を1つの文字列にして返す   Dim r As Range   fDataString = ""   For Each r In rRange     fDataString = fDataString & r.Text & "/" '「/」は区切り文字   Next End Function

961awaawa
質問者

お礼

mt2015さん、ありがとうございました。(B3:D5)を(B3:D3)にして最下行だけをコピペするには何処をどう変えれば良いですか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

こんな感じかな? Sub Test()   Dim LastRow As Long, i As Long, j As Long   Dim flg As Boolean   LastRow = Cells(Rows.Count, "O").End(xlUp).Row - 2   Range("B3:D5").Value = Cells(LastRow, "O").Resize(3, 3).Value   For i = 3 To LastRow     For j = 1 To 9       If Range("B3:D5").Item(j) <> Cells(i, "O").Resize(3, 3).Item(j) Then flg = True     Next     If flg = False Then Exit For     flg = False   Next   If Cells(i, "O").Offset(3).Value <> "" Then     LastRow = Cells(Rows.Count, "G").End(xlUp).Row + 1     If LastRow < 3 Then LastRow = 3     Cells(LastRow, "G").Resize(, 3).Value = Cells(i + 3, "O").Resize(, 3).Value   End If End Sub

961awaawa
質問者

お礼

watabe007さん、いつもありがとうございます。ついでに聞きたいんですが、B3:D5をB3:D3にして最下行を参照にしたい場合は何処をどう変えれば良いですか?

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

具体的な例が無いと良くわかりません。 添付の図の様な事でしょうか?

961awaawa
質問者

お礼

まさにこの通りです(T-T)気づいて貰えない心の内を悟ってもらい語って頂けたぐらいに嬉しいです。泣けてきます。

961awaawa
質問者

補足

VBAで教えて頂けますか?

関連するQ&A

  • Excel2007で複数のセル参照してを

    Excel2007で複数のセルを参照してデータを抽出したいんですがやり方がわかりません。ここから質問になります。 セルO4,P4,Q4から下に向かって各セルにア、イ、ウ、エ、オのいずれかが(今のところ)セルO50、P50、Q50まで入ってますが追加されていきます。 B3からD5に格子を用意しました。B3:D5をまとめて参照してデータO4:Q50から探してその1つ下の3列データ(O?,P?,Q?)をG3、H3、I3、から下に向かって抽出したいです。 私的にはUnionメソッドを使ってするのかなぁと思ってます。 ご協力お願いします。

  • Excel2007で最下行のコピーについて

    Excel2007で最下行のコピーについてなんですが、上手くいきません。そこで質問させて頂きます。 sheet3のセルO6、セルP6、セルQ6から下に向かって5000行目までに格子と関数が既に入ってます。 が、しかしコピーをしたい数値は今のところはO、P、Qの6行目にとどまっています。なので最下行はセルOPQの6行目になります。 sheet3のセルOPQの最下行数値をsheet4のセルABCの2行目にコピぺしたいです。 そこで作ってみました。基軸と言いますかsheet1を選択してから標準モジュールに Sub test() Worksheets("sheet3").Select Dim n As Long,t As Long n = Cells(Rows.Count,"O").End(xlUp).Row + 1 t = Cells(Rows.Count,"Q").End(xlUp).Row + 1 Range("O" & n, "Q" & t).Value.Select Selection = Worksheets("sheet4").Range("A2:C2").Value End Sub と書きましたがエラーになります。どの様すればよろしいですか?お願い致します。

  • 前回Excel2007で複数のセルを併せて

    前にも似たような形で質問しましたが、今回は自分で検索したい形で値を入れたタイプなんです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Fのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)の複数のセルの値を併せて参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し(その検索された1つ下のセルを黄色く色を着けて)、検索された1つ下の値をコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

  • セルの移動量で参照したい。

     A  B C D 1  あ い う え 2 お か き く 3 け こ さ し 上のような位置関係のデータを   A  B C D  E F  G H I  J K L 1 あ い う え お か き く け こ さ し このように変換したいのですが、 E1やI1は左となりのセルが参照しているデータの1行下で3列左のセルを参照するようにしたいのです。 よろしくお願いします。

  • エクセルでのセルの参照

    sheet1にデータが入力されています。 そしてsheet2ではそのsheet1に入っているデータを 抽出するsheetとして使用しています。 そこで、sheet2にある一つのセルに3と入力したら sheet1で使用しているA3、B3、C3、D3・・・ のセルのデータを、 4と入力したら A4、B4、C4、D4・・・ のセルのデータをsheet2のそれぞれのセルに引っぱってこれるように 関数を書きたいと考えています。 INDIRECTが機能的に近いのかなと考え、式を試してみたのですが なかなかうまくいきません。 また、4と入力したときにA5、B5、C5、D5を参照するというように 数値をいじったりできるであればそれも教えていただきたいです。 よろしくお願いいたします。

  • Excelセルの参照

    Excelにdataとnという2シートがあります。dataシートのA列3行目~22行目にデータが縦入力されており、以降B列、C列とデータ入力が繰り返されます。 nシートでdataシートの入力値参照のため、あらかじめdataシートの参照リンクを貼っておきたいのですが、nシートのデータは横並びであるせいか、参照リンクをうまくコピーすることができません。 dataセルのA3セルの値をnシートのD1に=data!A3と貼り付けて、W1(=data!A22)まで数式を自動コピーできないでしょうか。また、D2~W2まで=data!B3~=data!B22など参照リンクをコピーで作成できないでしょうか。 よろしくお願いいたします。 横並びに参照する必要があるのですが、

  • 【Excel】複数セル参照して別のセルに下から表示

    セルの内容を他のシートのセルに表示させたいのですが、ただ表示させるのではなく、複数行複数列(仮にA1、B1~A10、B10とします)を、他のシートの大きめのセル(サイズ変更して10行分が入るようにしてある)に、逆に表示(A10、B10が一番上にA1、B1が一番下に来るように)し、かつ、1行ずつ改行(段落)させたいのです。 できますでしょうか? よろしくお願いします。

  • エクセル:複数セルからの参照

    お世話になります。 A,B,C列にデータが入っています。 D,E,F列に参照のためのデータがあります。 A,B,C列はそれぞれD,E,F列に対応しています。 A,B,C列と同じ並びのデータが入っている行をD,E,F列から探し、その隣のG列の値をH列に返す。 D,E,F列の並びが重複する行はありません。 A,D列は場所の名前、B,C,E,F列には数字が入っている。 例) A1に事務室 B1に20 C1に3 が入っているとする。 D/E/F列が 事務室/20/3 の並びになっているのが10行目の場合、H1にG10のセルの値を返す。 この場合、H列にはどんな計算式を入れておけばよいのでしょうか? A,B,C列と同じ並びのデータがD,E,F列で見つからない場合は空白をH列に返す。 ちなみにD/E/F列が 事務室/20/3 の並びになっている行は10行目しかないです。 よろしくお願いします。

  • LOOKUP?複数のセルを参照?

    「複数のセルの値と一致する場合」という条件で抽出する関数はありますか?例えば A1&B1&C1 = A10&B10&C10 → D1にD10を抽出 よろしくお願いします!

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

専門家に質問してみよう