アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在C列に入力するとUserform2が開く仕様になっています
その入力した行のD列にUserform2のComboBox1で選んだコメントを転記させたいのですが
どのようなコードになりますか?

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

  • 回答ありがとうございますm(__)m
    現在C列に入力するとUserform2が開く仕様になっていると質問しましたが
    エンター押した後にformが開きますのでカーソル位置は一段下に移動しています 試してみたのですがダメでした(´;ω;`)

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/12/22 12:33
  • 説明下手ですみません(´;ω;`)
    Range("A1").Value = Userform2.ComboBox1.TextはA1に転記できましたが
    この場合ですとフォームを開いた行は関係なくComboBoxのコメントをA1にお転記させたということですよね?
    現状はformを開いた下の段D列に転記されてしまいます

      補足日時:2023/12/22 13:27
  • '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

      補足日時:2023/12/22 13:44
  • 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列の最下部だったんですがフォーム閉じた後のカーソルの位置がおかしくなってしまいました(´;ω;`)

      補足日時:2023/12/22 15:19

A 回答 (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
    • good
    • 0

No2です。



ようやくのこと、情報が示されたので理解できましたが・・・

補足でご提示のプロシージャ内では変数TargetにC列のセルが取得できているはずです。
(コピペなどを行うと複数セルになるので、ご提示の処理だといろいろと問題はありますが・・)

とりあえず、一つのセルしか変わっていない場合に限定してもよいのなら、
Targetセルの右側のセル(= .Offset(,1))がD列のセルになります。

一方で、問題となっている処理をどこで実行しているのかは未だに不明のままですが、勝手に妄想するところ、UserForm2のプロシージャ内ではないかと想像しました。
プロシージャが別な場合には変数は直接参照できませんので、対象セル位置をプロシージャ間で受け渡す必要があります。
方法としては、
 1)グローバル変数を利用して受け渡す
 2)シート上の対象セルをアクティブにしておいて受け渡す
 3)フォーム上の(非表示)ラベルなどに対象セルアドレスを記入して受け渡す
等が考えられます。
元のプロシージャに制御を戻すことも考えられますが、処理の構造が複雑で面倒になるだけと思います。

上記の1)~3)のいずれかで対応するのが簡便でしょう。
(2)はアクティブセルが移動してしまうので、UIとしては良くないかも知れません)
    • good
    • 9

>Target.Offset(, -1).Value = Now



既に解決には近づかれているのでは?
Offsetにて微調整するとか。
    • good
    • 0

>現在C列に入力するとUserform2が開く仕様になっている



このマクロを提示していただければ、良い回答が得られやすくなるかと思います。
    • good
    • 0

No1です。



>試してみたのですがダメでした
2択方式でしか情報がないので、ほぼ何もわかりませんけれど・・・

同じダメでも、原因はいろいろ考えられます。
 ・転記対象セルが取得できずにエラーになる
 ・フォームの値が取れずエラーになる
 ・対象セルが違う所になる
 ・フォームの値が違う値になる
   ・・・・
などなど、いろいろです。
また、どういう状況で実行されているのかにもよるところがあります。

試しに、
 Range("A1").Value = Userform2.ComboBox1.Text
とすれば、A1セルに値が表示されませんか?
(フォームの値が空白の場合は、A1セルも空白になります)
もしも、表示できればフォームの値は取得できていることになり、それ以外の部分に関しては何も情報が無いので、当方には推測のしようがありません。
    • good
    • 6

こんにちは



C列のセルは取得できているのでしょうから、それを仮に「C列のセル」というRangeオブジェクトとします。

トリガーも不明ですが、UserForm内の処理で行うなら、
 C列のセル.Offset(, 1).Value = ComboBox1.Text
で、転記できると思います。

その他の状態からForm内の要素を参照する場合は、
 Userform2.ComboBox1.Text
としておく必要があるかも知れません。
この回答への補足あり
    • good
    • 5

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

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


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