• ベストアンサー

2つのブックの列と列を比較し、一致すれば、片方のブックのA列にある番号を転記したい

いつもお世話になっております。 また、Excelで悩んでしまいまして(>_<) 今、『観光地.xls』というブックのA列には、以下のようなデータが記載されています。 夏井川渓谷 オルチャ渓谷 御岳渓谷 ハラワ渓谷 福知渓谷 イアオ渓谷 チャリン渓谷 ワイメア渓谷 羽山渓谷 ヴァッハウ渓谷 そしてもう一つの、『日本の渓谷.xls』というブックのB列には、 夏井川渓谷 ウェルサンピア京都 御岳渓谷 昭和記念公園レインボープール 福知渓谷 大磯ロングビーチ 羽山渓谷 と、日本の渓谷のデータと日本のプールのデータが混ざって並んでおりまして、隣のA列には、渓谷のデータにのみ、k1,k2・・・と、番号を振っております。プールのデータの隣は、空白になっています。 この状態から、『観光地.xls』のA列と、『日本の渓谷.xls』のB列を比較し、データが一致すれば、『日本の渓谷.xls』の渓谷データのすぐ隣、A列に記載してある番号を、『観光地.xls』のL列に、転記したいのです。 『観光地.xls』のB~K列には、他の観光地のデータがずらりと記載されているので、空白のL列に、『観光地.xls』のA列の日本の渓谷データ(=『日本の渓谷.xls』のB列の渓谷データ)に、対応する番号を付したいのです。 データが膨大ですので、マクロを使うのが最も合理的だと思うのですが、以前、似たような質問↓ http://okwave.jp/qa5015030.html を解決してくださいまして、この時の応用で何とかなる、「一致したら斜線を引くのではなく、同シートのL列に、『日本の渓谷.xls』のA列のデータを転記するよう、指示すればいいのかな」と思い、マクロを書いてみました。 Sub keikoku() ◆変数名の入力ミスによる動作の不具合を防ぐために変数名を宣言。 Dim KeikokuSearch1 As Range, KeikokuSearch2 As Range, k As Range, kk As Range ◆Activateメソッドを実行。 With Workbooks("観光地.xls") .Activate .Sheets("Sheet1").Activate End With ◆Rangeオブジェクトで範囲を選択 With Workbooks("観光地.xls").Sheets("Sheet1") Set KeikokuSearch1 = .Range(.Range("A1"), .Range("A1").End(xlDown)) End With With Workbooks("日本の渓谷.xls").Sheets("Sheet1") Set KeikokuSearch2 = .Range(.Range("B1"), .Range("B1").End(xlDown)) End With ◆For Each...In...Nextステートメントで、データの一致を調べる。 For Each k In KeikokuSearch1 For Each kk In KeikokuSearch2 If k.Value = kk.Value Then ・・・ と、この辺りで立ち往生してしまいました(;_;) If Then~Else~End Ifステートメントで、KeikokuSearch1とKeikokuSearch2のデータが一致すれば、条件を満たす場合の処理として、KeikokuSearch2(『日本の渓谷.xls』のB列)の隣にあるA列のデータを、KeikokuSearch1(『観光地.xls』のA列)から11マス隣のL列にコピーする、という風に指示したいのですが・・・ココから先のコードが、おぼつかない状況です(>_<) やはりマクロは難しいです。皆様のお力をお借りいただければ幸いです。 よろしくお願いします<m(__)m>

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

