Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
他のシートの番号を参照し、ユーザーフォームに入力
投稿日時: 21/01/17 15:47:12
投稿者: あまあま
メールを送信

他のワークシートの値をユーザーフォームに表示し、その横の列に値を転記する方法がわからく苦労しています。どなたかご教示ください。
 
ワークシート1のA列に番号(ID)があり、
ユーザーフォームにこの値を表示させながら、B列(名前)、C列(住所)に入力し、ワークシートBに転記すしたい。
次のように
 
Dim lastRow As Long
textbox1.value=sheetA!・・・
 
With Worksheets("住所録").Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 2) = TextBox3.Value
        .Offset(1, 3) = TextBox4.Value
End With

回答
投稿日時: 21/01/18 10:47:31
投稿者: simple

テキストボックスへの表示、テキストボックスからシートへの転記は
提示されたもので良さそうです。
(sheetA!・・・というのは間違いです。後半のようなシート指定の方法を使って下さい。)
  
あとは、
そうしたコードを、なんらかのボタンのクリックイベントプロシージャに書けばよいと思います。
前者は、UserFormのInitializeイベントプロシージャを利用することもできます。
  
いずれにしても、入門的事項を図解で説明したものが書籍なり、
ネット記事なりにあると思いますから、そちらのほうが理解しやすいと思います。
それを真似することから始めてみてはいかがですか?
部分的な回答を受けるよりも、まとまった情報をそうしたところから取得したほうが、
効率がよいと思います。
(書籍はお持ちですか?それを手元に置くことが有益だと思います。)

投稿日時: 21/01/19 11:06:22
投稿者: あまあま
メールを送信

ありがとうございます。
書籍は多少ありますが、目的とするコード等がなかったので質問しました。
再度、調べます。

回答
投稿日時: 21/01/19 11:12:44
投稿者: WinArrow
投稿者のウェブサイトに移動

あまあま さんの引用:

Dim lastRow As Long
textbox1.value=sheetA!・・・
 
With Worksheets("住所録").Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 2) = TextBox3.Value
        .Offset(1, 3) = TextBox4.Value
End With

 
このコードは、どのようなプロシジャに記述していますか?

投稿日時: 21/01/19 16:25:59
投稿者: あまあま
メールを送信

ユーザーフォームには検索ボタンを配置してあります。
検索値(番号)をワークシートのL1に置き、A列から番号を検索し、その番号にあった行を選択し、B,C,D列に、ユーザーフォームのテキストボックスの値を書き込みます。
B列以降に対応するテキストボックスはTextBox2・・・となります。
上記の条件を考えて、書いたものが下記になります。
 
Private Sub CommandButton1_Click()
 
Dim lastRow As Long
Dim myData As Object
Dim targetRow As String
 
Worksheets("input").Select
Worksheets("input").Range("L1").Select
Worksheets("input").Range("L1") = TextBox1.Value
 
lastRow = Cells(Rows.Count, 1).End(xlUp).row
 
With ActiveSheet.Range(Cells(1, "A"), Cells(lastRow, "A"))
Set myData = .Find(What:=TextBox1)
targetRow = myData.row
      
TextBox2.Text = Cells(targetRow, "B")
TextBox3.Text = Cells(targetRow, "C")
TextBox4.Text = Cells(targetRow, "D")
TextBox5.Text = Cells(targetRow, "E")
End With
 
End Sub
 
何か修正すべき点はありますか?

回答
投稿日時: 21/01/19 17:57:02
投稿者: WinArrow
投稿者のウェブサイトに移動

修正しなければいけないということはないですが、
  
シートやセルを選択しなくても処理はできます。
ここの場合以外でも、同じようなコードを記述していると
処理時間に影響します。
インデントをきちんとつける癖をつけましょうう。
コードが見やすくなります。
 常にオブジェクトを意識したコードを記述するようお勧めします。
  
参考コードを紹介します。

 Private Sub CommandButton1_Click()
 
Dim lastRow As Long
Dim myData As Range     '★
Dim targetRow As Long   '★

    With Worksheets("input")
        .Range("L1").Value = Me.TextBox1.Value
  
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  
        With .Range(.Cells(1, "A"), .Cells(lastRow, "A"))
            Set myData = .Find(What:=Me.TextBox1.Value)
            targetRow = myData.Row
       
            Me.TextBox2.Text = .Cells(targetRow, "B")
            Me.TextBox3.Text = .Cells(targetRow, "C")
            Me.TextBox4.Text = .Cells(targetRow, "D")
            Me.TextBox5.Text = .Cells(targetRow, "E")
        End With
    End With
  
End Sub

投稿日時: 21/01/19 23:35:11
投稿者: あまあま
メールを送信

ありがとうございます。参考になります。