トップ回答者
Excel2013 セルの可視表示を VBA 操作出来ますか?

質問
-
Excel VBAで
セルに入っている文字が
可視表示で、はみ出しているときに
セル内容のはみ出した部分をカットしたいのですが
いろいろ調べましたが分かりません。
全角半角混在の文字列です。
Len や LenB でも試しましたが上手くいきません。
良い手立てがありましたら、教えてください。- 移動 栗下 望Microsoft employee, Moderator 2017年8月23日 2:22 Microsoft Office > Office 2016
回答
-
良い手立てがありましたら、教えてください。
この手の問題において、おそらく良い手はありません。文字列の長さが同じ文字数でも動的に変化しますから、それに応じて、はみ出さないピッタリの文字数を見つけることは難しいと思います。
発想を変えて、Excelの機能ではみ出さないようにするのではダメでしょうか?
結合したセルははみ出しませんから、例えば列Aと列Bを結合し、列Bを非表示にすれば、列Aの内容が列Cにはみ出すことはなくなります。
その他、はみ出さい条件が以下にまとまっていましたので、参考にしてみて下さい。When does Excel decide to overflow text into adjacent cells, or cut them at the boundary?
https://superuser.com/questions/400498/when-does-excel-decide-to-overflow-text-into-adjacent-cells-or-cut-them-at-the
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2017年8月23日 4:45 誤記訂正
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月31日 1:52
-
MSゴシックやMS明朝などの「P」の付かないフォントを使えば出来るかと思います。
まず、シート全体をMSゴシックやMS明朝などに変えるのではなく、ホーム→セルのスタイル→標準で右クリック→変更→フォントの種類を変更してOK、OKします。
基本的に列幅というのは、半角の0で何文字入るかなので、.ColumnWidthで列幅を取得します。
それで、セルに入っている文字列が、1文字、1文字全角なのか半角なのか判定しColumnWidthで取得したバイト数以下になるようにします。
という考え方でよいと思います。
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月31日 1:53
すべての返信
-
フォーラムオペレーターの栗下 望です。
Fantechs さん、ご投稿いただきありがとうございます。ご質問いただいている内容から MSDN フォーラムの VBA フォーラムのほうが、
情報が集まりやすいかと思いましたのでスレッドの移動をさせていただきました。MSDN フォーラム > Visual Basic for Application(VBA) > Visual Basic for Application(VBA)
今後参考になる回答が寄せられましたら、
[回答としてマーク]をご設定ください。どうぞよろしくお願いいたします。
MSDN/TechNet Community Support 栗下 望
- 編集済み 栗下 望Microsoft employee, Moderator 2017年8月23日 2:23 移動後文言へ編集
-
良い手立てがありましたら、教えてください。
この手の問題において、おそらく良い手はありません。文字列の長さが同じ文字数でも動的に変化しますから、それに応じて、はみ出さないピッタリの文字数を見つけることは難しいと思います。
発想を変えて、Excelの機能ではみ出さないようにするのではダメでしょうか?
結合したセルははみ出しませんから、例えば列Aと列Bを結合し、列Bを非表示にすれば、列Aの内容が列Cにはみ出すことはなくなります。
その他、はみ出さい条件が以下にまとまっていましたので、参考にしてみて下さい。When does Excel decide to overflow text into adjacent cells, or cut them at the boundary?
https://superuser.com/questions/400498/when-does-excel-decide-to-overflow-text-into-adjacent-cells-or-cut-them-at-the
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2017年8月23日 4:45 誤記訂正
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月31日 1:52
-
相当強引ですが、次のような処理で、
何文字目まで表示可能かを取得できるだろうと思います。ざっくり言えば、labelのキャプションに、
表示したい文字列を埋め、
labelの高さが1行分になるところを見つける方法です。以下、コード例です。
Formにlabel、textbox、CommandButtonを配置し
フォームを表示後、
textboxに文字列を埋め、
CommandButtonを押すことで、下のコードを実行します。Sub MyTest()
Dim wkLen As Integer
Dim wkCounter As Integer
With UserForm1
wkLen = Len(.TextBox1.Text)
.Label1.Width = 40
.Label1.Font.Size = 9
.Label1.AutoSize = True
For wkCounter = wkLen To 1 Step -1
.Label1.Caption = Left(.TextBox1.Text, wkCounter)
If .Label1.Height = 9 Then
MsgBox (Format(wkCounter, "0") & "文字目まで表示可能")
Exit For
End If
Next wkCounter
End With
End Sub -
MSゴシックやMS明朝などの「P」の付かないフォントを使えば出来るかと思います。
まず、シート全体をMSゴシックやMS明朝などに変えるのではなく、ホーム→セルのスタイル→標準で右クリック→変更→フォントの種類を変更してOK、OKします。
基本的に列幅というのは、半角の0で何文字入るかなので、.ColumnWidthで列幅を取得します。
それで、セルに入っている文字列が、1文字、1文字全角なのか半角なのか判定しColumnWidthで取得したバイト数以下になるようにします。
という考え方でよいと思います。
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月31日 1:53