merlionXXです。 > 何かRangeの中にRangeが入ってて不思議です( ゜д゜) Rangeの中にRangeが入るのはちっとも不思議ではありません。 Range("A1:A10").Select は Range("A1", "A10").Select とも書けます。(ただし Range("A1, A10").Selectだと別な意味になりますので注意) Range(Cells(1, 1), Cells(10, 1)).Select とも書けるし Range(Cells(1, "A"), Cells(10, "A")).Select でも Range(Range("A1"), Range("A10")).Select でもOKなんです。 > 「A:A」みたいにコロンを間に入れて全選択みたいなこと、できないんですかね・・・ End(xlUp)やEnd(xlDown)って、何をするコードかわかります? End(xlUp)はCtrl+↑ End(xlDown)はCtrl+↓で飛ぶ先のセルを取得しているんです。 Rows.Countは全行数ですからエクセル2000や2003 の場合は65536です。(バージョンにより行数が変わるのできめ打ちせず、Rows.Countを使用しています。) つまり、Range("A" & Rows.Count).End(xlUp)) とは、A65536セルからCtrl+↑ で飛んだ先のセルです。 だから、Range(Range("A1"), Range("A" & Rows.Count).End(xlUp))は、A1セルからA列のデータのある最終セルの範囲ということになります。 この場合、Ctrl+↑ で飛ばす基点を定めなければなりませんので、基点となるセルが指定されないRange("A:A").End(xlUp)や、Range("A60000,A1").End(xlUp)という書き方では意味がないのです。 もちろん範囲をRange("A:A")のように列全部を指定することも可能ですが、総当りで検索させたいわけですから、そんな指定をするととんでもない時間をかけて、空白の範囲を無駄な検索をし続けることになります。

dj-s
質問者

お礼

なるほど、すごくわかりやすいです、ありがとうございます! でも一つだけ疑問が残ります、最後に一つだけ、お聞きしてよろしいでしょうか(>_<) .Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)) を、 .Range(Range("A1"), Range("A1" & Rows.Count).End(xlUp)) に書きかえると、うまく動作しませんでした(ToT) もちろん、merlionXXさんの説明のおかげで、意味は把握したつもりです。 .Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)) は、「A1というセルと、A列の全行数(Rows.Count)の内、最も下の行から飛んで(xlUp)最初にデータがあるセル、その2つのセルが繋ぐ範囲を選択する」という意味のコードだと・・・(^_^;) そう考えると、Range("A" & Rows.Count)における「"A"」は、書き換えたマクロがエラーになったことからも、「A1」とは別物みたいだと解釈しました。ただ、Range("A" & Rows.Count)における「"A" &・・・」というコードの書き方に関する説明は、私が持っているマクロの本や、ネットでいろいろ検索してみたのですが、見つかりませんでして・・・この「"A" &」の意味を、お暇な時で構いませんので、教えていただければ幸いです(>_<)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)) > は、「A1というセルと、A列の全行数(Rows.Count)の内、最も下の行から飛んで(xlUp)最初にデータがあるセル、その2つのセルが繋ぐ範囲を選択する」という意味のコードだと・・・ 選択(Select)はしていません。単におっしゃる範囲を指定しただけです。 また、「"A" &」の意味ですが、エクセル2003までならRows.Countは65536行ですから Range("A" & Rows.Count) と Range("A65536")は同じ意味です。 Cells(Rows.Count,"A")と書くことも出来ます。 これでおわかりですね、Range("A1" & Rows.Count)なら、Range("A165536")になってしまい存在しないセル番地です。 ところで、http://Okwave.jp/qa5047671.html はまだ解決していないのですか?

dj-s
質問者

お礼

あっ、なるほど、わかりました! もう一つの質問の方ももちろん、merlionXXさんのおかげで解決しているのですが、イモガシさん流のやり方だけ上手くいかなかったので気になってたのです・・・なんとなく、いろんな方法を知っておいた方がいい気がしまして。でもほんと、いつも丁寧にありがとうございます(^_^;)

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 dj-sさん、大夫進歩しましたね。 さて、ではわたしの書いたコードが指定する範囲と、dj-sさんの範囲とではどこがちがうのか、以下のアドレスを表示させるコードで試してみてください。 .Range("A:A").End(xlUp)では、常にA1セルだけになってしまうと思います。 Sub TEST() With Workbooks("観光地.xls").Sheets("Sheet1") MsgBox "dj-sさんの範囲は、" & .Range("A:A").End(xlUp).Address MsgBox "merlionXXの範囲は、" & .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp)).Address End With End Sub

dj-s
質問者

お礼

