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

EXCELでマクロを作成しています
ユーザーフォームを使用し、コンボボックスでセルを選択し、その選択したセルにテキストボックスから文字を入力できるようになっています。

選択したセルが空白ならそのままテキストボックスの文字を挿入し、
もし選択したセルにすでに文字が入力されている場合は、すでに入力されている文字+テキストボックスの文字、という風にしたいと思っています。
例:選択したセル  「ガソリン代」
  テキストボックス「高速代」
  → 『ガソリン代高速代』
 その次も同じセルを選択した場合  
  テキストボックス「電車代」
  → 『ガソリン代高速代電車代』
このような感じです。
文字をどこかに代入してテキストボックスの文字と&で結んで入れてやれば良いのかもしれませんがつまづいております。

ぜひ助けていただければうれしく思います
よろしくお願いします。

A 回答 (3件)

#01です。


UserformにTextBox1(費目)とTextBox2(代金)とCommandButton1があるとします。費目はA1セルに、代金はB1セルに連結してゆくなら、こんな感じでしょうか。

Private Sub CommandButton1_Click()
  Range("A1").Value = Range("A1").Value & TextBox1.Value
  If Range("B1").HasFormula Then
    Range("B1").FormulaLocal = Range("B1").FormulaLocal & "+" & TextBox2.Value
  Else
    Range("B1").FormulaLocal = "=" & TextBox2.Value
  End If
End Sub

HasFormulaプロパティで「数式が入力されているか」を判断できます。数式がない場合は先頭に「=」をつけて数式にしています。
またTextBoxの値は文字列です。数字以外が入力されると式の答えは不正になりますからIsNumericなどを用いてチェックする方が良いでしょうね。
    • good
    • 3
この回答へのお礼

回答してくださりありがとうございます!

HasFormulaやFormulaLocalという文を知りませんでした。
回答してくださった内容をアレンジすることでやりたかったことができました。
感激です!
参考のために記載しておきます。

Private Sub CommandButton1_Click()
Dim ctrl As Control, tst1 As String, txt2 As String
Dim ws As Worksheet, r As Long, c As Long

Set ws = Sheets("sheet1")
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "TextBox1"
If Me.Controls(ctrl.Name).Value = "" Then
txt1 = txt1 & ctrl.Name & vbLf
Else
txt2 = txt2 & Me.Controls(ctrl.Name).Value & vbLf
End If
End Select
Next

If Len(txt1) > 0 Then
MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
Exit Sub
Else
ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
If ret <> vbOK Then Exit Sub
r = Me.ComboBox1.ListIndex + 5
c = Me.ComboBox2.ListIndex + 19
If ws.Cells(r, c).HasFormula Then
ws.Cells(r, c).FormulaLocal = ws.Cells(r, c).FormulaLocal & "+" & TextBox1.Value
Else
ws.Cells(r, c).FormulaLocal = "=" & TextBox1.Value

End If

If ws.Cells(r, 18) = 0 Then
ws.Cells(r, 18) = Me.TextBox2.Text
Else
ws.Cells(r, 18).Value = ws.Cells(r, 18).Value & "," & TextBox2.Value
End If
End If

Set ws = Nothing

End Sub

丁寧な回答をしてくださったzap35さんに感謝します。
ありがとうございました。

お礼日時:2008/09/20 20:08

>&で結んで入れてやれば良いのかもしれませんがつまづいております


・・・
その通り。
どういう風にうまく行かないか書かずして質問にならにと思う。
具体例をあげて、補足すべき。
肝心なのはそれで、それより前は長々と質問に書く必要は無いぐらいだ、と思う。

この回答への補足

セルに既に入っていた文字と、テキストボックスの文字を連結してセルに表示させることは#1の方の回答で解決しました。
しかし、もじを連結させる方法が分かれば解決すると思っていた、数式を連結させるということができませんでした。

単に、セルに入力されていた数とテキストボックスに入力した数を足していくだけならできるのですが、式を残しながら3回以上連結していくことができません。
例:
=1と入っているセルに「1」をたすと「=1+1」とここまではできます。
このセルに「1」を足すと「=1+1+1」としたいのですが、「=2+1」となってしまいます。
このセルにさらに「1」を足すと「=1+1+1+1」としたいのですが、「=3+1」となってしまいます。

数式の答えとしては良いのですが、何と何を足してその数が出たのかをセルに残したいのです。

もしまだ説明不足の点があれば指摘してください。
よろしくお願いします。

補足日時:2008/09/20 13:27
    • good
    • 1

文字を連結するのは簡単です


 Range("A1").Value = Range("A1").Value & TextBox1.Value
のようにすればよいのですが

>コンボボックスでセルを選択し、その選択したセルにテキストボックスから
>文字を入力できるようになっています
コンボボックスでどのようにセルを選択させるのでしょうね?

もしコンボボックスの値が"A1"のようなセルアドレスなら
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Range(ComboBox1.Value).Value = Range(ComboBox1.Value).Value & TextBox1.Value
End Sub
でも良いかもしれません。ただしComboBox1の値が「空白」だと当然エラーになりますから、コンボボックスの値を先にチェックしなければなりませんよ
    • good
    • 0
この回答へのお礼

早速回答してくださりありがとうございます。
文字を連結させることはおっしゃるとおり質問したのが恥ずかしいくらい簡単にできました。ありがとうございます。

実は、文字が連結できれば解決するかと思って最初の質問には書かなかったのですが、セルの数式も連結したいのです。
ただ単に、セルの数を足していくだけならできるのですが、式を残しながら3回以上連結していくことができません。
=1と入っているセルに「1」をたすと「=1+1」とここまではできます。
このセルに「1」を足すと「=1+1+1」としたいのですが、「=2+1」となってしまいます。
答えとしては良いのですが、どのような計算で答えが出たのかをセルに残したいのです。
良い案があればそれも教えてください。

お礼日時:2008/09/20 10:45

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

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


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