
No.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内を使用しないで行けると思います
No.3
- 回答日時:
こんにちは 横からすみません
補足のコードを見ると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を取得する必要はないです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
B列の最終行までA列をオート...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
C# dataGridViewの値だけクリア
-
IIF関数の使い方
-
VB2005EE:DataGridViewでチェ...
-
【VBA】2つのシートの値を比較...
-
Worksheets メソッドは失敗しま...
-
VBAを使って検索したセルをコピ...
-
URLのリンク切れをマクロを使っ...
-
DataGridViewに空白がある場合...
-
エクセル 2つの表の並べ替え
-
VBAで、特定の文字より後を削除...
-
セルに値が入っていた時の処理
-
VBAのFind関数で結合セルを検索...
-
複数csvを横に追加していくマク...
-
複数の列の値を結合して別の列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報
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列ならばをつけくわえたいのです。
おしえてくれませんでしょうか
If Columns(2) Thenをつけると
型が一致しませんとでます。