
No.6ベストアンサー
- 回答日時:
シート上のA1セルにC列へ入力したセルのアドレスを記憶します。
ComboBox1.Textの値を転記する時、A1のアドレスを参照して、そのアドレスの右横へ設定します。
ここでは便宜上、シート上のA1セルにしていますが、あなたの環境に合わせて、任意のセルに変更してください。
シートモジュール側
'JANを入力したら日付が転記される
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Application.EnableEvents = False
Target.Offset(, -1).Value = Now
Application.EnableEvents = True
'JAN入力したらformが開く
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
Range("A1").Value = Target.Address
UserForm2.Show
End Sub
UserForm2側
(トリガが不明なのでコマンドボタンクリック時の処理にしています。
あなたの環境に合わせて修正してください)
Private Sub CommandButton1_Click()
Dim addr As String
addr = Range("A1").Value
Range(addr).Offset(0, 1).Value = ComboBox1.Text
Unload UserForm2
End Sub
No.5
- 回答日時:
No2です。
ようやくのこと、情報が示されたので理解できましたが・・・
補足でご提示のプロシージャ内では変数TargetにC列のセルが取得できているはずです。
(コピペなどを行うと複数セルになるので、ご提示の処理だといろいろと問題はありますが・・)
とりあえず、一つのセルしか変わっていない場合に限定してもよいのなら、
Targetセルの右側のセル(= .Offset(,1))がD列のセルになります。
一方で、問題となっている処理をどこで実行しているのかは未だに不明のままですが、勝手に妄想するところ、UserForm2のプロシージャ内ではないかと想像しました。
プロシージャが別な場合には変数は直接参照できませんので、対象セル位置をプロシージャ間で受け渡す必要があります。
方法としては、
1)グローバル変数を利用して受け渡す
2)シート上の対象セルをアクティブにしておいて受け渡す
3)フォーム上の(非表示)ラベルなどに対象セルアドレスを記入して受け渡す
等が考えられます。
元のプロシージャに制御を戻すことも考えられますが、処理の構造が複雑で面倒になるだけと思います。
上記の1)~3)のいずれかで対応するのが簡便でしょう。
(2)はアクティブセルが移動してしまうので、UIとしては良くないかも知れません)
No.2
- 回答日時:
No1です。
>試してみたのですがダメでした
2択方式でしか情報がないので、ほぼ何もわかりませんけれど・・・
同じダメでも、原因はいろいろ考えられます。
・転記対象セルが取得できずにエラーになる
・フォームの値が取れずエラーになる
・対象セルが違う所になる
・フォームの値が違う値になる
・・・・
などなど、いろいろです。
また、どういう状況で実行されているのかにもよるところがあります。
試しに、
Range("A1").Value = Userform2.ComboBox1.Text
とすれば、A1セルに値が表示されませんか?
(フォームの値が空白の場合は、A1セルも空白になります)
もしも、表示できればフォームの値は取得できていることになり、それ以外の部分に関しては何も情報が無いので、当方には推測のしようがありません。
No.1
- 回答日時:
こんにちは
C列のセルは取得できているのでしょうから、それを仮に「C列のセル」というRangeオブジェクトとします。
トリガーも不明ですが、UserForm内の処理で行うなら、
C列のセル.Offset(, 1).Value = ComboBox1.Text
で、転記できると思います。
その他の状態からForm内の要素を参照する場合は、
Userform2.ComboBox1.Text
としておく必要があるかも知れません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで、特定の文字より後を削除...
-
空白セルをとばして転記
-
VBAで重複データを確認したい
-
IIF関数の使い方
-
VBAで別のブックの値をVlookup...
-
オートフィルタをマクロで作成...
-
DataGridViewに空白がある場合...
-
【VBA】2つのシートの値を比較...
-
VBAを使って検索したセルをコピ...
-
VBA カスタムオーダーのあと...
-
VBA: 2列のリストボックスの2列...
-
vba 2つの条件が一致したら...
-
複数の列の値を結合して別の列...
-
VBAで、離れた複数の列に対して...
-
VBAのFind関数で結合セルを検索...
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
C# dataGridViewの値だけクリア
-
期限を超えた日付に警告のメッ...
-
【マクロ】実行時エラー '424':...
マンスリーランキングこのカテゴリの人気マンスリー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つの表の並べ替え
おすすめ情報
回答ありがとうございますm(__)m
現在C列に入力するとUserform2が開く仕様になっていると質問しましたが
エンター押した後にformが開きますのでカーソル位置は一段下に移動しています 試してみたのですがダメでした(´;ω;`)
説明下手ですみません(´;ω;`)
Range("A1").Value = Userform2.ComboBox1.TextはA1に転記できましたが
この場合ですとフォームを開いた行は関係なくComboBoxのコメントをA1にお転記させたということですよね?
現状はformを開いた下の段D列に転記されてしまいます
'JANを入力したら日付が転記される
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Application.EnableEvents = False
Target.Offset(, -1).Value = Now
Application.EnableEvents = True
'JAN入力したらformが開く
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
UserForm2.Show
End Sub
Cells(r.Row + r.Rows.Count, r.Column).End(xlDown).End(xlUp).Offset(0, 0).Select
For i = 4 To 20000
If Cells(i, 4).Value = "" Then Exit For
Next
'連番
Cells(i, 1).Value = i - 3
'出庫先
Cells(i, 4).Value = Me.ComboBox1.Text
Unload UserForm2
Exit Sub
End Sub
色々変えてみて現状これで同じ行のD列に転記できました・・・これで問題なさそうでしょうか?
今までC列の最下部だったんですがフォーム閉じた後のカーソルの位置がおかしくなってしまいました(´;ω;`)