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

解決済みの質問

VBA 重複する番号があるときは値を貼り付けない

すみません。
理解しているのが少しなので、ちょっとシンプルなVBAを書いています。

1つのブックに 登録シート =Sheets("登録") 
         顧客情報シート=Sheets("顧客情報")
         販売情報シート=Sheets("販売情報")
         売り上げシート=Sheets("売り上げ")

登録シートのボタンを押すと、登録シートに入力した情報が、
各シートに分かれて値が入るようにしています。
下記がコードです。

Private Sub CommandButton1_Click()

Dim row As Integer
★★★
row = WorksheetFunction.CountA(Sheets("顧客情報").Columns(2)) + 1
Sheets("顧客情報").Cells(row, 2).Value = Range("A2").Value
Sheets("顧客情報").Cells(row, 3).Value = Range("A5").Value
Sheets("顧客情報").Cells(row, 4).Value = Range("B8").Value
★★★
row = WorksheetFunction.CountA(Sheets("販売情報").Columns(2)) + 1
Sheets("販売情報").Cells(row, 2).Value = Range("C26").Value
Sheets("販売情報").Cells(row, 3).Value = Range("J1").Value

row = WorksheetFunction.CountA(Sheets("売り上げ").Columns(2)) + 1
Sheets("売り上げ").Cells(row, 2).Value = Range("H1").Value
Sheets("売り上げ").Cells(row, 3).Value = Range("K6").Value

End Sub

もっと簡単な書き方あるよ。。。と言われるでしょうが、
私が理解して修正等ができるのが、上記でした。。

やりたいことは、2点です。

(1)重複は貼り付けをしない。
 登録シートのセル A2に入った数字が、顧客情報シートのB列のどこかに、
 既に入力がされていた場合は、★★★で囲まれた部分の値を貼り付けず、
 その先の販売情報のシートに貼り付ける作業へと進めたい。
 IF などを使えばできますでしょうか?
 
(2)各シートに入力したものを貼り付けた際、A2より下から順番に各シートのCells(row, 1)の位置に、連番をつけたい。

何卒宜しくお願い申し上げます。

投稿日時 - 2013-08-27 23:12:17

QNo.8238633

暇なときに回答ください

質問者が選んだベストアンサー

初心者さんが一番によくやる失敗ですが、rowなどの予約語を変数に使っては絶対にいけません。


>既に入力がされていた場合は…作業へと進めたい。

「あるか無いか」if文で検査して、無ければスキップするだけです

>連番を付けたい

今のあなたのマクロから、各シートには「2行目からデータを詰めて転記していく」ことが前提になっています。
なのでふつーに行番号-1が連番です



作成例:
private sub CommandButton1_Click()

dim LastRow as long ’注意

if application.countif(worksheets("顧客情報").range("B:B"), range("A2").value) = 0 then
lastrow = worksheets("顧客情報").cells(rows.count, "B").end(xlup).row + 1
worksheets("顧客情報").cells(lastrow, "A").value = lastrow - 1

Sheets("顧客情報").Cells(lastrow, 2).Value = Range("A2").Value
Sheets("顧客情報").Cells(lastrow, 3).Value = Range("A5").Value
Sheets("顧客情報").Cells(lastrow, 4).Value = Range("B8").Value

end if

lastrow = worksheets("販売情報").range("B65536").end(xlup).row + 1
worksheets("販売情報").cells(lastrow, "A") = lastrow - 1
Sheets("販売情報").Cells(lastrow, 2).Value = Range("C26").Value
Sheets("販売情報").Cells(lastrow, 3).Value = Range("J1").Value

lastrow = worksheets("売り上げ").cells(rows.count, 2).end(xlup).offset(1).row
worksheets("売り上げ").cells(lastrow, 1) = lastrow - 1
Sheets("売り上げ").Cells(lastrow, 2).Value = Range("H1").Value
Sheets("売り上げ").Cells(lastrow, 3).Value = Range("K6").Value

end sub







>と言われるでしょうが、…上記でした。。

色々手を入れて見やすくする等、工夫の余地が沢山あるマクロですが、とにかく一切余計な事をしてくれるなという意味ですよね。

投稿日時 - 2013-08-27 23:48:51

お礼

ありがとうございます!!
いろいろと何度かやっているうちに、よくわからず動かなくなることが多く、
情けないことに、唯一、数十回別のバージョンやらアレンジやら加えて修正が可能だったのです。
>一切余計な事をしてくれるな  ではなく、
 「本気でわからないので、高度なことを教えていただいても、
  理解できずお手間取らせるだけになっちゃいます。
  ごめんなさい」っっと言う意味です。すみません。
構文をまとめたり、いろいろやったことはあるのですが、余計袋小路で。。。
必要に駆られて仕事の事務作業で使っているので、 
使いたいマクロはいつもほぼ同じで、マクロをあまりじっくり勉強しておらず、
お手数おかけしました。

助かりました。
ありがとうございました

投稿日時 - 2013-08-28 10:40:58

ANo.1

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

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

回答(1)

あなたにオススメの質問