ユーザーホーム上でリストボックスの中に表示される文字数を制限したいです
エクセル/VBAでユーザーホームを使った検索機能をつくり
検索した結果をリストボックスに表示して選択すると詳細が出る
というものを作成したのですが文字数が多いものは枠から
はみ出る形で見栄えが悪いので表示するときのみ文字数を制限したいのでしょうか?
出来るのであれば下記の画像のようにしてみたいと思ってます。
ソースコードはネットのサンプルを少し治したものになります
該当のソースコード!
Option Explicit '連絡ツールのリストボックス Private Sub UserForm_Initialize() With ContactTool .AddItem "電話" .AddItem "Cメール" .AddItem "社内メール" .AddItem "Line" .AddItem "Slack" .AddItem "その他" End With End Sub '登録確認 Private Sub Registration_Click() If UserForm1.NameBox.Value = "" Or UserForm1.TextBox1.Value = "" Then MsgBox "未入力があります" Else Call UserForm1.Registration_Click2 End If End Sub 'エクセルに登録 Sub Registration_Click2() Dim Name As Long Dim rc As VbMsgBoxResult Name = 1 Do Until Cells(Name, 1) = "" Name = Name + 1 Loop rc = MsgBox("登録しますか?", vbYesNo + vbQuestion) If rc = vbYes Then MsgBox "登録しました", vbInformation Worksheets("sheet1").Cells(Name, 1).Value = Format(Now, "mm月dd日 hh時") Worksheets("sheet1").Cells(Name, 2).Value = UserForm1.Affiliation.Value Worksheets("sheet1").Cells(Name, 3).Value = UserForm1.NameBox.Value Worksheets("sheet1").Cells(Name, 4).Value = UserForm1.ContactTool.Value Worksheets("sheet1").Cells(Name, 5).Value = UserForm1.TextBox1.Value Affiliation.Value = "" NameBox.Value = "" ContactTool.Value = "" TextBox1.Value = "" Else MsgBox "処理を中止します", vbCritical End If End Sub '検索を実行します。部分一致検索を行っています。 'Private Sub Search_Click() 'If SearchBox.Value = "" Then 'MsgBox "データがありません" 'Else 'Call UserForm1.Search_Click2 'End If 'End Sub Sub Search_Click() Dim lastRow As Long Dim myData, myData2(), myno Dim i As Long, j As Long, cn As Long Workbooks("営業用メモV3.xlsm").Activate '検索するデータを配列 myData に格納しています。 With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(1, 1), .Cells(lastRow, 5)).Value End With '配列 myData の中で検索で一致したデータを配列 myData2 に格納しています。 ReDim myData2(1 To lastRow, 1 To 5) For i = LBound(myData) To UBound(myData) If myData(i, 2) Like "*" & SearchBox.Value & "*" And myData(i, 3) Like "*" & SearchBox2.Value & "*" Then cn = cn + 1 myData2(cn, 1) = myData(i, 1) myData2(cn, 2) = myData(i, 2) myData2(cn, 3) = myData(i, 3) myData2(cn, 4) = myData(i, 4) myData2(cn, 5) = myData(i, 5) End If Next i '検索で一致したデータをリストボックスに表示 With ListBox1 .ColumnCount = 5 .ColumnWidths = "88;40;55;60;50" .List = myData2 End With End Sub 'リストボックスの詳細を表示 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) With ListBox1 If .ListIndex = -1 Then MsgBox "未選択です。" Else MsgBox .List(.ListIndex, 4), Title:="メモ詳細" End If End With End Sub Private Sub end_Button_Click() Unload UserForm1 If (Workbooks.Count = 1) Then ' 開いているブックが自身のみの場合はExcelを終了させる ThisWorkbook.Save Application.Quit End If ThisWorkbook.Save Workbooks("営業用メモV3.xlsm").Close End Sub
セルに代入される文字列が長いから、最初の何文字かにする?ですかね。
×ホーム
〇フォーム
リストボックスの中に表示される文字数を制限したい
文字数がはみ出るのはUserForm1.TextBox1.Value
なんか言ってることが矛盾しているのですが。
リストボックスにはTextBox1に入力したものが表示されるということでしょうか?
入力する文字数を制限したいのか、そちらはそのままで表示するときのみ文字数を制限したいのでしょうか?
ttyp03様
説明があやふやで申し訳ありません。
やりたいことは後者の表示するときのみ文字数を制限したいのですができますでしょうか?
リストボックスの処理を提示していただければ検討します。
ttyp03様
見づらいかとは思いますがソースコードの全容です
Option Explicit
'連絡ツールのリストボックス
Private Sub UserForm_Initialize()
With ContactTool
.AddItem "電話"
.AddItem "Cメール"
.AddItem "社内メール"
.AddItem "Line"
.AddItem "Slack"
.AddItem "その他"
End With
End Sub
'登録確認
Private Sub Registration_Click()
If UserForm1.NameBox.Value = "" Or UserForm1.TextBox1.Value = "" Then
MsgBox "未入力があります"
Else
Call UserForm1.Registration_Click2
End If
End Sub
'エクセルに登録
Sub Registration_Click2()
Dim Name As Long
Dim rc As VbMsgBoxResult
Name = 1
Do Until Cells(Name, 1) = ""
Name = Name + 1
Loop
rc = MsgBox("登録しますか?", vbYesNo + vbQuestion)
If rc = vbYes Then
MsgBox "登録しました", vbInformation
Worksheets("sheet1").Cells(Name, 1).Value = Format(Now, "mm月dd日 hh時")
Worksheets("sheet1").Cells(Name, 2).Value = UserForm1.Affiliation.Value
Worksheets("sheet1").Cells(Name, 3).Value = UserForm1.NameBox.Value
Worksheets("sheet1").Cells(Name, 4).Value = UserForm1.ContactTool.Value
Worksheets("sheet1").Cells(Name, 5).Value = UserForm1.TextBox1.Value
Affiliation.Value = ""
NameBox.Value = ""
ContactTool.Value = ""
TextBox1.Value = ""
Else
MsgBox "処理を中止します", vbCritical
End If
End Sub
'検索を実行します。部分一致検索を行っています。
'Private Sub Search_Click()
'If SearchBox.Value = "" Then
'MsgBox "データがありません"
'Else
'Call UserForm1.Search_Click2
'End If
'End Sub
Sub Search_Click()
Dim lastRow As Long
Dim myData, myData2(), myno
Dim i As Long, j As Long, cn As Long
Workbooks("営業用メモV3.xlsm").Activate
'検索するデータを配列 myData に格納しています。
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
myData = .Range(.Cells(1, 1), .Cells(lastRow, 5)).Value
End With
'配列 myData の中で検索で一致したデータを配列 myData2 に格納しています。
ReDim myData2(1 To lastRow, 1 To 5)
For i = LBound(myData) To UBound(myData)
If myData(i, 2) Like "*" & SearchBox.Value & "*" And myData(i, 3) Like "*" & SearchBox2.Value & "*" Then
cn = cn + 1
myData2(cn, 1) = myData(i, 1)
myData2(cn, 2) = myData(i, 2)
myData2(cn, 3) = myData(i, 3)
myData2(cn, 4) = myData(i, 4)
myData2(cn, 5) = myData(i, 5)
End If
Next i
'検索で一致したデータをリストボックスに表示
With ListBox1
.ColumnCount = 5
.ColumnWidths = "88;40;55;60;50"
.List = myData2
End With
End Sub
'リストボックスの詳細を表示
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With ListBox1
If .ListIndex = -1 Then
MsgBox "未選択です。"
Else
MsgBox .List(.ListIndex, 4), Title:="メモ詳細"
End If
End With
End Sub
Private Sub end_Button_Click()
Unload UserForm1
If (Workbooks.Count = 1) Then
' 開いているブックが自身のみの場合はExcelを終了させる
ThisWorkbook.Save
Application.Quit
End If
ThisWorkbook.Save
Workbooks("営業用メモV3.xlsm").Close
End Sub
質問は編集できるので、できればそちらに貼ってください。
ttyp03様
かしこまりました。
何度も申し訳ないですが、コードはコードタグで括ってください。
ああああああ、のところを見映え良くしたいということですよね?
2行目のような感じでいいんですかね?途中でカットして...を付ける。
どうでもいいですけど、背景がすごいw
回答3件
あなたの回答
tips
プレビュー