電子書籍の厳選無料作品が豊富!

エクセル 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
------------------------------------------------------------

A 回答 (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型の変数でおいてみました。
こんな感じでいけるのではないでしょうか?
    • good
    • 0
この回答へのお礼

できました!!
わあああ、ありがとうございます!!!
変数もっと勉強しまする。。

こんなに早く解決するとは、、
とても助かりました。ありがとうございました。

お礼日時:2007/08/09 11:57

前提条件


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にすればいけると思います。
    • good
    • 0
この回答へのお礼

迅速なご回答、ありがとうございます!

早速やってみたのですが、エラーがでてしまい・・
超初心者なので、適応できませんでした。。

お礼日時:2007/08/09 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報