Excel VBA質問箱 IV

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

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


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

【27941】userformでVLOOKUPってつかえるの? 助けてください! 05/8/24(水) 21:07 質問[未読]
【27943】Re:userformでVLOOKUPってつかえるの? MARBIN 05/8/24(水) 21:35 回答[未読]
【27953】Re:userformでVLOOKUPってつかえるの? Jaka 05/8/25(木) 10:14 回答[未読]
【27963】Re:userformでVLOOKUPってつかえるの? 助けてください! 05/8/25(木) 14:39 質問[未読]
【27965】Re:userformでVLOOKUPってつかえるの? Jaka 05/8/25(木) 15:34 回答[未読]
【27982】Re:userformでVLOOKUPってつかえるの? Hirofumi 05/8/25(木) 21:51 回答[未読]

【27941】userformでVLOOKUPってつかえるの?
質問  助けてください!  - 05/8/24(水) 21:07 -

引用なし
パスワード
   現在商品管理プログラムを作っているのですが、
UserForm1に商品コードをテキストボックスもしくはコンボボックスで入力したら
瞬時に同フォーム(UserForm1)に商品名と単価を表示させる様にしたいのですが、可能でしょうか?

同時に単価はその時々で変わる可能性があるので、訂正も可能にしたいのです。

ちなみに商品等のデーターはsheet1に
A1:A100 に 商品コード
B1:B100 に 商品名
C1:C100 に 単価
を作成しています。

私は初心者なものでスミマセン。よろしくお願いします。

【27943】Re:userformでVLOOKUPってつかえるの?
回答  MARBIN  - 05/8/24(水) 21:35 -

引用なし
パスワード
   VBAヘルプで
WorksheetFunction プロパティ
を調べてみてください。

【27953】Re:userformでVLOOKUPってつかえるの?
回答  Jaka  - 05/8/25(木) 10:14 -

引用なし
パスワード
   こんにちは。
一応、マクロでVLOOKUPの使用例。
[#16803]

【27963】Re:userformでVLOOKUPってつかえるの?
質問  助けてください!  - 05/8/25(木) 14:39 -

引用なし
パスワード
   回答有難うございますぅ
___________________________
Private Sub SNumber_AfterUpdate()
  Shouhin.Value = VVariant
  
  VVariant = Application.VLookup(SNumber.Text, Sheets("設定").Range("A2:B10"), 2, 0)
      
If Not IsError(VVariant) Then
  MsgBox VVariant
End If
  
End Sub
___________________________
商品番号(SNumber)を入力後、商品名(Shouhin)にvlookupさせる為に
書いてみたのですが、うまくいかないのですが、なにか問題があるのでしょうか?


▼Jaka さん:
>こんにちは。
>一応、マクロでVLOOKUPの使用例。
>[#16803]

【27965】Re:userformでVLOOKUPってつかえるの?
回答  Jaka  - 05/8/25(木) 15:34 -

引用なし
パスワード
   >Private Sub SNumber_AfterUpdate()
>  Shouhin.Value = VVariant
    ↑この行の意味はわかりませんが....。  
>  VVariant = Application.VLookup(SNumber.Text, Sheets("設定").Range("A2:B10"), 2, 0)

番号というか数値を検索しているんですよね?
>SNumber.Text
Textは、文字です。
Textボックス自体、基本的に文字列なのにそれを更に文字に確定ないで、
せめて、.Valueを使ってください。

ところで、商品番号って文字列なんですか?
他に表示形式を変えていたりしてないですか?

SNumber.Textの部分を直接"444444"とかにして、いろいろ試してみて下さい。

【27982】Re:userformでVLOOKUPってつかえるの?
回答  Hirofumi  - 05/8/25(木) 21:51 -

引用なし
パスワード
   VLookupでは有りませんが、こんなのでも出来ますよ?
このコードは、商品コードが昇順で整列している事を想定しています
もし、商品コードが整列されて居ない場合、以下を変更して下さい

    lngFound = RowSearchBin(CLng(SNumber.Text), rngCode, 1)

    lngFound = RowSearchBin(CLng(SNumber.Text), rngCode, 0)
にして下さい

以下をUserFormのコードモジュールに記述して下さい
尚、単価の表示の為、txtTankaと言うTextBoxを想定しています

Option Explicit

Private rngCode As Range

Private Sub SNumber_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

  Dim lngFound As Long
  Dim vntData As Variant
  
  'もし、データ範囲にデータが有り、SNumberが""で無いなら
  If (Not rngCode Is Nothing) And SNumber.Text <> "" Then
    '商品コードを探索
    '商品コードが数値として入力されている場合
    lngFound = RowSearchBin(CLng(SNumber.Text), rngCode, 1)
    '商品コードが文字列として入力されている場合
'    lngFound = RowSearchBin(SNumber.Text, rngCode, 1)
    '商品コードが有った場合
    If lngFound > 0 Then
      Shouhin.Text = rngCode.Item(lngFound, 2).Value
      txtTanka.Text = rngCode.Item(lngFound, 3).Value
    Else
      Cancel = True
      Beep
      MsgBox "該当コードが有りません"
      Shouhin.Text = ""
      txtTanka.Text = ""
    End If
  End If
  
End Sub

Private Sub UserForm_Initialize()

  Dim lngRows As Long
  
  '商品等のデーターの左上隅を基準とする(列見出しが有る場合)
  With Worksheets("Sheet1").Cells(1, "A")
    'データ行数を取得
    lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row
    If lngRows > 0 Then
      'データ範囲を設定
      Set rngCode = .Offset(1).Resize(lngRows)
    End If
  End With
  
  '商品等のデーターの左上隅を基準とする(列見出しが無い場合)
'  With Worksheets("Sheet1").Cells(1, "A")
'    'データ行数を取得
'    lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
'    If lngRows >= 1 And .Value <> "" Then
'      'データ範囲を設定
'      Set rngCode = .Resize(lngRows)
'    End If
'  End With
  
End Sub

Private Sub UserForm_Terminate()

  Set rngCode = Nothing
  
End Sub

Private Function RowSearchBin(vntKey As Variant, _
                rngScope As Range, _
                Optional lngMode As Long) As Long

  Dim vntFound As Variant
  
  'Matchによる二分探索
  vntFound = Application.Match(vntKey, rngScope, lngMode)
  'もし、エラーで無いなら
  If Not IsError(vntFound) Then
    'もし、Key値と探索位置の値が等しいなら
    If vntKey = rngScope(vntFound).Value Then
      '戻り値として、行位置を代入
      RowSearchBin = vntFound
    End If
  End If
  
End Function

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