dポイントプレゼントキャンペーン実施中!

エクセルの挿入から作成できる縦書きテキストボックスなんですが、書式などそのままで文字だけ編集がしたいです。

inputboxのようなメッセージ画面に入力したものがテキストボックスに反映されたら1番理想ですが可能でしょうか?

不可能な場合、inputboxでセルP4に入力した文字をテキストボックスの書式そのままに反映させるでも大丈夫です。

ちなみに用途ですが、テキストボックスには最初から名字が入力されていて、田中や佐藤などとVBAを使用してテキストボックスに触らず編集するのに用いたいと思っており、もし可能であればinputboxに入力する際に新規入力ではなく入力してあるものの編集、ができたらなと……

VBAそこまで詳しくないのでコピペできるように書いて頂けたら幸いです。そしてinputboxしか知らないもので他に良い手段あればそれで書いて頂いても構いません。

テキストボックスはText Box 17 です。
何卒ご教示よろしくお願いします( *´ω`*)

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

  • 回答くださった方ありがとうございます!

    追加でですが、入力した文字を改行したい場合は入力時にスペースを入れて調節するしかないでしょうか?

    基本的に佐藤や工藤など名字なのですが、会社名で長い文字を入ラ

      補足日時:2019/12/13 18:55
  • 途中で送ってしまいました。笑

    会社名で長い文字を入力したい場合、テキストボックスのサイズに合わせて改行して綺麗に収めたいのですが、それは入力後に調節する以外に方法はないものでしょうか……?

      補足日時:2019/12/13 18:58

A 回答 (9件)

改行したいところで特定の文字(今回は「++」ですが自由に変更して下さい)を改行コードに変換する方法です。

ただし InputBox は1行しか表示できないので元々複数行が入っていると入力ミスになるかも?

Sub sample()
Dim 戻り値 As Variant
 ActiveSheet.Shapes("Text Box 17").Select
 戻り値 = Application.InputBox(Prompt:="名前を入力してください。", Title:="名前編集", Default:=Selection.Text)
 If Not 戻り値 = False Then
  戻り値 = Replace(戻り値, "++", vbLf)
  Selection.Text = 戻り値
 End If
 ActiveCell.Select
End Sub
    • good
    • 1
この回答へのお礼

あなたに会えてよかった

ありがとうございます!
イメージしていた通りになり感動しました!なるほどこういうやり方があるのですね…すぐにお返事いただけたこともありベストアンサーとさせていただきます!ありがとうございました|・ω・*)

お礼日時:2019/12/14 20:42

#7#8です。

またやらかしてしまいました。
貴重な時間を使わせてしまったかもです。申し訳ございません。
ラベルは、入力できませんね。どうしてこのような回答をしたか、穴を掘って埋めたい気分です。
せっかくなので、TextBoxを使えば出来るので それを上げさせていただきます。
#5の②番目の例です。

#7で挙げた作り方でラベルを ab| テキストボックスに変えてUserFormを作成してください。#5の図のようになります。
作成されたUserForm上でダブルクリックして各コードをコピペしてください。
なお、テキストボックス内での改行はCtrl+Enterになります。

Private Sub UserForm_Initialize() 'UserForm表示される時にText Box 17の内容をUserFormのTextBox1に抽出します。
With TextBox1
.Text = ActiveSheet.TextBoxes("Text Box 17").Text
.MultiLine = True
End With
End Sub

Private Sub CommandButton1_Click() 'ボタンを押すとUserForm.TextBox1のテキストがText Box 17に入力されます。
ActiveSheet.TextBoxes("Text Box 17").Text = TextBox1.Text
End Sub

UserFormの表示方法は、
Sub sample()
UserForm1.Show
End Sub

#7#8を色々と検証されていたとしましたら、重ねてお詫びいたします。
申し訳ございませんでした。
    • good
    • 1
この回答へのお礼

天才やな

たくさんありがとうございます!
いえいえ、試行錯誤してる時間も勉強になるので謝らないでください…!

難しいながらもやってみたらなんとなくわかってきました!こういうやり方もあるんですね…いやはや頭があがりません。いろいろ試してみようと思います!ありがとうございました|・ω・*)

お礼日時:2019/12/14 20:39

追記:ユーザーフォーム、各コントロールのプロパティは、プロパティウインドウから行うかVBAから設定します。


色やフォント、サイズなどプロパティは沢山あるのでVBAラベルのプロパティなどで調べてください。

参考:VBAラベルのプロパティ https://kosapi.com/post-3506/
    • good
    • 1

#5です。

やはり直接が良いような気がしますが、他のケースも考え作りました。
この場合は、分かりにくいかもしれませんが、UserFormで行きます。可視的にもその方が良いと思います。
作り方、VBEを開き、挿入からユーザーフォームを押し作成します。サイズは適時変えてください。
作成出来たら、表示からツールボックスを押し、表示させます。
先ず、ツールボックスのコントロールの中から、A ラベルを押し 先ほどのユーザーフォーム上でテキストボックスを作るように作成します。
次にツールボックスからコマンドボタンを押し、同様にユーザーフォーム上に作成します。ここ迄出来れば、後はコードをコピペします。
#作成された各コントロールナンバーが1として示します。

Option Explicit
Private Sub CommandButton1_Click() 'ボタンを押すとUserForm.Label1のテキストがText Box 17に入力されます。
  ActiveSheet.TextBoxes("Text Box 17").Text = Label1.Caption
  Label1.Caption = ""
End Sub

Private Sub UserForm_Initialize() 'UserForm表示される時にText Box 17の内容をUserFormのLabel1に抽出します。
  Label1.Caption = ActiveSheet.TextBoxes("Text Box 17").Text
End Sub

はじめは、ラベルにLabel1と表示されていますが、使用すると消えます。
ユーザーフォーム、コマンドボタンの表示文字は先の回答の図のように書き換えることも出来ます。
(書き換えは、各コントロールのCaptionプロパティです)

テキスト入力時の改行はShift+Enterで改行できます。入力時の文字がボタンを押すとText Box 17に入力されます。

UserFormの表示方法は、
Sub sample()
UserForm1.Show
End Sub

などで出来ます。
    • good
    • 1

Inputbox なら


標準モジュールで
Option Explicit
Sub sample()
Dim strExist As String
 strExist = ActiveSheet.TextBoxes("Text Box 17").Text
 ActiveSheet.TextBoxes("Text Box 17").Text = strExist & InputBox("Text Box 17を編集します。")
End Sub

UserFormを作成した場合、Formモジュールに

CommandButton1とTextBox1、Label1を配置して画像の様に

Option Explicit
Private Sub UserForm_Initialize() ’UserForm表示される時にText Box 17の内容をUserFormのTextBox1に抽出します。
 TextBox1.Text = ActiveSheet.TextBoxes("Text Box 17").Text
End Sub

Private Sub CommandButton1_Click() ’ボタンを押すとUserForm.TextBox1のテキストがText Box 17に入力されます。
 ActiveSheet.TextBoxes("Text Box 17").Text = TextBox1.Text
End Sub

いずれにしても、入力作業が発せしますね。処理的にどうでしょうか?
>セルP4に入力した文字をテキストボックスの書式そのままに反映させる
こちらの方が、合理的な気がしますが、、、
下記の場合、Text Box 17の既存のテキストが入らないので工夫が必要です。
コードを書くのは、対象のシートモジュールです。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Target.Address = "$P$4" Then
   ActiveSheet.TextBoxes("Text Box 17").Text = Target.Value
  End If
End Sub

以上 3通りのサンプルです。
「VBAでテキストボックス内の編集をする方」の回答画像5
    • good
    • 1
この回答へのお礼

助かりました

回答ありがとうございます!
きっと素敵な手段なんでしょうが、後半難しくて頭が付いていかず……前半は試したら思い通りの形になりました!

補足を追加させていただいたのですが、こちらはできたりしますでしょうか。。

お礼日時:2019/12/13 19:05

No.2、No.3 の補足



なぜ「InputBox関数」を使わず「InputBoxメソッド」を使ったかというと「キャンセル」ボタンを押したときと、空欄で「OK」ボタンを押したときの動作を分けたかったからです。
    • good
    • 1
この回答へのお礼

天才やな

回答ありがとうございます!
たくさん丁寧にありがとうございました、、試したらできました!

補足を追加させていただいたのですが、こちらはできたりしますでしょうか。。

お礼日時:2019/12/13 19:02

No.2 の訂正です



「選択状態にしないとテキストボックスの値を得る事が出来ない」は勘違いの様です。
「Shapes」を使ったのが悪かったようです「TextBoxes」なら可能でした。(hotosys 様 感謝)

Sub sample2()
Dim 戻り値 As Variant
 戻り値 = Application.InputBox(Prompt:="名前を入力してください。", Title:="名前編集", Default:=ActiveSheet.TextBoxes("Text Box 17").Text)
 If Not 戻り値 = False Then ActiveSheet.TextBoxes("Text Box 17").Text = 戻り値
End Sub
    • good
    • 1

もしかしたらこんな事でしょうか?



Sub sample()
Dim 戻り値 As Variant
 ActiveSheet.Shapes("Text Box 17").Select
 戻り値 = Application.InputBox(Prompt:="名前を入力してください。", Title:="名前編集", Default:=Selection.Text)
 If Not 戻り値 = False Then Selection.Text = 戻り値
 ActiveCell.Select
End Sub

※ 動作しないようでしたら「Text Box 17」を「TextBox 17」にしてみて下さい(何もしなければ「Text」と「Box」の間にスペースは入らないので…)
※ 選択状態にしないとテキストボックスの値を得る事が出来ないので、最後にアクティブセルを選択してごまかしています。
※「Title:="名前編集",」は省いても問題ありません。(省くときは終わりの「,」も省くのを忘れないように)
    • good
    • 1

不明な部分がありますが、これでどうでしょうか。



Sub sample()
ActiveSheet.TextBoxes("Text Box 17").Text = InputBox("文字列=")
End Sub
    • good
    • 1
この回答へのお礼

助かりました

回答ありがとうございます!
試したらできました!
補足を追加させていただいたのですが、こちらはできたりしますでしょうか。。

お礼日時:2019/12/13 19:01

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

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


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