Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2675 / 13645 ツリー ←次へ | 前へ→

【66597】入力と転記と・・・ ミッチョ 10/9/13(月) 15:44 質問[未読]
【66619】Re:入力と転記と・・・ Jaka 10/9/14(火) 15:00 発言[未読]

【66597】入力と転記と・・・
質問  ミッチョ  - 10/9/13(月) 15:44 -

引用なし
パスワード
   2 No.                
3 128                
4 入庫日       仕入先            
5 2010/8/1 XXX商事            
6  長さ(m)    本数    重量(kg)    単価(円)    金額(円)
7   123         5     560         160          89,600

上記で128の番地はB3、2010/8/1はB5、XXX商事はC5、123はB7、5はC7、560はD7、160はE7、89600はF7に記述されるようになっています。(sheet入力)、登録マクロを走らせると別のシート(sheet入荷別)に転記されます。
Sheet入荷別
 B    C    D    E  F   G  H   I
 連番  日付   仕入先 長さ 本数 重量 単価 金額
 1   2010/7/1 ???商会 
 2
 3            ・            
              ・
              ・
 123    2010/8/1 XXX商事 123  5  560  160  89600

入力のマクロは
Sub 新規データ()
  Application.EnableEvents = False
  With Sheets("入力")
 
    .[B3] = WorksheetFunction.Max( _
      [Database].Resize(, 1)) + 1
    .[B5:F5].ClearContents
    .[B7:F7].ClearContents
    .[B9:F9].ClearContents
    Range("F7").Formula = "=$D$7*$E$7"
    End With
  Application.EnableEvents = True
End Sub
ここでなぜかB3の連番が123で単価が123と偶然に同じになった時に"該当するNo.はありません"のメッセージが出ます。つたない説明ですが、原因はわかりますか。
次に転記のマクロは
Sub データ登録()
'
' データ登録 Macro
  Dim 行 As Long
  Dim 確認 As Integer
  Dim No As Long
  
  確認 = MsgBox("データを登録します。" _
    & "よろしいですか?", vbYesNo)
  If 確認 <> vbYes Then Exit Sub
  
  With Sheets("入力")
        On Error GoTo 新規行
      行 = WorksheetFunction.Match( _
        .[B3], [Database].Resize(, 1), 0)
    On Error GoTo 0
    
    [Database].Cells(行, 1) = .[B3]
    [Database].Cells(行, 2) = .[B5]
    [Database].Cells(行, 3) = .[C5]
    [Database].Cells(行, 4) = .[B7]
    [Database].Cells(行, 5) = .[C7]
    [Database].Cells(行, 6) = .[D7]
    [Database].Cells(行, 7) = .[E7]
    [Database].Cells(行, 12) = .[F9]
    [Database].Cells(行, 8) = .[F7]
    [Database].Cells(行, 9) = .[B9]
    [Database].Cells(行, 10) = .[C9]
    [Database].Cells(行, 11) = .[E9]
    [Database].Cells(行, 12) = .[F9]
    [Database].Cells(行, 13) = .[F5]
    
    Exit Sub
  
新規行:
    行 = [Database].Rows.Count + 1
    
    [Database].Cells(行 - 1, 1).EntireRow.Insert
    [Database].Offset(行 - 1).Resize(1).Copy _
      [Database].Cells(行 - 1, 1)
    .Shapes("スピン").ControlFormat.Max = .[B3]
    Resume Next
  End With
'
End Sub

で、この時に入力欄で123なのに、122になってしまいます。
どこがわるいのでしょうか。教えてくださればありがたいです。
質問を二つしてしまいましたが、違反ですか。

【66619】Re:入力と転記と・・・
発言  Jaka  - 10/9/14(火) 15:00 -

引用なし
パスワード
    on error と Resume Next の組み合わせは使った事がないのでよく解ってません。
    
[Database]
これ名前定義ですよね?
名前定義で、名前を Database と名づけると特殊な意味があると見た事があるんですが...。
簡単に書くと自動でデータ範囲を識別する。
という事らしいから、その辺のいつ自動で取得しなおすのかのタイミングの違いが出てく
るんじゃないでしょうか?

データ範囲を自動認識させないで、明確に取得するように変えられてはどうでしょうか?
名前定義で、Databaseと名づけた事がないけど。


2675 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free