- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
質問には具体例に近いものを挙げること。 >更新日と既存のデーターの更新日を比較して既存のデーターが古ければ新規のデーターから転記して 新規シートの更新日と既存シートの更新日が同じものを探すというプロセスはどうしましたか。 全セルを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の多用を控える
- nattocurry
- ベストアンサー率31% (587/1853)
cpunt? Sekect? Sekection? 入力ミスが多すぎます。 マクロコードを見て書き写すのではなく、マクロコードをコピー&ペーストしてください。 質問文に書いてあるコードだと、本来の設計思想と違う動作をするどころか、エラーになって動作しません。
補足
Sekection=Selectionです。 Sekect=Selectです。 会社から直接質問できないので、ノートに書いて自宅で質問しています。 誤字脱字があり、申し訳ありません。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
至るところで提示されているソースコードが正常ではありません。 動作するものを提示してください。 処理される行は10行目からですか? 10列目は日付のようですが、1列目には新規・既存データで存在する、行が一意に決定される キー情報的な意味であると考えて良いですか? また、現状のソースですと、『転記して』という部分はどこにも見当たらない のですが、実際にはどのようにしたいのでしょう?
補足
申し訳ございません、説明が足りませんでした。 新規シートと既存シートには最初のA列にファイル名が登録され、B列からI列までそのファイル名の内容が登録されています。J列が更新日です。 新規シートには重複データもあり、その重複の中には新規に更新したデータもあります。 重複データーと更新日が同じなら無視して重複データでも、新しく更新されていれば、 既存データの更新日を赤色で上書きします。 重複でも既存データの更新日が空白で新規データに更新日が記録されていれば、赤色で書き換えます。 先のソースは参考で載せました。 帰って分かりづらくしてしまいました。 申しわけありません。 また、行が追加され、A列からJ列まで新たに追加された場合、既存シートに行を挿入して、青色で自動入力できるようにしたいです。 データー全部が赤くなったり、消えたり、うまく動作できなくて困っています。 なにとぞ御教示をお願します。