- 締切済み
転記の際に重複を避けたいのですが・・・(エクセル)
マクロ初心者です。 宜しくお願いします。 Sub 転記開始() Set MotoSht = Sheets("表示シート") Set SakiSht = Sheets("データ") MotoArray = Array("C5", "F5", "C6", "C7", "C8", "F6", "C9", "F9", "C10", ・・・・) Set sakiRng = SakiSht.Range("A65535").End(xlUp).Offset(1) i = 0 For Each myRng In MotoArray sakiRng.Offset(, i) = MotoSht.Range(MotoArray(i)) i = i + 1 Next End Sub 以上ですと、Sheets("データ")にすでに転記したデータがあってもマクロを実行するたびに同じデータが蓄積されていきます。 そこで、 Sheets("データ")にSheets("表示シート") の"C5"と同じデータが有る場合は同じレコードに上書きをするようにしたいのですが、何か方法が有りましたら宜しくご指導をお願います。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
#1です。やっぱりエラーあり、下記に修正してください。 Sub 転記開始() Set motosht = Sheets("表示シート") Set sakiSht = Sheets("データ") motoArray = Array("C5", "F5", "C6", "C7", "C8", "F6", "C9", "F9", "C10") sakiRow = sakiSht.Range("A65535").End(xlUp).Row i = 1 '---- For j = 0 To UBound(motoArray) clvalue = motosht.Range(motoArray(j)) For k = 1 To i If sakiSht.Cells(k, "A") = clvalue Then GoTo p1 Next k sakiSht.Cells(i, "A") = clvalue i = i + 1 p1: Next j End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
私の好きな流儀に書き換えましたが Sub 転記開始() Set motosht = Sheets("表示シート") Set sakiSht = Sheets("データ") motoArray = Array("C5", "F5", "C6", "C7", "C8", "F6", "C9", "F9", "C10") i = 1 '---- For j = 1 To UBound(motoArray) clvalue = motosht.Range(motoArray(j)) For k = 1 To i - 1 If sakiSht.Cells(k, "A") = clvalue Then Exit For Next k sakiRng.Cells(i, "A") = clvalue i = i + 1 Next j End Sub (1)シートのデータは、縦流しがすき (2)RangeのSetは好きじゃないので使ってない。 (3)Set sakiRng = SakiSht.Range("A65535").End(xlUp).Offset(1) は不要?iで代用できる? すみませんテストデータがつくりにくいので、テストできてません。 ミスがあればすみません。意を汲んで訂正していただける力のある方とお見受けしますので。
お礼
二度もご解答いただき感謝感激でございます。 ですが、転記が何故かアッチコッチ??になってしまいます。Sheets("表示シート")の"C9"が"A6"に転記されたりします。 また、重複していないデータは Offset(1) でSheets("データ")に追加したいのですが、この方も上手くいきませんでした。 説明が下手な上に、更に、お願いしておきながら手前勝手な文言の数々で済みません。。 あくまでもマクロ初心者ですので。。。 ご解答を頂けた事には感謝の極みです。 ありがとう御座いました。