こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAの初心者です。

VBAの初心者です。
エクセルでデーターの整理と管理をしています。
エクセルのシート1に新規のデーター、シート2で既存のデーターがあります。
新規のデーターの更新日と既存のデーターの更新日を比較して既存のデーターが古ければ
新規のデーターから転記して赤色で表示するVBAを教えてもらいながら作りましたが、本来の設計思想と違い動作しています。私の先生に聞いても分からないようで、是非教えて下さい。下記がそのソートです。
既存データーと新規データーの更新日は10列にそれぞれ登録されています。
新規データーに「更新ボタン」があり、これをクリックすると、Sub Hikaku_rtnl()が呼ばれ下記のソースが動く仕組みです。
よろしくお願いします。

Sub Hikaku_rtnl()
Dim lngYcnt As Long
Dim ingXcnt As String
Dim i,j As Integer
Dim Dumy

Sheets("新規データー").Sekect
IngYcnt=Worksheets("新規データー")UsedRange.Row.Count
intXcnt=Worksheets("新規データー")UsedRange.Columns.cpunt

For j=10 TO IngYcnt
ReDim Preserve sb(i)
ReDim Preserve Sb_Date(i)
sb(i)=Cells(j,1)
Sb_Date(i)=Cells(j,10)
i=i+1
Next j
i=0
Sheet("既存データー”).Select

ngYcnt=Worksheets("新規データー")UsedRange.Row.Count
intXcnt=Worksheets("新規データー")UsedRange.Columns.cpunt

For Each Dumy In sb

For j=10 TO IngYcnt

If Dumy=Cells(j,1) Then

If Sb_Date(i) > Cells(j,10)

If Sb_Date(i)=Cells(j,10)
Cells(j,10).Sekect

Sekection Font.Color Index = 3

End If

End If

Next j

j=i+1

Next

End sub

投稿日時 - 2010-07-12 22:44:37

QNo.6034220

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

質問には具体例に近いものを挙げること。
>更新日と既存のデーターの更新日を比較して既存のデーターが古ければ新規のデーターから転記して
新規シートの更新日と既存シートの更新日が同じものを探すというプロセスはどうしましたか。
全セルをIFで比較しているのか。
わたしならFindメソッドを使うと思うが、複数行に該当日がある場合は、Findメソッドは初心者には難しい。
各シート(特に既存シートで)で同じ日付は1行だけか。複数行現れるのか。
この点が処理ロジックで大切な点。
新規シートでは同じ日付は2回現れないだろうね。
何列か項目フィールド(=列)があるのだろうが、全て新規データで置き換えるのか。
詳細に質問のコードを読み解けば判るかもしれないが、読者に解読させないで、質問に文章で説明のこと。
ーー
(1)エクセルのシートがいわば2次元配列なのだから、一旦配列にセルの値を代入する必要は無いのでは。
もっとコードは簡単になると思う。
(2)UsedRange-->End(xlUp)の利用
参考
http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml
(3)For Nextでセルの列の繰り回し
ForNrxt多重(2重)ネストを使う
Googleででも「VBA For Next 多重」 で照会。
http://www.officepro.jp/excelvba/array/index5.html(配列の例)
本質問では必要ない見込み。
(4)SelectやSelectionの多用を控える

投稿日時 - 2010-07-13 10:32:47

補足

申し訳ございません、説明が足りませんでした。
新規シートと既存シートには最初のA列にファイル名が登録され、B列からI列までそのファイル名の内容が登録されています。J列が更新日です。
新規シートには重複データもあり、その重複の中には新規に更新したデータもあります。
重複データーと更新日が同じなら無視して重複データでも、新しく更新されていれば、
既存データの更新日を赤色で上書きします。
重複でも既存データの更新日が空白で新規データに更新日が記録されていれば、赤色で書き換えます。

先のソースは参考で載せました。
帰って分かりづらくしてしまいました。
申しわけありません。

また、行が追加され、A列からJ列まで新たに追加された場合、既存シートに行を挿入して、青色で自動入力できるようにしたいです。

データー全部が赤くなったり、消えたり、うまく動作できなくて困っています。

なにとぞ御教示をお願します。

投稿日時 - 2010-07-13 22:28:37

ANo.2

cpunt?
Sekect?
Sekection?
入力ミスが多すぎます。
マクロコードを見て書き写すのではなく、マクロコードをコピー&ペーストしてください。

質問文に書いてあるコードだと、本来の設計思想と違う動作をするどころか、エラーになって動作しません。

投稿日時 - 2010-07-13 09:30:29

補足

Sekection=Selectionです。
Sekect=Selectです。
会社から直接質問できないので、ノートに書いて自宅で質問しています。
誤字脱字があり、申し訳ありません。

投稿日時 - 2010-07-13 22:33:40

ANo.1

至るところで提示されているソースコードが正常ではありません。
動作するものを提示してください。

処理される行は10行目からですか?
10列目は日付のようですが、1列目には新規・既存データで存在する、行が一意に決定される
キー情報的な意味であると考えて良いですか?

また、現状のソースですと、『転記して』という部分はどこにも見当たらない
のですが、実際にはどのようにしたいのでしょう?

投稿日時 - 2010-07-12 23:21:09

あなたにオススメの質問