none
Excel2013 セルの可視表示を VBA 操作出来ますか? RRS feed

  • 質問

  • Excel VBAで
    セルに入っている文字が
    可視表示で、はみ出しているときに
    セル内容のはみ出した部分をカットしたいのですが

    いろいろ調べましたが分かりません。
    全角半角混在の文字列です。

    Len や LenB でも試しましたが上手くいきません。

    良い手立てがありましたら、教えてください。
    2017年8月23日 1:09

回答

  • 良い手立てがありましたら、教えてください。

    この手の問題において、おそらく良い手はありません。文字列の長さが同じ文字数でも動的に変化しますから、それに応じて、はみ出さないピッタリの文字数を見つけることは難しいと思います。
    発想を変えて、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/



    2017年8月23日 4:43
    モデレータ
  • MSゴシックやMS明朝などの「P」の付かないフォントを使えば出来るかと思います。

    まず、シート全体をMSゴシックやMS明朝などに変えるのではなく、ホーム→セルのスタイル→標準で右クリック→変更→フォントの種類を変更してOK、OKします。

    基本的に列幅というのは、半角の0で何文字入るかなので、.ColumnWidthで列幅を取得します。

    それで、セルに入っている文字列が、1文字、1文字全角なのか半角なのか判定しColumnWidthで取得したバイト数以下になるようにします。

    という考え方でよいと思います。

    2017年8月24日 0:43

すべての返信

  • フォーラムオペレーターの栗下 望です。
    Fantechs さん、ご投稿いただきありがとうございます。

    ご質問いただいている内容から MSDN フォーラムの VBA フォーラムのほうが、
    情報が集まりやすいかと思いましたのでスレッドの移動をさせていただきました。

    MSDN フォーラム > Visual Basic for Application(VBA) > Visual Basic for Application(VBA)

    今後参考になる回答が寄せられましたら、
    [回答としてマーク]をご設定ください。

    どうぞよろしくお願いいたします。


    MSDN/TechNet Community Support 栗下 望


    2017年8月23日 1:28
    モデレータ
  • 良い手立てがありましたら、教えてください。

    この手の問題において、おそらく良い手はありません。文字列の長さが同じ文字数でも動的に変化しますから、それに応じて、はみ出さないピッタリの文字数を見つけることは難しいと思います。
    発想を変えて、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/



    2017年8月23日 4:43
    モデレータ
  • 相当強引ですが、次のような処理で、
    何文字目まで表示可能かを取得できるだろうと思います。

    ざっくり言えば、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

    2017年8月23日 12:21
  • MSゴシックやMS明朝などの「P」の付かないフォントを使えば出来るかと思います。

    まず、シート全体をMSゴシックやMS明朝などに変えるのではなく、ホーム→セルのスタイル→標準で右クリック→変更→フォントの種類を変更してOK、OKします。

    基本的に列幅というのは、半角の0で何文字入るかなので、.ColumnWidthで列幅を取得します。

    それで、セルに入っている文字列が、1文字、1文字全角なのか半角なのか判定しColumnWidthで取得したバイト数以下になるようにします。

    という考え方でよいと思います。

    2017年8月24日 0:43