- ベストアンサー
Columns("○:○").EntireColumn.AutoFitについて(EXCEL)
エクセルでセルに文字を入力した後に、行列番号ダブルクリックをしてAutoFitを実行することあります。そこで、逆に、セルの幅を一定として、セル幅からはみ出す文字列を次の行の先頭に挿入しようかと考えていますが、AutoFitを実行しないで、実行後のセル幅を取得する方法ってあるのでしょうか?逆に、はみ出す文字数を取得する方法でも構いません。どなたか?詳しい方いらっしゃいましたらご指導願えないでしょう?宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 補足ですが、 ColumnWidth のセルの幅は、デフォルトで、[8.38] とか出ますが、実際は、これは、文字数のことで、0.38ということはありえませんね。そのままでは、Double型ですが、その数値を、Interger 型の変数にキャストしてしまうと、四捨五入されることがありますが、Int で、切捨てします。 切り上げしても、文字は欠けてしまいます。 ActiveCell.ColumnWidth 私は、場合によってエラーが出ると思っていましたが、エラーはありませんでした。 >セル幅からはみ出す文字列を次の行の先頭に挿入しようかと考えていますが 私は、読み違えしていましたね。左隣のセルの渡すことを考えていましたが、次の下の行ですと、今度は、配列変数で、最初に文字列の確保をしなければならないような気がしています。 #2さんの Justifyメソッドは、あくまでも「文章の整形」の機能だと思います。 Application.DisplayAlerts = False Selection.Justify Application.DisplayAlerts = True で挟めばよいかもしれませんが、単語単位の切り分けのように思います。長い文字列を切り分けてしまうことは出来ないように思いました。 元のご質問は、AutoFit に対応するものですから、 残りの文字列 = 文字列全体 - 現在のセル幅に収まっている文字 残りの文字列を、別の場所に移動する、という趣旨だと思います。単語自体が、セル幅に収まって文章となっているなら、それは可能だと思います。 wan_wanさんへ。 もし、私の解釈が違っていたら、ここで、もう一度ご指摘ください。しかし、合っていれば、これらのお話だけで、お出来になるはずだと信じております。 p.s. starsipさん、どうもありがとうございます。
その他の回答 (3)
- starsip
- ベストアンサー率36% (22/60)
wan_wan さん 申し訳ありません。 wan_wan さん への回答ではありません。 許してくださいね。 また、[ 教えて!goo ] の規約に反していたらごめんなさい。 ------以下 starsip より------------ Wendy02 さん 復帰されました事 嬉しく思います。 Wendy02 さん の博識が広く皆さんに伝われば と 私なりに考えてましたので・・・・ ------以上 です ------------------- 重ね重ね wan_wan さんには 申し訳ありませんでした。
- NCU
- ベストアンサー率10% (32/318)
タイトルと質問の関係がわかりませんが、 > セルの幅を一定として、セル幅からはみ出す文字列を次の行の先頭に挿入しようかと考えています Selection.Justify > セルの幅を一定として・・・・・・・セル幅を取得する方法ってあるのでしょうか? MsgBox ActiveCell.ColumnWidth
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >AutoFitを実行しないで、実行後のセル幅を取得する方法ってあるのでしょうか? たぶん、正確には出来ないと思います。 例えば、これが、現状のセル幅ですよね。 Dim DefCharLen As Integer DefCharLen = Int(ActiveCell.EntireColumn.ColumnWidth) これが、予想される実行後のセル幅ですが、小数点以下は、もともと、ピクセル から割り出した計算になるので、正確には測れないような気がします。(今、この件は、資料を確認していません。だから、間違っているかもしれません。) Dim myLenB As Integer myLenB = LenB(StrConv(c.Value, vbFromUnicode)) 正確ではありませんが、この値が、そのままセル幅に活かされるはずです。 (これ以外に、一旦、入れた後に、AutoFix で、Undo を使うというのがあるのかもしれませんが、これは、あまりにも恥ずかしいです。) ですから、myLenB - DefCharLen > 0 ならば、myLenB - DefCharLen が、あまった文字数ですね。それを、MidB で切り分けられると思うのでしょうけれども、2バイト文字と1バイト文字との混在の場合は、VBA側からは、そうは簡単に行きませんね。理由は、取り扱い文字が、Unicodeだからです。 そこで、オーソドックスに、StrConv を駆使して文字切りをしていただいたほうが楽かもしれません。この話は、VB側のカテに出ていたようには思います。私は、際立ったワザは好きではありませんが結果的には、かなり奇抜で解答は出しませんでした。 一度、VBカテを検索してみてください。 私自身なりに、解答は考えましたが、後は、wan_wanさんご自身で可能だと思います。
お礼
ワードなどでは、見た目的に簡単に実現している機能なので、安易に考えていましたが、思っていた以上に奥が深く、実現は難しいことが解りました。当然、ワードとは、使う目的が違うため止む得ないことだと思いますが、会社で、よく、エクセルで議事録を記入するはめになるので、つい、欲を出してしまいました。ワードもオートコレクト?(自動調整)が、上手く機能すれば使いやすいソフトだと思うんだけど・・・!(あと、表も・・)頂いた、アドバイスを参考に、自分なりに考え、完全自動では、なくとも簡易版を完成させてみようと考えます。ありがとうございました。