Excel VBA質問箱 IV

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

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


3084 / 13644 ツリー ←次へ | 前へ→

【64389】引数num :該当データのレコード番号、見つからなかった場合は-1 初心者です 10/2/1(月) 17:39 質問[未読]
【64390】Re:引数num :該当データのレコード番号、... Hirofumi 10/2/1(月) 18:39 発言[未読]
【64398】Re:引数num :該当データのレコード番号、... 初心者です 10/2/2(火) 15:56 お礼[未読]

【64389】引数num :該当データのレコード番号、見...
質問  初心者です  - 10/2/1(月) 17:39 -

引用なし
パスワード
   エクセルで納品書を作成する本を見て、納品書を作成している、VBA初心者です。
いつもお世話になっております。
こちらのサイトのおかげで、分からないながらも着々と、納品書が出来上がりつつあります。
ありがとうございます。
今回、Howto本を読んでも理解できない箇所がありまして、質問させて頂きます。
既存の入力済み伝票の中から、希望の伝票番号を探し出し、その伝票番号のレコード番号(その伝票が全体で何件目か)、行番号、明細件数などを代入するコードだと思いますが、途中に、
'  引数num :該当データのレコード番号、見つからなかった場合は-1
  If tbFRange Is Nothing Then
    '見つからなかった場合、引数numは-1
    num = -1
とあります。
探したい伝票番号が無かった場合に、-1とは、どういう意味ですか?
見つからなかった場合は、一つ手前の伝票のレコード番号を代入するという事でしょうか?
何故でしょうか?

以下が、コードになります。何卒、よろしくお願い致します。

'
'「TB_受注」シートから「伝票番号」を検索
'  引数key :伝票番号
'  引数num :該当データのレコード番号、見つからなかった場合は-1
'  引数fr :該当データの先頭の行番号
'  引数mc :該当データの明細件数
'
Sub FindJchNum(key As String, num As Long, fr As Long, mc As Long)
  Dim tbSRange As Range  '検索範囲のセル
  Dim tbFRange As Range  '見つかったセル
  
  '検索範囲のセル(表の1列目)を変数に代入する
  Set tbSRange = Worksheets("TB_受注").Range("A4").CurrentRegion.Columns(1)
  
  '伝票番号を先頭から検索する
  Set tbFRange = tbSRange.Find(What:=key, _
    LookIn:=xlFormulas, Lookat:=xlWhole, SearchDirection:=xlNext)
    
  '戻り値を代入する
  If tbFRange Is Nothing Then
    '見つからなかった場合、引数numは-1
    num = -1
  Else
    '見つかった場合、引数numはレコード番号
    num = tbFRange.Offset(0, 6).Value
    
    '引数frに戻り値となる該当セルの先頭の行番号を代入する
    fr = tbFRange.Row
      
    '引数mcに戻り値となる該当セルの明細件数を代入する
    mc = tbFRange.Offset(0, 7).Value
  End If
  
  'オブジェクト変数を解放する
  Set tbSRange = Nothing
  Set tbFRange = Nothing
End Sub

【64390】Re:引数num :該当データのレコード番号...
発言  Hirofumi  - 10/2/1(月) 18:39 -

引用なし
パスワード
   このSubプロシージャは、伝票番号をKeyとして呼び出すと
 引数numに該当データのレコード番号
 引数frに該当データの先頭の行番号
 引数mcに該当データの明細件数
が帰ってきます、この時numが-1なら探索失敗でKeyがみつからなかたという事に成ります
通常レコード番号は0以上の整数なので、-1が帰ってくれば異常と解る様にして有ると思います
このSubプロシージャは親のコードから呼び出しますので、予備だした後
先ず先に、numをチェックして値が-1なら、レコード番号が無い時の処理をし
そうで無い場合、レコード番号が在る処理を行います

>'「TB_受注」シートから「伝票番号」を検索
>'  引数key :伝票番号
>'  引数num :該当データのレコード番号、見つからなかった場合は-1
>'  引数fr :該当データの先頭の行番号
>'  引数mc :該当データの明細件数
>'
>Sub FindJchNum(key As String, num As Long, fr As Long, mc As Long)
>
>  Dim tbSRange As Range  '検索範囲のセル
>  Dim tbFRange As Range  '見つかったセル
> 
>  '検索範囲のセル(表の1列目)を変数に代入する
>  Set tbSRange = Worksheets("TB_受注").Range>("A4").CurrentRegion.Columns(1)
>
>  '伝票番号を先頭から検索する
>  Set tbFRange = tbSRange.Find(What:=key, _
>    LookIn:=xlFormulas, Lookat:=xlWhole, SearchDirection:=xlNext)
>  
>  '戻り値を代入する
>  If tbFRange Is Nothing Then
>    '見つからなかった場合、引数numは-1
>    num = -1
>  Else
>    '見つかった場合、引数numはレコード番号
>    num = tbFRange.Offset(0, 6).Value
>  
>    '引数frに戻り値となる該当セルの先頭の行番号を代入する
>    fr = tbFRange.Row
>   
>    '引数mcに戻り値となる該当セルの明細件数を代入する
>    mc = tbFRange.Offset(0, 7).Value
>  End If
> 
>  'オブジェクト変数を解放する
>  Set tbSRange = Nothing
>  Set tbFRange = Nothing
>  
>End Sub

【64398】Re:引数num :該当データのレコード番号...
お礼  初心者です  - 10/2/2(火) 15:56 -

引用なし
パスワード
   Hirofumi さま、
丁寧にご説明頂きまして、ありがとうございます。
だんだん、分かってきました、などと偉そうには言えませんが、でも、なんとなく仕組みが分かってまいりました。
ありがとうございます。
まだ、使わないんですね。
おっしゃったとおり、伝票番号が無い場合は、エラーが出ます。
それをこれから、本を読み進めていけば、なんとかしていくのでしょう。
たぶん、伝票検索ボタンを作成する際かもしれません。
おかげさまで、登録・更新ボタンは、正常に動くようになりました。
途中、offsetプロパティで、数を数え間違え、泣きそうになりましたが、数え間違いに気づき、なんとか乗り越えました・・・
着々と進んでおります、どうもありがとうございます。


>このSubプロシージャは、伝票番号をKeyとして呼び出すと
> 引数numに該当データのレコード番号
> 引数frに該当データの先頭の行番号
> 引数mcに該当データの明細件数
>が帰ってきます、この時numが-1なら探索失敗でKeyがみつからなかたという事に成ります
>通常レコード番号は0以上の整数なので、-1が帰ってくれば異常と解る様にして有ると思います
>このSubプロシージャは親のコードから呼び出しますので、予備だした後
>先ず先に、numをチェックして値が-1なら、レコード番号が無い時の処理をし
>そうで無い場合、レコード番号が在る処理を行います

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