[[20190305090245]] 『空白を探して、そこから転記をはじめる。』(マイマイ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白を探して、そこから転記をはじめる。』(マイマイ)

 空白を探して、そこから転記をはじめる。

すでにデータが入っている"売上高"シートがあります。
注文情報のユーザーフォームを作ってあり、日付・購入者氏名・モール・商品科目・商品名・数量・送料・値引き・クーポンの9個の記入項目があります。
最後に登録を押すと"売上高"シートに各項目が転記されます。

その転記の際、売上高の空白部分から順番に転記されるようにしたいです。
現在以下のよう書いています。
上手く動作して空白を見つけてくれることもあるのですが、元データを上書きしてしまうことが結構多いです。
どのように直したらいいでしょうか。

注文情報のコード
Private Sub 登録_Click()
 y = 2
 Do While Cells(y, 1) <> ""
 y = y + 1
 Loop
 Sheets("売上高").Cells(y, 1).Value = 購入日.Value
 Sheets("売上高").Cells(y, 2).Value = 氏名.Value
 Sheets("売上高").Cells(y, 4).Value = モール.Value
 Sheets("売上高").Cells(y, 5).Value = 種別.Value
 Sheets("売上高").Cells(y, 6).Value = 商品名.Value
 Sheets("売上高").Cells(y, 7).Value = 数量.Value
 Sheets("売上高").Cells(y, 12).Value = 送料.Value
 Sheets("売上高").Cells(y, 13).Value = 値引き.Value
 Sheets("売上高").Cells(y, 14).Value = クーポン.Value

End Sub

Private Sub Form_Load()

  Me.購入日.Value = Date
  Me.購入日.Format = "yyyy/mm/dd"

End Sub

Private Sub UserForm_Initialize()

   商品科目.RowSource = "リスト!P8:P19"
   Me.購入日 = Format(Date, "yyyy/mm/dd")
End Sub

Private Sub 購入日_AfterUpdate()
With Me.購入日

    If IsDate(.Value) Then
        .Value = Format(.Value, "yyyy/mm/dd")
    End If
End With

End Sub

Private Sub 商品科目_Change()

   商品名.List = Sheets("リスト").Range(商品科目.Value).Value
End Sub

関係ないところもありますが、なにが悪いのか分からないため書いてるものは全て記載しました。

売上高シート例

     |[A]     |[B]     |[C]       |[D]   |[E]     |[F]   |[G] |[H] |[I] |[J]   |[K] |[L] |[M]   |[N]     |[O]    |[P]   |[Q]     |[R]       |[S] |[T]      |[U]         |[V]
 [1] |日付    |購入者氏名|顧客コード|モール|商品科目|商品名|個数|単価|売上|単原価|原価|送料|値引き|クーポン|限界利益|総売上|総限界利益|限界利益率|判定|JANコード|商品管理番号|No.
 [2] |2019/1/1|佐藤    |43466佐藤 |楽天  |食塩  |A     |   4|1000|4000|   300|1200| 720|     0|       0|2080    |4000  |2080    |52%       |○  |     |            |21  
 [3] |2019/1/1|鈴木    |43466鈴木 |楽天  |ランプ |Q     |   1|3980|3980|  1110|1110|1000|     0|       0|1870    |3980  |1870    |47%       |△  |         |            |103 
 [4] |2019/1/1|吉田    |43466吉田 |amazon|食塩    |A     |   1|1000|1000|   300| 300| 360|     0|       0|340    |1000  |340     |34%       |×  |         |            |21   
 [5] |2019/1/1|山下    |43466山下 |amazon|食塩    |B     |   1|8900|8900|  3000|3000|2500|     0|       0|3400    |8900  |3400    |38%       |×  |         |            |22 
 [6] |2019/1/1|高橋    |43466高橋 |Yahoo!|バスソルト  |V     |   1| 800| 800|   200| 200|   0|     0|       0|600    |2300  |1500    |65%       |○  |         |            |50 
 [7] |2019/1/1|高橋    |43466高橋 |Yahoo!|食塩    |C     |   1|1500|1500|   600| 600| 510|     0|       0|390    |2300  |1500    |65%       |○  |         |            |23 
 [8] |2019/1/1|山田    |43466山田 |自社 |食塩   |A     |   2|1000|2000|   300| 600| 510|     0|       0|890    |2000  |890     |44%       |△  |         |            |21   
 [9] |    |      |          |    |        |      |    |    |    |      |    |    |      |        |       |      |        |          |    |         |            |   

この場合、9行目から転記されるようにしたいです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 y = 2
 Do While Sheets("売上高").Cells(y, 1) <> ""
 y = y + 1
 Loop
(mm) 2019/03/05(火) 10:05

Range("A1").Select
n = Range("A1").End(xlDown).Row
Range("A" & n + 1).Select

この方が高速かと。
(通りすがりのおっさん) 2019/03/05(火) 10:22


>元データを上書きしてしまうことが結構多い
A列に日付が入力されていない事があるからかもしれませんね。

最初の空白セルを探すのではなく、最後の入力セルを探すと良いでしょう。

Private Sub 登録_Click()
 n = Cells(Rows.Count, 1).End(xlUp).Row
 Range("A" & n + 1).Select
 Sheets("売上高").Cells(y, 1).Value = 購入日.Value
 Sheets("売上高").Cells(y, 2).Value = 氏名.Value
 Sheets("売上高").Cells(y, 4).Value = モール.Value
 Sheets("売上高").Cells(y, 5).Value = 種別.Value
 Sheets("売上高").Cells(y, 6).Value = 商品名.Value
 Sheets("売上高").Cells(y, 7).Value = 数量.Value
 Sheets("売上高").Cells(y, 12).Value = 送料.Value
 Sheets("売上高").Cells(y, 13).Value = 値引き.Value
 Sheets("売上高").Cells(y, 14).Value = クーポン.Value

End Sub

(通りすがりのおっさん) 2019/03/05(火) 11:31


>mm様
返信ありがとうございます。
最初の段階でSheetの指定が必要なんですね。
これで試してみます。

>通りすがりのおっさん様
返信ありがとうございます。
処理が早いのはとても助かります。
記述通り組んでみたのですがエラーが出てしまいました。

Private Sub 登録_Click()
 n = Cells(Rows.Count, 1).End(xlUp).Row
 Range("A" & n + 1).Select
➡ Sheets("売上高").Cells(y, 1).Value = 購入日.Value

ここで『アプリケーション定義またはオブジェクト定義エラーです。』
(マイマイ) 2019/03/05(火) 12:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.