• ベストアンサー

値を入力するマクロ

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

  • エクセル2007VBAで連続データ(文字列)の入力

    ●質問の主旨 エクセル2007のVBAでマクロを作成して 同じ列に次々と文字を入力していくにはどうすればよいでしょうか? ●質問の補足 ワークシートのA列に文字列を入力していくマクロを 作成しようとしています。コードの概要は以下の通りです。 1.1回目の入力でA1セルには文字列を入力 2.1のあとフォーカスがテキストボックスに戻る。 3.2回目の入力でテキストボックスに文字列を入力 4.2回目の文字列がA2セル入力 5.以下2~5が続く ところが4のところでA1セルの内容を消去して 2回目の文字列をそのままA1セルに入力してしまいます。 コードに問題があると考えられますが、 どこに問題があるでしょうか? 以下のコードと添付画像をご参照の上、 ご教示くだされば幸いです。 なお添付画像の内容は、作成目標である A列に次々と文字列が入力されていく「模範解答」です。 ●コード (General)-連続データ入力 Sub 連続データ入力() UserForm1.Show vbModal End Sub (General)-(Declaration) Dim CelNo As String Dim Pos As Integer (UserForm1:UserForm_Initialize) Private Sub UserForm_Initialize() Pos = 1 CelNo = "A" & Pos End Sub (UserForm1:InputBtn_Click) Private Sub InputBtn_Click() With Worksheets("sheet1") .Range(CelNo) = UserForm1.TextBox1.Text Pos = 1 CelNo = "A" & Pos .Range(CelNo).Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocus End Sub (UserForm1:CommandButton2_Click) Private Sub CommandButton2_Click() Unload UserForm1 End End Sub

  • Excel2007のマクロで文字列を結合

    Excel2007のマクロで文字列を結合したいのですがうまくいきません。 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

  • エクセル2007VBA 連続データ(文字列)の入力

    エクセル2007VBA 連続データ(文字列)の入力 ●質問の内容 エクセル2007のVBAでマクロを作成して 同じ列に次々と文字を入力していくには どうすればよいでしょうか? ●質問の補足 ワークシートのA列に文字列を入力していくマクロを 作成しようとしています。コードの 概要は以下の通りです。 1.1回目の入力でA1セルには文字列は入力 2.1のあとフォーカスがテキストボックスに戻る。 3.2回目の入力でテキストボックスに文字列を入力 4.2回目の文字列がA2セル入力 しかし4のところでA1セルの内容を消去して 2回目の文字列をそのままA1セルに入力してしまいます。 コードに問題があると考えられますが、どこに 問題があるでしょうか?以下のコードと添付画像を ご参照の上、ご教示くだされば幸いです。 なお添付画像の内容は、作成目標である A列に次々と文字列が入力されていく 「模範解答」です。 ●コード (General)-連続データ入力 Sub 連続データ入力() UserForm1.Show vbModal End Sub (General)-(Declaration) Dim CelNo As String Dim Pos As Integer (UserForm1:UserForm_Initialize) Private Sub UserForm_Initialize() Pos = 1 CelNo = "A" & Pos End Sub (UserForm1:InputBtn_Click) Private Sub InputBtn_Click() With Worksheets("sheet1") .Range(CelNo) = UserForm1.TextBox1.Text Pos = 1 CelNo = "A" & Pos .Range(CelNo).Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocus End Sub (UserForm1:CommandButton2_Click) Private Sub CommandButton2_Click() Unload UserForm1 End End Sub

  • マクロでExcelのセルに任意の文字列を追加するには?

    Excel2003 を使用しています。 文字列の入ったセルに任意の文字列を追加するマクロを 作りたいのですが、どのように記述すればよいのでしょうか? 例えば、郵便番号に〒を文字列の頭に追加したい場合です。 元のセルに入力されている文字列が 111-1111 として、マクロで、 〒111-1111 と同じセルに追記したいのです。 ご助言の程、どうぞよろしくお願いします。

  • 特定の列にのみダブルクリックでデータ入力したい

    ダブルクリックしたセルにA1セルのデータが入力されるマクロで、C列のみデータ入力を受け付け、他の列では入力されない(何も起きない)、というマクロを教えていただきたいです。よろしくお願いします。

  • EXCEL2003の入力方法について

    あるセル(結合セル…Aとする)に別シ-トのあるセル(結合セル…Bとする)の値(文字列)を反映させようと思い、Aのセルに「=」を入力し、Bのセルを指定しましたが、Aのセルに「=B」という数式が出てしまい、Bの値自体をAに反映させることが出来ません。どうすればいいのでしょうか?

  • エクセルのマクロで結合セルに値を貼り付けたい

    お世話になります。 マクロ初心者で本やネットで色々調べたのですが分からないため 教えていただけますと幸いです。 Sheet1にはB1:B3、B4:B6…と3行縦に結合された表があり、 Sheet2のA列には単独セルに商品の名前が入っております。 膨大な量のため、Sheet2のA列に入っている情報を Sheet1の縦に結合されたセルに一つずつマクロで転記したいと 考えております。 Range("B1:B100").Value = Range("A1:A100").Value のように記載すると、2個飛ばしで入力されてしまうので、 結合されている分飛ばされないで一つずつ転記したいのですが どのようにしたら良いでしょうか。

  • 空白なら入力、入力されていたら削除のマクロ

    A1セルに、B1セルに入力した文字をコピーするマクロを作りたいです。 ただし、常にB1セルに入力した文字をコピーするのではなく、A1セルに何も 入力されていなかった時だけ文字をコピーして、逆に何か入力されていた時はそれを 認識して、A1セルを空白にするマクロです。マクロの記録でうまくいかなかったので、お知恵を貸していただければ幸いです。。 (例) A1セルは空白 B1セルに あいうえお とかかれているとする    マクロボタンを押すと、 A1セルにあいうえお と入力される    もう一度同じマクロボタンを押すと、A1セルが空白になる(あいうえおが削除される)    更にもう一度同じマクロボタンを押すとA1セルにあいうえお と入力・    これの繰り返しです。

  • Excel2007のマクロについての質問です。

    Excel2007で以下のようなマクロは、どのように作成すれば良いのでしょうか? マクロを実行すると、メールが作成される。ただし、アドレスにはセルC3の内容が入力されており、件名にはセルB2の内容が入力されており、メール本文にはセルA1の内容が入力されている。メールはOutlook2007を使用しています。 また、アドレスや件名や本文に特定の文字列を入力する方法や、WordまたはExcelファイルを添付する方法も教えて頂ければ幸いです。 以上、宜しくお願い致します。

  • エクセル2013 マクロの最大値

    エクセル初心者です。セルをダブルクリックしたときに、最大値に+1の値をセルに自動入力したいのですが・・・。まず、シート1のC列とシート2のC列から最大値を探し、その値+1の数字を入力したいです。現在の時点で3、4、5の列にデータが入力されているのでC6をダブルクリックしたときに、マクロ実行されるようにしたいです。データは、増えていくのでC6は固定ではありません。C列の未入力のセルをダブルクリックしたときに、自動入力されるということです。 おわかりの方がいらしたら、ご教示お願いいたします。

専門家に質問してみよう