- 締切済み
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メソッドを使ってするのかなぁと思ってます。 ご協力お願いします。
- 961awaawa
- お礼率85% (391/460)
- Excel(エクセル)
- 回答数9
- ありがとう数8
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- watabe007
- ベストアンサー率62% (476/760)
>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
- watabe007
- ベストアンサー率62% (476/760)
>複数個あるのに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
お礼
お礼が遅くなりました。ありがとうございますWatabe007さん。お陰様でできました。続きがあります。 検索されて取り出された対照データがO:Qのどこから取り出されたか一見して分かりやすいようにするには色を着けたいと思っております。どのようにすればよろしいですか。また、着けられた色が、次の別の参照データで被ったりしないように前の色を消してからにしたいと思います。ご協力お願いします。
- mt2015
- ベストアンサー率49% (258/524)
ANo.1です。 > mt2015さん、ありがとうございました。(B3:D5)を(B3:D3)にして最下行だけをコピペするには何処をどう変えれば良いですか? 「最下行だけ」とはどういう意味でしょうか。 B3:D3と一致するデータが複数個所あった場合、その一番下だけを抽出対象にすると言う意味ですか。
お礼
返事遅くなりました。OPQにはマクロボタンを1度押すと新たなデータが付加されます。その新しいデータはOPQの最下行にあたります。それを、別のマクロボタンを押すと(B3:D3)にコピペがされてそれを参照してデータOPQから在るだけ探してGHIに全てコピペしたいです。
- watabe007
- ベストアンサー率62% (476/760)
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
お礼
返事遅くなりました。このやり方でやってみましたが対照となる物が複数個あるのにG,H,Iに1つだけしか取り出されていません。どうしたらよろしいですかまたスミマセンけどもお願いいたします。
- watabe007
- ベストアンサー率62% (476/760)
>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)
>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
お礼
Watabe007さんありがとうございます。常に新しい抽出データにしたい場合はG,H,Iにある前の抽出データをデリートしてからにしたいんですが、どのようなソースを組み足せばよろしいですか?今のままでは前のデータの下に新しいデータが継ぎ足しされる形になるんです。
- mt2015
- ベストアンサー率49% (258/524)
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
お礼
mt2015さん、ありがとうございました。(B3:D5)を(B3:D3)にして最下行だけをコピペするには何処をどう変えれば良いですか?
- watabe007
- ベストアンサー率62% (476/760)
こんな感じかな? 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
お礼
watabe007さん、いつもありがとうございます。ついでに聞きたいんですが、B3:D5をB3:D3にして最下行を参照にしたい場合は何処をどう変えれば良いですか?
- mt2015
- ベストアンサー率49% (258/524)
具体的な例が無いと良くわかりません。 添付の図の様な事でしょうか?
お礼
まさにこの通りです(T-T)気づいて貰えない心の内を悟ってもらい語って頂けたぐらいに嬉しいです。泣けてきます。
補足
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メソッドを使ってするのかなぁと思ってます。 ご協力お願いします。
- ベストアンサー
- Excel(エクセル)
- 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 と書きましたがエラーになります。どの様すればよろしいですか?お願い致します。
- ベストアンサー
- Excel(エクセル)
- 前回Excel2007で複数のセルを併せて
前にも似たような形で質問しましたが、今回は自分で検索したい形で値を入れたタイプなんです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Fのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)の複数のセルの値を併せて参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し(その検索された1つ下のセルを黄色く色を着けて)、検索された1つ下の値をコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。
- 締切済み
- Excel(エクセル)
- セルの移動量で参照したい。
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(エクセル)
- 【Excel】複数セル参照して別のセルに下から表示
セルの内容を他のシートのセルに表示させたいのですが、ただ表示させるのではなく、複数行複数列(仮にA1、B1~A10、B10とします)を、他のシートの大きめのセル(サイズ変更して10行分が入るようにしてある)に、逆に表示(A10、B10が一番上にA1、B1が一番下に来るように)し、かつ、1行ずつ改行(段落)させたいのです。 できますでしょうか? よろしくお願いします。
- 受付中
- Excel(エクセル)
- エクセル:複数セルからの参照
お世話になります。 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…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。
- 締切済み
- オフィス系ソフト
お礼
watabe007さんいつもありがとうございます。同じ様な内容でまた質問しますのでまた是非ともご協力頂けたら幸いです。仕事や私生活にテンヤワンヤでバイタリティも萎え中々自分の作りたい物に手を着けられずの日々になりがちです