• ベストアンサー

VBAで変数が使いこなせなくて、困っています

エクセル VBAで、 「業者コードを入力すると、業者の名前と電話番号を表示してくれる。」 というVBAを、本を見ながら作ったのですが、(下にコピペしました↓) これだと業者コードが増える度、VBAに入力していかなければならないことに。 業者さんはどんどん増えていくので、追いつかなく困っています。 iを使ったり応用しようとしましたが、自力ではどうも無理なのです。 初めてなので、説明不足でしたらすみません。 どうかお願いします! ------------------------------------------------------------ Sub 業者コードから入力() ' Dim getstr As String Dim msg As String Dim title As String Set ws1 = Worksheets("データ") Set ws2 = Worksheets("業者コード") Set ws3 = Worksheets("通知書") msg = "業者コードを入力してください" title = "コード入力" getstr = InputBox(msg, title) getstr = UCase(getstr) Select Case getstr Case "00" ws3.Range("d6") = ws2.Range("e7") ws3.Range("d9") = ws2.Range("i7") ws3.Range("q9") = ws2.Range("j7") Case "01" ws3.Range("d6") = ws2.Range("e8") ws3.Range("d9") = ws2.Range("i8") ws3.Range("q9") = ws2.Range("j8") Case "02" ws3.Range("d6") = ws2.Range("e9") ws3.Range("d9") = ws2.Range("i9") ws3.Range("q9") = ws2.Range("j9") Case "03" ws3.Range("d6") = ws2.Range("e10") ws3.Range("d9") = ws2.Range("i10") ws3.Range("q9") = ws2.Range("j10") Case "04" ws3.Range("d6") = ws2.Range("e11") ws3.Range("d9") = ws2.Range("i11") ws3.Range("q9") = ws2.Range("j11") Case "05" ws3.Range("d6") = ws2.Range("e12") ws3.Range("d9") = ws2.Range("i12") ws3.Range("q9") = ws2.Range("j12")   Case Else     MsgBox "エラーです" End Select End Sub ------------------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Sub 業者コードから入力() Dim getstr As String Dim msg As String Dim title As String Dim iRange As Integer Set ws1 = Worksheets("データ") Set ws2 = Worksheets("業者コード") Set ws3 = Worksheets("通知書") msg = "業者コードを入力してください" title = "コード入力" getstr = InputBox(msg, title) getstr = UCase(getstr) iRange = Int(getstr) + 7 'コードを数値化しています '00が7行目のデータのようなので7を足しています ws3.Range("d6") = ws2.Range("e" & iRange) ws3.Range("d9") = ws2.Range("i" & iRange) ws3.Range("q9") = ws2.Range("j" & iRange) End Sub ------------------------------------------------- ws3.Range("d6") = ws2.Range("e7") ws3.Range("d9") = ws2.Range("i7") ws3.Range("q9") = ws2.Range("j7") を見ると左辺のRange("d6")Range("d9")Range("q9") は固定で 右辺のセルの数値が上がっているのでそこの部分を変数で置き換えてみてはいかがでしょうか? 上記ではiRangeというInteger型の変数でおいてみました。 こんな感じでいけるのではないでしょうか?

kinoyasuko
質問者

お礼

できました!! わあああ、ありがとうございます!!! 変数もっと勉強しまする。。 こんなに早く解決するとは、、 とても助かりました。ありがとうございました。

その他の回答 (1)

回答No.1

前提条件 1行に事業者のデータがおさまっていること。 余分なデータが入っていないこと。 ----------------------------------------------------------- Dim intMaxRow As Integer Dim intIndex As Integer 'データが入力されている最後の行を検索 intMaxRow = ActiveSheet.UsedRange.End(xlDown).Row For intIndex = 1 To intMaxRow '事業者番号検索を抜ける条件(空白のセルが見つかったら) If Sheet2.Cells(intIndex, 1) = "" Then Exit For End If If getstr = Sheet2.Cells(intIndex, 0) Then 'ここに一致した場合の処理 End If Next ----------------------------------------------------------- For文の1は開始行です。 Cellsの引数になっている1は列番号です。 コードから推測するにFor文の1を7に、Cellsの引数の1を5にすればいけると思います。

kinoyasuko
質問者

お礼

迅速なご回答、ありがとうございます! 早速やってみたのですが、エラーがでてしまい・・ 超初心者なので、適応できませんでした。。