EXCELでマクロを作成しています
ユーザーフォームを使用し、コンボボックスでセルを選択し、その選択したセルにテキストボックスから文字を入力できるようになっています。
選択したセルが空白ならそのままテキストボックスの文字を挿入し、
もし選択したセルにすでに文字が入力されている場合は、すでに入力されている文字+テキストボックスの文字、という風にしたいと思っています。
例:選択したセル 「ガソリン代」
テキストボックス「高速代」
→ 『ガソリン代高速代』
その次も同じセルを選択した場合
テキストボックス「電車代」
→ 『ガソリン代高速代電車代』
このような感じです。
文字をどこかに代入してテキストボックスの文字と&で結んで入れてやれば良いのかもしれませんがつまづいております。
ぜひ助けていただければうれしく思います
よろしくお願いします。
No.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などを用いてチェックする方が良いでしょうね。
回答してくださりありがとうございます!
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さんに感謝します。
ありがとうございました。
No.2
- 回答日時:
>&で結んで入れてやれば良いのかもしれませんがつまづいております
・・・
その通り。
どういう風にうまく行かないか書かずして質問にならにと思う。
具体例をあげて、補足すべき。
肝心なのはそれで、それより前は長々と質問に書く必要は無いぐらいだ、と思う。
この回答への補足
セルに既に入っていた文字と、テキストボックスの文字を連結してセルに表示させることは#1の方の回答で解決しました。
しかし、もじを連結させる方法が分かれば解決すると思っていた、数式を連結させるということができませんでした。
単に、セルに入力されていた数とテキストボックスに入力した数を足していくだけならできるのですが、式を残しながら3回以上連結していくことができません。
例:
=1と入っているセルに「1」をたすと「=1+1」とここまではできます。
このセルに「1」を足すと「=1+1+1」としたいのですが、「=2+1」となってしまいます。
このセルにさらに「1」を足すと「=1+1+1+1」としたいのですが、「=3+1」となってしまいます。
数式の答えとしては良いのですが、何と何を足してその数が出たのかをセルに残したいのです。
もしまだ説明不足の点があれば指摘してください。
よろしくお願いします。
No.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の値が「空白」だと当然エラーになりますから、コンボボックスの値を先にチェックしなければなりませんよ
早速回答してくださりありがとうございます。
文字を連結させることはおっしゃるとおり質問したのが恥ずかしいくらい簡単にできました。ありがとうございます。
実は、文字が連結できれば解決するかと思って最初の質問には書かなかったのですが、セルの数式も連結したいのです。
ただ単に、セルの数を足していくだけならできるのですが、式を残しながら3回以上連結していくことができません。
=1と入っているセルに「1」をたすと「=1+1」とここまではできます。
このセルに「1」を足すと「=1+1+1」としたいのですが、「=2+1」となってしまいます。
答えとしては良いのですが、どのような計算で答えが出たのかをセルに残したいのです。
良い案があればそれも教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
ExcelVBAで選択したセルに頭に文字を追加するマクロ
Excel(エクセル)
-
マクロでExcelのセルに任意の文字列を追加するには?
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
7
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
12
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
13
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
14
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
-
15
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
16
VBA 書式設定を保持したままセル内の文字を追記
Excel(エクセル)
-
17
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
18
別のシートから値を取得するとき
Visual Basic(VBA)
-
19
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
20
文字列の結合を空白行まで実行
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
エクセルのセルの枠を超えて文...
-
Excelで数式内の文字色を一部だ...
-
エクセルの書式設定の表示形式...
-
(Excel)数字記入セルの数値の後...
-
【Excel】 セルの色での判断は...
-
エクセルで住所と建物名を分け...
-
エクセル 足して割る
-
エクセルの一つのセルに複数の...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
枠に収まらない文字を非表示に...
-
excelの特定のセルの隣のセル指...
-
エクセル オートフィルタで絞...
-
エクセルでオブジェクトを常に...
-
数式を残したまま、別のセルに...
-
EXCEL VBA セルに既に入...
-
複数のセルのいずれかに数字が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
【エクセル】IF関数 Aまたは...
-
Excelで数式内の文字色を一部だ...
-
エクセルで指定したセルのどれ...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
対象セル内(複数)が埋まった...
-
【Excel】 セルの色での判断は...
-
エクセル オートフィルタで絞...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
Excel 例A(1+9) のように番地の...
-
エクセルのセルの枠を超えて文...
-
エクセル 足して割る
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
Excel for Mac使用中ポインタが...
-
エクセルで住所と建物名を分け...
-
EXCEL VBA セルに既に入...
おすすめ情報