• ベストアンサー

値を入力するマクロ

excel2007です。 理想は、A1をダブルクリックすると、UserFormが立ち上がって そこに文字列を入力すると、A1にその内容が反映される。 しかし、もともとA1に文字が入っている場合、その内容が消えないようにしたいのです。(追記する) A1は結合セルです。 どのようにマクロを組むとスマートでしょうか・・・・ 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

>A1をダブルクリックすると シートモジュールの Worksheet_BeforeDoubleClickイベント を使う >UserFormが立ち上がって UserForm1.Show 0 あるいは UserForm1.Show でユーザーフォームを表示 >そこに文字列を入力すると、A1にその内容が反映される。 どこに入れるのでしょう? どの時点で反映するのでしょう? >もともとA1に文字が入っている場合、その内容が消えないようにしたいのです。(追記する) A1に入力されていてもされていなくても With ThisWorkbook.Worksheets(1).Range("A1") .Value = .Value & "文字列" End With でA1の文字列に追記できます。

mimomosan
質問者

お礼

ご回答ありがとうございます。

mimomosan
質問者

補足

有難うございます! 少し見えてきました。 文字を入れるのは、UserFormのテキストボックス内、 UserFormのボタンをおしたら、反映、という感じです。 もうひとつ、教えて頂きたいのですが、 Private Sub CommandButton1_Click() With ActiveSheet.Range("R30") .Value = .Value & UserForm1.TextBox1.Value End With としてみました。(入力したいセルはR30として) すでに入力されている文字と新たに入れる文字の間に「改行」を入れるのにはどうした良いでしょうか? また、すでに入力されている文字をUserFormのテキストボックス内に 反映させる方法ってありますでしょうか?

その他の回答 (6)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.7

No2,No5 merlionXXです。 改行の件、ちょっとお馬鹿な回答をしてしまいました。 あのコードでは、最初にA1セルが空白だった場合、1行目が空白として改行されてしまいますね。 お恥ずかしい (///▽///) これじゃだめなら(多分ダメでしょうね) Target.Value = Target.Value & IIf(Target.Value = "", "", Chr(10)) & myStr に変えてください。やってることはわかりますよね?

mimomosan
質問者

お礼

気付かなかったです!A1にもともと文字が入っていたので・・・ これ、すごいです。空白でも↑でいけました♪ とりあえず、コピペして、意味なく、ダブルクリックして入力してます。 楽しいです。 解読は・・・明日にします。 たまってる仕事かたずけます! 有難うございました。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.6

スペースではなく改行でしたね。 失礼しました。 改行は VbLf でもいけます。

mimomosan
質問者

お礼

いえいえ。独学で基礎ができていないので、 ちょっとした違いで、まったく前に進めなくなります。 ですから、本当にありがたいです。しっかりブクマします。 有難うございます!

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

No2 merlionXXです。 > すでに入力されている文字と新たに入れる文字の間に「改行」を入れるのにはどうした良いでしょうか? No2で書いたコードの Target.Value = Target & myStr を、改行文字のChr(10)を入れて Target.Value = Target.Value & Chr(10) & myStr と変更してみてください。

mimomosan
質問者

お礼

HTMLみたいに、特殊文字があるのですね・・・ はじめて知りました。 その発想がありませんでした(笑) なんとか、仕上がりました。 有難うございます!

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.4

#1、3です。 すでにセルに文字列が入っている場合は、 With ActiveSheet.Range("R30") .Value = .Value & " " & UserForm1.TextBox1.Value End With でいいですが、R30に何も入っていない場合は、 セルの先頭にスペースが入ってしまいます。 セルの先頭にスペースを入れたくない場合は、 With ActiveSheet.Range("R30") If .Value = "" Then .Value = UserForm1.TextBox1.Value Else .Value = .Value & " " & UserForm1.TextBox1.Value End If End With と条件分岐します。

mimomosan
質問者

お礼

追記説明、ありがとうございます。 どうにかできそうです。 いつも感謝しております♪

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

#1です。 すでに入っている文字列との間にスペースをいれるには、 With ActiveSheet.Range("R30") .Value = .Value & " " & UserForm1.TextBox1.Value End With とします。 指定の文字列を間に入れるには、 Dim moji As String mpji = " " '間に入れる文字指定 With ActiveSheet.Range("R30") .Value = .Value & moji & UserForm1.TextBox1.Value End With スペースに限定なら With ActiveSheet.Range("R30") .Value = .Value & Space(1) & UserForm1.TextBox1.Value End With Space(数値) で指定の数だけ半角スペースを挿入できます。

mimomosan
質問者

お礼

なるほど~ 色々活用できそうです。 ありがとうございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

それだけの作業なら何もUserFormを持ち出すことはないと思います。 該当のワークシートのシートモジュールに以下をコピペしてみてください。 A1以外のダブルクリックでは作動しません。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address(0, 0) <> "A1" Then Exit Sub Cancel = True myStr = Application.InputBox("(´^∇^)σ", "ご入力ください。 ") If myStr = False Then MsgBox "キャンセルしました。" Else Target.Value = Target & myStr End If End Sub

mimomosan
質問者

お礼

ご回答ありがとうございます。 そんなやり方があったんですね・・・・ うぅ~merlionXXさんが、隣にいてくれたら・・・(泣) 色々いじってみます。 ありがとうございます!

関連するQ&A

専門家に質問してみよう