ありがたいお言葉です。merlionXXさんのご指導なくしてはここまでこれませんでした! マクロを実行してみたところ、確かに私のは「$A$1」と出たのに、merlionXXさんの方は「$A$1:$A$14」(14行目にポツンとデータを入れてみました)と出てきました! また、コードの一部を、 MsgBox "dj-sさんの範囲は、" & .Range("A1,A60000").End(xlUp).Address と書きかえて実行したところ、これまた「$A$1」になってしまいました・・・ MsgBox "dj-sさんの範囲は、" & .Range("A60000,A1").End(xlUp).Address と書きかえると、「$A$14」は出てきたのですが、これは単一セルですよね(ToT) どうしてですかねぇ、merlionXXさんが書いてくださったコードは、何かRangeの中にRangeが入ってて不思議です( ゜д゜) 「A:A」みたいにコロンを間に入れて全選択みたいなこと、できないんですかね・・・ http://q.hatena.ne.jp/1215786204 ココ↑では、A列を全部選択する際に「A:A」を使用しているのに、「Rangeプロパティとしては使ってはいけないのかな?」と思い、 MsgBox "dj-sさんの範囲は、" & .Range("A:A").Address と、意地でもコロンを使ってデータを全て取得しようと「.End(xlUp)」を取り除いみたのですが、これまた「$A:$A」って出ちゃいました(>_<) 「$A:$A」だと、データがどこにあるのか全く分かりませんよね(笑) はぁ~難しいですねマクロは(^_^;)

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Sub keikoku2() '◆変数名の入力ミスによる動作の不具合を防ぐために変数名を宣言。 Dim KeikokuSearch1 As Range, KeikokuSearch2 As Range, k As Range, kk As Range '◆Rangeオブジェクトで範囲を選択 With Workbooks("観光地.xls").Sheets("Sheet1") Set KeikokuSearch1 = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp)) End With With Workbooks("日本の渓谷.xls").Sheets("Sheet1") Set KeikokuSearch2 = .Range(.Range("B1"), .Range("B" & Rows.Count).End(xlUp)) End With '◆For Each...In...Nextステートメントで、データの一致を調べる。 For Each k In KeikokuSearch1 For Each kk In KeikokuSearch2 If k.Value = kk.Value Then k.Offset(0, 11).Value = kk.Offset(0, -1).Value End If Next kk Next k End Sub ご提示のコードを、データの途中に空白があっても良いように一部を変えました。

dj-s
質問者

お礼

うまくいきました!いつもありがとうございます(>_<) もし、kとkkのデータが一致すれば、kから11列右のL列のデータと、kkから1列左のデータを同じにする、というわけですか~( ゜д゜) merlionXXさんが修正したのもココ↓ http://www.niji.or.jp/home/toru/notes/8.html を読み、なんとなく理解できました、下からセルを選択しないと、最終行がどこにあるのかわからないんですね(^_^;) ただ、Rangeオブジェクトがどうも理解できないのですが・・・A列とB列の全部を選択するのなら、 Set KeikokuSearch1 = .Range("A:A").End(xlUp) Set KeikokuSearch2 = .Range("B:B").End(xlUp) でも大丈夫だと思って、書き換えた後に試してみたところ・・・何も起きませんでした(ToT) オブジェクト.Range(セル範囲) または オブジェクト.Range(開始セル, 終了セル) ですよね?オブジェクトは省略できるらしいのでいいとして、なぜmerlionXXさんの .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp)) .Range(.Range("B1"), .Range("B" & Rows.Count).End(xlUp)) はうまく作動するのに、私が書きかえた方はダメなのでしょうか? すいません、お暇な時で構いませんので、ご回答いただきたいです。 よろしくお願いします<m(__)m>

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Offsetプロパティ http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html#offset kk.Offset( , -1).Copy k.Offset( ,11) と言う感じではないかと。

dj-s
質問者

お礼

