• ベストアンサー

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

merlionXXの回答

  • ベストアンサー
  • 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" &」の意味を、お暇な時で構いませんので、教えていただければ幸いです(>_<)

関連する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です。