レッスン2(上級)Findメソッド

入出庫・在庫表&月別売上高

■本格的データベースプログラミング

■商品マスターを作成

 商品マスターには商品コードと商品名・単価を入れます。

■商品マスターには商品の出荷合計と入荷数合計・在庫数が表示されます。

■売上シートでは月別の売上高が表示されます。

■入出荷シート

 商品コードを入れると商品名が表示されます。

 日付を入れて、入荷ならば入荷の列に数量を入れます。

 商品が売れれば日付と出荷の欄に数量を入れます。

■年度別月別売上高が表示されます。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim WS2 As Worksheet

Dim RowEnd As Long

Dim nRow As Long

Dim nCol As Long

nRow = Target.Row

nCol = Target.Column

If nCol = 1 Then Call Tikucoad(nRow, nCol)

If nCol = 1 And Cells(nRow, 7) = "" Then Exit Sub

If nCol > 6 Then Exit Sub

' If nCol > 2 Then Exit Sub

Call Nyuka_keisan

End Sub

Private Sub Tikucoad(nRow As Long, nCol As Long)

Dim WS1 As Worksheet

Dim WS2 As Worksheet

Set WS1 = ActiveWorkbook.Worksheets(1)

Set WS2 = ActiveWorkbook.Worksheets(2)

hinban = WS2.Cells(nRow, nCol)

Set FoundCell = WS1.Columns("A").Find(hinban, lookat:=xlWhole)

If Not FoundCell Is Nothing Then

Application.EnableEvents = False

WS2.Cells(nRow, nCol + 1) = WS1.Cells(FoundCell.Row, 2)

WS2.Cells(nRow, nCol + 3) = WS1.Cells(FoundCell.Row, 3)

Application.EnableEvents = True

Exit Sub

End If

MsgBox ("見つかりません")

End Sub

Private Sub Nyuka_keisan()

'On Error Resume Next

Dim WB As Workbook

Dim WS1 As Worksheet

Dim WS2 As Worksheet

Dim FoundCell As Range

Dim FirstCell As Range

Dim rowCount As Long

Dim rowNo As Long

Dim WS1End As Long

Set WB = ActiveWorkbook

Set WS1 = WB.Worksheets(1)

Set WS2 = WB.Worksheets(2)

'------出入荷データ再計算------------------

WS1End = WS1.Range("A1").CurrentRegion.Rows.Count

Application.EnableEvents = False

For nRow = 2 To WS1End

hinban = WS1.Cells(nRow, 1)

nyuka = 0: syuka = 0

Set FoundCell = WS2.Columns("A").Find(hinban, lookat:=xlWhole)

If Not FoundCell Is Nothing Then

rowCount = FoundCell.Row

nyuka = WS2.Cells(rowCount, 5)

syuka = WS2.Cells(rowCount, 6)

WS2.Cells(rowCount, 7) = WS2.Cells(rowCount, 4) * _

WS2.Cells(rowCount, 6)

rowNo = FoundCell.Row

Set FirstCell = FoundCell

Do

Set FoundCell = WS2.Columns("A").FindNext(FoundCell)

If Not FoundCell Is Nothing Then

rowCount = FoundCell.Row

If FoundCell.Row > rowNo Then

nyuka = nyuka + WS2.Cells(rowCount, 5)

syuka = syuka + WS2.Cells(rowCount, 6)

WS2.Cells(rowCount, 7) = WS2.Cells(rowCount, 4) _

* WS2.Cells(rowCount, 6)

End If

End If

Loop Until FoundCell.Address = FirstCell.Address

End If

'マスターに書き込み

WS1.Cells(nRow, 4) = nyuka

WS1.Cells(nRow, 5) = syuka

WS1.Cells(nRow, 6) = nyuka - syuka

Next nRow

Application.EnableEvents = True

Uriage

End Sub

Private Sub Uriage()

'On Error Resume Next

Dim WB As Workbook

Dim WS1 As Worksheet

Dim WS2 As Worksheet

Dim rowCount As Long

Dim rowNo As Long

Dim WS1End As Long

Dim hiduke As Date

Set WB = ActiveWorkbook

Set WS1 = WB.Worksheets(2)

Set WS2 = WB.Worksheets(3)

'------売上計算------------------

wsEnd1 = WS1.Range("A1").CurrentRegion.Rows.Count 'yahoo

WS2.Cells.Clear

WS2.Range("A1") = "年度月別"

WS2.Range("B1") = "売上"

ReDim suN(wsEnd1 + 1, 2)

suN(0, 0) = wsEnd1

s0 = 1

For i = 2 To suN(0, 0)

hiduke = WS1.Cells(i, 3) '日付

suN(s0, 0) = hiduke

suN(s0, 1) = WS1.Cells(i, 7)

s0 = s0 + 1

Next i

'shell-metzner sort--------------------

n = suN(0, 0) 'データ件数

510 d = 1

520 d = d + d: If d > n Then GoTo 580 Else GoTo 520

530 For i = 1 To n - d: j = i

540 k = j + d: If suN(k, 0) >= suN(j, 0) Then GoTo 570

550 X = suN(k, 0): suN(k, 0) = suN(j, 0): suN(j, 0) = X

X = suN(k, 1): suN(k, 1) = suN(j, 1): suN(j, 1) = X

560 j = j - d: If j > 0 Then GoTo 540

570 Next i

580 d = Int((d - 1) / 2): If d > 0 Then GoTo 530

'--------------------------------------

s = 2: kei = 0

For u = 2 To suN(0, 0)

dayM = Year(suN(u, 0)) & "/" & Month(suN(u, 0))

dayM1 = Year(suN(u + 1, 0)) & "/" & Month(suN(u + 1, 0))

kei0 = suN(u, 1)

kei = kei + kei0

If dayM <> dayM1 Then

WS2.Cells(s, 1) = dayM

WS2.Cells(s, 2) = kei

s = s + 1

kei = 0

End If

Next u

End Sub

リックパソコン京都山科教室

オンラインで受講が出来ます。1時間2500円のワンポイントレッスンです。

0コメント

  • 1000 / 1000