[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『解説してください』(素人)
こちらで見つけたマクロを流用したいと思いましたが、素人のため何となくしか
内容が読み取れず、どこを変更していいかがいまいちわかりません。
解説を付けていただけませんか?('先週データ範囲など、どの部分がどう動くか的な)
流用したいマクロは[[20110104170754]]です。
Sub test() Dim myRng1 As Range, myRng2 As Range Dim tbl1 As Variant, tbl2 As Variant Dim i As Long, j As Long, myRow As Long
Set myRng1 = Worksheets("Sheet1").Range("A1").CurrentRegion '先週データ範囲 Set myRng2 = Worksheets("Sheet2").Range("A1").CurrentRegion '今週データ範囲
tbl1 = myRng1.Value tbl2 = myRng2.Value For i = 1 To UBound(tbl2) myRow = 0 On Error Resume Next With Application.WorksheetFunction myRow = .Match(tbl2(i, 4), .Index(tbl1, 0, 4), 0) End With On Error GoTo 0 If myRow = 0 Then myRng2.Rows(i).Interior.ColorIndex = 8 Else For j = 1 To 26 If tbl1(myRow, j) <> tbl2(i, j) Then myRng2.Cells(i, j).Interior.ColorIndex = 6 End If Next j End If Next i End Sub
< 使用 Excel:unknown、使用 OS:unknown >
ざっと見た感じ二つのシートのA:Zの範囲を比較して違っている部分に色をつけている ようですけれど、何を変更したいのかを説明してください。
そうでないとどこを説明してよいかがわかりませんので。 (Mook) 2014/06/10(火) 19:37
Eファイルに上記のマクロをセットし、マッチングができるのであれば
BファイルとCファイルのB列でマッチングをし、一致したら行を見に行く
ようにし、違うところは色付けをする。
Aフォルダ
├Bファイル・Cファイル
Dフォルダ
├Eファイル
(素人) 2014/06/11(水) 11:32
これはまたずいぶんと飛躍しましたね。
>こちらで見つけたマクロを流用したいと思いましたが というレベルの変更ではないように思います。
マッチングの内容が不明瞭ですが、単にあるか無いかの比較であれば、作業列をおき COUNTIF 等で対応シートでの有無を確認するくらいが手っ取り早いと思います。
懐かしいmomoさんの回答だったのでコメントしましたが、別の案件になりそうなので マクロでの実現を希望する場合は他の方の回答をお待ちください。
個人的な感想なので強制でも何でもありませんが、 ニックネームは匿名ではない名前が良いかと思います。 (Mook) 2014/06/11(水) 13:06
二つのブックが決まっているなら 単純に Set myRng1 = Worksheets("Sheet1").Range("A1").CurrentRegion '先週データ範囲 の所でブック名も含めた範囲を指定してはどうでしょう?
今はブック名が省略されているので、アクティブブックの Sheet1とSheet2の範囲になっています。 (HANA) 2014/06/12(木) 11:54
Aフォルダ
├Bファイル・Cファイル
Dフォルダ
├Eファイル
(素人) 2014/06/12(木) 17:00
Eファイルに二つのシートをコピーできたなら 後は 過去ログのコードから マッチングの列番号を変更するだけですよね?
myRow = .Match(tbl2(i, 4), .Index(tbl1, 0, 4), 0) この部分で、4列目・・・D列・・・でマッチングしてますが B列であれば 二ヶ所の「4」を「2」に変更で出来ませんか?
それから For j = 1 To 26 で、26列目・・・Z列・・・まで照合を行っていますが 表が26列目までない場合は、この部分も適宜変更して下さい。
また、Mookさんが書いておられますが >個人的な感想なので強制でも何でもありませんが、 >ニックネームは匿名ではない名前が良いかと思います。 私もその様に思います。
この手の掲示板には (素人)さんはたくさんおられますので。 (HANA) 2014/06/12(木) 17:19
この部分を変更してみました。
>myRow = .Match(tbl2(i, 4), .Index(tbl1, 0, 4), 0)
> For j = 1 To 26
この部分でエラーになってしまいます。
>For i = 1 To UBound(tbl2)
型が一致しませんとなってしまいます
(素人) 2014/06/12(木) 17:49
Setのコードのすぐ次に MsgBox myRng2.Address なんてコードを入れて、実際に表があるセル範囲と一致しているか確認してみて下さい。
>Set myRng1 = Worksheets("Sheet1").Range("A1").CurrentRegion '先週データ範囲 となっていますので、表はA1セルから連続した範囲にある必要があります。
表がA1セルに隣接していない範囲にある(A2,B1,B2セルが未入力)場合は 表のある範囲の取得方法も変更の必要が出てくると思います。 (HANA) 2014/06/12(木) 21:52
("A1")の部分を修正してみました。
>Set myRng1 = Worksheets("Sheet1").Range("A6").CurrentRegion
ここでエラーがでます。(インデックスが有効範囲にありません。)
>If tbl1(myRow, j) <> tbl2(i, j) Then
よろしくおねがいします。
(素人) 2014/06/13(金) 10:26
ローカルウィンドウを表示させて エラーが出る時に myRow,j,i のそれぞれの値を確認して下さい。
また、tbl1,tbl2の大きさが、myRow,j,i に収まっているか確認して下さい。
「型」の列に Variant/Variant(1 to 6, 1 to 26) の様に書かれていると思います。 myRow,i が、 前側の 1 to 6 の範囲内の値か? j が、後ろ側の 1 to 26 の範囲内の値か?
この範囲外の位置を見に行かせようとすると >インデックスが有効範囲にありません。 のメッセージがでます。
なぜ範囲外になってしまうのか、原因を突き止める必要があると思います。
もしかしたら、表が1行目から始まっていないためかもしれません。 そのあたりも含めて、確認してみて下さい。
別件(もう少し後の話)になりますが、セルに色を付ける部分は 表の開始位置がずれている分、ずらさないといけないです。 (HANA) 2014/06/13(金) 10:51
確認?どこをみたらよいのですか…?
>tbl1,tbl2の大きさが、myRow,j,i に収まっているか確認して下さい。
表はA6から始まっています。表の上の行にはタイトルなどはいっているので
行の削除ができないのですが...
>もしかしたら、表が1行目から始まっていないためかもしれません。
ありがとうございます。
>セルに色を付ける部分は表の開始位置がずれている分、ずらさないといけないです。
(素人) 2014/06/13(金) 11:13
tbl1,tbl2の大きさは ローカルウィンドウの tbl1 とか tbl2 とかの 「型」の列です。 Variant/Variant(1 to 6, 1 to 26) なんてのが書かれていると思います。
>範囲がA6:Z11でした。 と言う事なので、6行26列の表だと思いますが。
なので、 j=3 , i=1 であれば 3行目の1列目 なので 範囲に収まっている事になります。
tbl1の方でエラーなのかな。。。?
(HANA) 2014/06/13(金) 11:41
For i = 1 To UBound(tbl2)
UBound(tbl2)=型が一致しません となります
myRow = .Match(tbl2(i, 4), .Index(tbl1, 0, 4), 0)
tbl2(i, 4)=型が一致しません となります
If tbl1(myRow, j) <> tbl2(i, j) Then
tbl1(myRow, j)=型が一致しません となります
tbl2(i, j)=型が一致しません となります
よろしくおねがいします
(素人) 2014/06/13(金) 12:04
>tbl1 = myRng1.Value に対してはなにもでないですが、 ってどういう事ですか?
それ以降に関しても、何のご説明なのか よくわかりません。
>ここでエラーがでます。(インデックスが有効範囲にありません。) >>If tbl1(myRow, j) <> tbl2(i, j) Then じゃなかったんですか? (HANA) 2014/06/13(金) 13:22
先ほど記載したもの(以下参照)は、コードの上にカーソルを持っていくと、
現れた内容を載せました。
For i = 1 To UBound(tbl2)
UBound(tbl2)=型が一致しません となります
myRow = .Match(tbl2(i, 4), .Index(tbl1, 0, 4), 0)
tbl2(i, 4)=型が一致しません となります
If tbl1(myRow, j) <> tbl2(i, j) Then
tbl1(myRow, j)=型が一致しません となります
tbl2(i, j)=型が一致しません となります
(素人) 2014/06/13(金) 14:05
ローカルウィンドウは表示できていますか?
他サイトですが。 http://excelvba.pc-users.net/fol8/8_2.html
そのウィンドウの一番上の灰色の部分に 式 値 型 と書いてありませんか?
文字だけのやり取りになるので なかなか伝わりにくいと思いますが 我慢しておつきあいください。 (HANA) 2014/06/13(金) 14:29
恥ずかしながら、ローカルウィンドウの表示方法を初めて知りました。
教えていただいた方法で出てきた型は以下です。
よろしくおねがいします。
: myRng1 : Nothing : Range : myRng2 : Nothing : Range : tbl1 : Empty 値 : Variant/Empty : tbl2 : Empty 値 : Variant/Empty : i : 0 : Long : j : 0 : Long : myRow : 0 : Long (素人) 2014/06/13(金) 14:51
えっと、エラーになって止まった時に その状態ですか?
たとえば : myRng1 : Nothing : Range って事は Set myRng1 = Worksheets("Sheet1").Range("A1").CurrentRegion で、Setされてない・・・Notingなので・・・って事です。
でも >>MsgBox myRng2.Address >範囲がA6:Z11でした。 は、確認出来てるんですよね?
myRng2だけでなく、myRng1の方も確認してみて下さい。 (HANA) 2014/06/13(金) 15:04
+ : myRng1 : : Range/Range
+ : myRng2 : : Range/Range
+ : tbl1 : : Variant/Variant(1 to 6, 1 to 26)
+ : tbl2 : : Variant/Variant(1 to 6, 1 to 26)
: i : 1 : Long : j : 27 : Long : myRow : 1 : Long
(素人) 2014/06/13(金) 15:17
jが「27」になってますね。
tbl1 も tbl2 も 26列の範囲しかないですよね。
>>tbl1,tbl2の大きさが、myRow,j,i に収まっているか確認して下さい。 の結果としては、 jが収まってない事になります。
なので >この範囲外の位置を見に行かせようとすると >>インデックスが有効範囲にありません。 >のメッセージがでます。
でも > For j = 1 To 26 なので、jは26までにしかなれないと思います。
なぜ j が 27 まで行ってしまうのか コードを見直してみて下さい。 (HANA) 2014/06/13(金) 15:28
エラーはでなくなりました。
>セルに色を付ける部分は表の開始位置がずれている分、ずらさないといけないです。
この部分についてお付き合いをお願いします。
(素人) 2014/06/13(金) 16:09
>>セルに色を付ける部分は表の開始位置がずれている分、ずらさないといけないです。 って書きましたが、そのままでも大丈夫な気がして来ました。
>この部分についてお付き合いをお願いします。 となってますが、もう一度 本当にずれているか 確認お願いします。 (HANA)
現在目視で確認しているのですが、他にも二つのシートで違いのあるセルがあり、
そこは塗りつぶされていません。
なぜでしょうか…?
(素人) 2014/06/13(金) 17:53
マクロを実行する時に[ステップイン(S)]を選んで実行して下さい。
[F8]を押す毎に、コードが一行ずつ実行されます。
A7:Z7に相当するループの時の myRow や tbl1(myRow, j) や tbl2(i, j) が 想定しているものと一致するか、確認してみて下さい。 (HANA) 2014/06/19(木) 08:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.