そうですよね、知りませんでした・・・ありがとうございます(^_^;)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 別ブック間のすべてのシートのある列を比較

    こんにちは、 エクセルvba超初心者で修行中のものです。 別ブック間のすべてのシートのある列を比較し、同じ値に色を付けるというマクロを 作りたいのですが、 下記のようにシートを限定する→With Workbooks("マクロ1.xls").Sheets("Sheet1") とうまくいくのですが、それぞれのブックのすべてのシートに対して比較をしたいので With Workbooks("マクロ1.xls").worksheets と書くと コンパイルエラー、メソッドまたはデータメンバーが見つかりません と出てきてSet search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) このなかの左から二つ目のRangeの色が反転します。 vba に関する勉強不足は重々承知しておりますが、意味が理解できません。 どうすれば、シート全体を検索できるようになるのでしょうか? ぜひお力をお貸しください よろしくお願いいたします。 Sub search() Dim search1 As Range, search2 As Range, s As Range, ss As Range With Workbooks("マクロ1.xls").Sheets("Sheet1") Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) End With With Workbooks("まくろ2.xls").Sheets("Sheet1") Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp)) End With For Each s In search1 For Each ss In search2 If s.Value = ss.Value Then s.Interior.ColorIndex = 6 ss.Interior.ColorIndex = 6 End If Next ss Next s End Sub

  • 2つのものが一致時に転記するマクロ

    いつもお世話になります。 ここのサイトで 2つのブックでIDが一致したら 横にある文字を転記するというマクロがあるのですが 同じIDが続いても転記先のエクセルに全て転記したいと質問させて頂き そのマクロを使わせて頂いたのですが IDと時間を一致したものを転記させなければいけなくなりました A列の時間とB列のIDを一致したときに 大元に転記させるのは、変数で2つの項目を設定して 確認させればいいのかと思っていましたが上手くいきません 更に、データ量が多いので マクロを動かすたびに応答なしになるので コードをfindから別なコードを変えたほうがよろしいのでしょうか? 下記にマクロのコードと構成と画像を記述させて頂きます お手数ですがご教授して頂けないでしょうか? 恐縮ですがよろしくお願いいたします。 Sub 転記改造()   Dim w0 As Worksheet, w1 As Worksheet   Dim h As Range, Target As Range Dim i As Range, Target1 As Range   Dim FirstAddress As String   Set w0 = Workbooks("IDデータ.xls").Worksheets(1)   Set w1 = Workbooks("ID管理票.xls").Worksheets(1)   For Each h In w0.Range("A2:A" & w0.Range("A65536").End(xlUp).Row) For Each i In w0.Range("B2:B" & w0.Range("A65536").End(xlUp).Row)     If h.Offset(, 1).Value = "確認" Then       Set Target = w1.Range("D11:D60000").Find(what:=h.Value, LookIn:=xlValues, lookat:=xlWhole)       If Not Target Is Nothing Then         FirstAddress = Target.Address         Do           If Target.Offset(, -1).Value = "" Then             Target.Offset(, -1) = "確認"             Exit Do           Else             Set Target = w1.Range("D11:D60000").FindNext(Target)           End If         Loop While FirstAddress <> Target.Address       End If     End If   Next   next End Sub

  • 比較したいセルの文字列が一致したら"一致"

    いい案が思い浮かばないため皆さんのお知恵をお貸しください。 下はエクセルと思ってください    A列             B列 1  2009/01/07/22:55   2009/01/07/22:56 2  テスト1           テスト1 3  テスト2           テスト2 4  テスト3            テスト3 5  テスト4           テスト6 とこのようなシートがあります。 セルA1とB1は時間のため可変で比較対照としたくありません それ以外のA列とB列がすべて一致したとき一致 不一致があればセルA5が不一致とmsgboxで出したいと考えております。 まだ思案中で途中なのですが Sub test() Dim i As Integer i = 1 Do While Cells(i, 1) <> "" If Cells(i, 1) = Cells(i, 2) Then MsgBox "一致" i = i + 1 ElseIf Cells(i, 1) <> Cells(i, 2) Then MsgBox "不一致" i = i + 1 End If Loop End Sub いまはまだこの程度のレベルです 宜しくお願いします。

  • EXCEL:形式が違う別bookへの転記

    マクロほぼ初心者のため、形式が違う別Bookへの転記について悩んでいます。 どなたかご教示いただけないでしょうか。よろしくお願いいたします。 (詳細) (1)売上実績表.xls の「比較」シート     A      C     D      E     F      G      H 1 商品No.                4月              5月 2      .  2009   2010    2011   2009   2010     2011 3  100     0    1000      800      0    1200   4  101     0      0      0     0      0 5  102     800   2050    4000   500    3000 6  103 (2)売上計画表.xls の「2011」シート     C     D      E       F     G  ・・・ 1  商品No.   4月     5月    6月 2   100      800    1000   1000 3   102     4000    5000    5000 4   107     1200    500     500               (1)の2011の列に毎月実績を入力していきます。 それを(2)に転記(上書き)させたいのですが、 (1)と(2)の形式が違うためうまくできません。 今考えているのは inputboxで月を指定して、 たとえば「4月」と入力すれば (2)のC列の商品No.と(1)のA列の商品No.をみて、 (1)E列の値を(2)D列に転記させ 「5月」と入力すれば (1)H列の値を (2)E列に転記させたいのですが・・・ 恥ずかしながら、下記のように列を指定して転記させる レベルでストップして、困っています・・・ Sub 転記() Dim LastRow As Long With Workbooks("売上実績表.xls").Sheets("比較") LastRow = .Range("D65536").End(xlUp).Row Workbooks("売上計画表.xls").Sheets("2011").Range("D2:D" & LastRow).Value = .Range("E3:E" & LastRow).Value End With End Sub どうかよろしくお願いいたします。

  • 2つのブックで、1レコードの3列の値が同じ行のセル選択するには?

    2つのブックで、1レコードの3列の値が同じ行のセル選択するには? Windows XP Home Edition Office XP Personal 2002 Excel 2002 画像のように、 左.xls のB5(赤色セル)を選択したら  右.xls のB10(B9ではありません)を選択させたいのですが、 うまく行きません。 左右のブックの赤色セルの各行番号は同じではありません。 1レコードの「 B列 と C列 と D列 」の「3列の値が同じ行のセル」を選択したいのです。 この行は、必ず1つしかありません。 しかし「 B列 と C列 」「 B列 と D列 」などの「2列の値が同じ行のセル」は複数あります。 また、 左.xls のB6(青色セル)を選択した場合は、  右.xls のB12(B11ではありません)を選択させたいのです。 B列( 日付、実際には西暦 2010/05/05 です )だけは、全く同じデータとなっております。 ●2つのブックを左右に並べて、  同じ行データを閲覧したいわけでございます。 下記コードは、B列だけしか参照できません。 ややこしくて、恐れ入りますが、 何卒、ご教示のほどをお願い致します。 Sub TEST() Const wBook = "右.xls" '表示させたいBook名 Const wSht = "Sheet1" '表示させたいSheet名 Dim Target As Range Dim TargetVa As Integer TargetVa = ActiveWindow.ActiveCell.Value With Workbooks(wBook).Sheets(wSht)   For Each Target In .Range("B1", .Range("B65536").End(xlUp))    If Target.Value = TargetVa Then     Workbooks(wBook).Activate     Sheets(wSht).Activate     Target.Cells.Select    End If   Next Target  End With End Sub

  • 列に並んだ数字群から一致する数字の行番号を抽出

    下記のように B列に数字が縦に並んでいます。 28.11684736 28.12102177 28.12519803 28.12937616 28.13355614 28.13773798 28.14192168 28.14610723 28.15029464 28.15448391 28.15867503 28.16286801 28.16706285 28.17125955 28.1754581 この数字群から、例えば 28.15448391 に一致する数字の行を見つけて その行番号を抽出するコードはどのように記述したらよいのでしょうか。 番号はA1のセルに置きます。 但し、条件があって Excel2000~Excel2003の全てのバージョンに共通する こと。そして列のデータ数が約10000程度はあることです。どこから 手をつけてよいのか判らないので、よろしくお願いします。 簡単な例では下記でもよさそうですが。より早く求めるには???  A= Range("B65536").End(xlUp).Row I=0 Do I=I+1 Loop until Cells(I,2).value=28.15448391  Range("A1")=I

  • A列とB列の数字が一致しているか調べたい

    エクセルで、A列・B列の数字が一致しているか調べる方法(関数?)を教えてください。 もし一致していなければ(A列にあってB列にない、もしくはその逆)、 何らかの手段で一致していない数字をわかるようにしたいのですが 可能でしょうか? A列 B列 ------------------ 1   6 2   5 3   4 4   7 5   9 6   6

  • 完全に一致する文字列を検索するマクロ文

    For Each rng In Range("B1:B21200") If rng.Value <> "" Then Set out = Range("A1:A2100").Find(rng.Value) If Not out Is Nothing Then igo = out.Address End If Do While Not out Is Nothing out.Font.ColorIndex = 3 Set out = Range("A1:A2100").FindNext(out) If igo = out.Address Then Exit Do End If Loop End If Next このマクロはRange("B1:B21200")でRange("A1:A2100")を検索し一致する文字列を赤文字(A列の文字)にするのですが このマクロだと、あいまいな検索になってしまいます。 完全に一致する文字列のみ赤文字にするマクロ文を知りたいのですが。

  • 2つブック 条件転記と分岐の方法

    以前に2つのブックを条件で転記させるマクロのアドバイスを頂き 活用させていただいておりましたが 票の形式が変わってしまって、新規,変更,廃止という文言がなくなって日付だけで 判別する形式になってしまって現在、修正しております。 大変恐縮ですが、CASEで分岐させるときの書き方を色々と調べておりますが 分岐させる条件の書き方を色々とやってみましたが上手く動きませんでした・・・ ご教授願えないでしょうか? 下記に構成と概要と 以前にアドバイスを頂いたコードを記述させて頂きます。 IDデータ表.xls    A列         B列    1  ID番号      日付 2  110001241    10/4 3  120000065    10/5 4  190000036    10/6 5 190000088    取消 ID管理票.xls 110001241 ,9/1 120000065 9/9 190000036 9/9 190000088 11/11 IDの場所はバラバラですが日付は必ずIDの横3つのどれかに記述されています。 以前にアドバイスを頂いたマクロは 新規,廃止,変更で offsetでIDの横3つの場所を指定して日付を記述する形式でしたが 新規,廃止,変更の文言がデータから、なくなってしまったので IDデータ表.xlsとID管理票.xlsのIDが一致して 尚且つそのIDの横3つのセルに日付が入ってるものを上書き 空白のセルは無視する IDデータ表のB列に取消と入っていたら ID管理票と合致したIDとその横3つの日付をクリアする。 Sub 転記() Dim w0 As Worksheet, w1 As Worksheet Dim h As Range, Target As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For Each h In w0.Range("A2:A" & w0.Range("A65536").End(xlUp).Row) Set Target = w1.Cells.Find(what:=h.Value, LookIn:=xlValues, lookat:=xlWhole) If Not Target Is Nothing Then Select Case h.Offset(0, 1).Value Case "新規" Target.Offset(0, 1) = h.Offset(0, 2).Value Case "変更" Target.Offset(0, 2) = h.Offset(0, 2).Value Case "廃止" Target.Offset(0, 3) = h.Offset(0, 2).Value Case Else 'do nothing End Select End If Next End Sub CASEで分岐させれば可能だと助言を頂きましたが如何せん 上手く記述できないのでご教授願えないでしょうか? 申し訳ありませんがよろしくお願いいたします

  • エクセルで完全に一致した列のみ抽出する

    先週と今週のデータ変更を比較し、変更があった場合、先週と今週のデータ両方とも抽出する、というVBAを書いています。  手順としては、 1.sheet"先週"とsheet"今週"のセルをひとつひとつ比較して、違った場合に色づけをする。 2.sheet"差分"に先週、今週両方のデータをコピペする。 3.IDが2ずつある状態で、IDごとにオートフィルタをかけ、B2とB3,C2とC3、、以下Z2とZ3まで上下で比較し、完全に一致だったら、AA列に"重複"と入力する。  最後の列まで行ったら、再度オートフィルタをかけなおし、AA列の"重複"のみ削除する。 というものです。 3の部分は以下のように書きました。 With Worksheets("差分") .Range("A:Z").AutoFilter Field:=1, Criteria1:="1" If Range("B2").value = Range("B3") Then .Range("AA2").Value ="重複" .Range("AA3").Value ="重複" Else .Range("AA2").Value =xlNone .Range("AA3").Value =xlNone .AutoFilterMode = False .Range("A:Z").AutoFilter Field:=27, Criteria1:="重複" .autofilter.range.offset(1).delete shift:=xlshiftup   End With 上記の最初の抽出条件を1~100(増える予定)、 B2,B3,AA2,AA3を抽出条件によって変更したいのですが、 どうしたらいいのでしょうか。 ためしに "B2"と"B3"を、Range(cells(2,2)), Range(cells(3,2))にしたら変更しやすいかと思いましたが、これだと1004エラーとなってしまいました。 最初の抽出条件は 抽出条件をiとし,For i = 1 to 100 という風に書いていますが、比較セルへの変更方法がわからずとまっています。 いい方法を教えてください。 ちなみにexcel 2000です。

専門家に質問してみよう