プロが教えるわが家の防犯対策術!

いつもお世話になっております
おしえてくれませんでしょうか
ユーザーフォームにコマンドボタンがあります。
コマンドボタンが押下
タイミングで

B列のアクティブセルの隣の列をテキストボックスに表示されたいのですが、

わかる方おしえてくれませんでしょうか
添付ファイルはデータです。
次の添付ファイルはユーザーフォームの形を添付いたします

「B列のアクティブセルの隣の列をテキストボ」の質問画像

質問者からの補足コメント

  • Private Sub CommandButton1_Click()
    Dim i As Long
    With Worksheets("Sheet1")
    i = ActiveCell.Row
    TextBox1.Text = .Cells(i, 2)
    TextBox2.Text = .Cells(i, 3)
    End With
    End Sub
    このコードに 列がB列ならばをつけくわえたいのです。
    おしえてくれませんでしょうか

    「B列のアクティブセルの隣の列をテキストボ」の補足画像1
      補足日時:2022/11/22 14:34
  • うーん・・・

    If Columns(2) Thenをつけると
    型が一致しませんとでます。

      補足日時:2022/11/22 14:35

A 回答 (4件)

なんかスッキリしないので回答ではありませんが追記します


参考にもならないかも知れませんので うざったければ読み飛ばし無視してください

ActiveCellからUserFormに値を取得すると言う事は
ActiveCellセルを変えたい場合、UserFormを閉じると言う事でしょうか・・
閉じるのは面倒なのでvbModelessを使用するのでしょうか?

vbModelessを使用するなら、値の取得にCommandButtonを使用するより
当該シートのSelectionChangeイベントなどでUserFormに値を渡すのはどうでしょう。

例を書きます(オブジェクト型は判り難いかもなので数値で)
UserFormオブジェクト名UserForm1
標準モジュールに
Option Explicit
Public r As Long 'グローバル変数
Public c As Long
Sub test() 'ここからUserForm1を表示
UserForm1.Show vbModeless
End Sub

該当シートモジュールに
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
r = Target.Row
c = Target.Column
If c = 2 Then
On Error Resume Next '不要と思われますが念のため
UserForm1.TextBox1.Value = Cells(r, c).Value
UserForm1.TextBox2.Value = Cells(r, c).Offset(, 1).Value
Else
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
End If
End Sub

UserForm1はTextBox1 TextBox2が存在する事

testを実行 
選択セルを変更する度にTextBoxに値が入ると思います
シートイベントを使用する事やvbModelessを使用する事には
少し制約があります
例えば
イベントトリガーとなり得る処理をVBAで行う場合 制御が必要
RefEditコントロールに不具合があるなど

一旦取得した値を保持したい場合はElse内を使用しないで行けると思います
    • good
    • 0
この回答へのお礼

いつもお世話になっております
お久しぶりです
試しました。すばらしいです。
ありがとうございました。

お礼日時:2022/11/22 17:52

こんにちは 横からすみません


補足のコードを見るとB列とC列になっているようですけれど
実行カラムを限定するのなら取得カラム側のカラムナンバーをご質問のように定数を入れれば良いのではないでしょうか
他には、ActiveCellを起点にするならOffsetで指定します

If Columns(2) Then ・・・ Columns(2) オブジェクトなので
この場合Intersectを使用すれば出来ると思います
単純に考えると
If ActiveCell.Column = 2 Then かな・・
オブジェクトを使う場合
If Not Intersect(ActiveCell, Columns(2)) Is Nothing Then
など書き方は色々ありますね

With Worksheets("Sheet1")
他のシートで実行してもWorksheets("Sheet1")の値を取得したいと言う事?
ここは良く分からないけど・・画像を見るとあくまでSheet1の話と言う事なら
ActiveCell.Column = 2で条件を絞るついでにSheet1も限定してこんな感じかな
>列がB列ならばをつけくわえたいのです。
まんまで無くすいません

With ActiveCell
If ActiveSheet.Name = "Sheet1" And .Column = 2 Then
TextBox1.Text = .Value 'B列で条件を限定しているのでB列該当セルの値
TextBox2.Text = .Offset(, 1).Value '上記同様C列該当セル
End If
End With
End Sub

ActiveCellを起点にOffsetしているのでActiveCell.Rowを取得する必要はないです
    • good
    • 0

.Offset( , -1).Value ' 左:A列


.Offset( , 1).Value ' 右:C列

隣の列って?
    • good
    • 0

>ActiveCell.Row



これは『Activeなセルのある行』。
では列なら?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング