No.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さん、どうもありがとうございます。
No.3
- 回答日時:
wan_wan さん 申し訳ありません。
wan_wan さん への回答ではありません。
許してくださいね。
また、[ 教えて!goo ] の規約に反していたらごめんなさい。
------以下 starsip より------------
Wendy02 さん 復帰されました事
嬉しく思います。
Wendy02 さん の博識が広く皆さんに伝われば
と 私なりに考えてましたので・・・・
------以上 です -------------------
重ね重ね wan_wan さんには 申し訳ありませんでした。
No.2
- 回答日時:
タイトルと質問の関係がわかりませんが、
> セルの幅を一定として、セル幅からはみ出す文字列を次の行の先頭に挿入しようかと考えています
Selection.Justify
> セルの幅を一定として・・・・・・・セル幅を取得する方法ってあるのでしょうか?
MsgBox ActiveCell.ColumnWidth
No.1
- 回答日時:
こんばんは。
>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さんご自身で可能だと思います。
ワードなどでは、見た目的に簡単に実現している機能なので、安易に考えていましたが、思っていた以上に奥が深く、実現は難しいことが解りました。当然、ワードとは、使う目的が違うため止む得ないことだと思いますが、会社で、よく、エクセルで議事録を記入するはめになるので、つい、欲を出してしまいました。ワードもオートコレクト?(自動調整)が、上手く機能すれば使いやすいソフトだと思うんだけど・・・!(あと、表も・・)頂いた、アドバイスを参考に、自分なりに考え、完全自動では、なくとも簡易版を完成させてみようと考えます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/01/06 08:39
- Visual Basic(VBA) 列を指定して値を左から5文字にそろえる 1 2022/06/10 20:28
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルファイルに _x000D_ と...
-
セルは大きくさせず、中の文字...
-
エクセルで画像を透過させて画...
-
マウスポインターが白十字のまま
-
エクセルで1つのセルにスクロ...
-
セルを結合しても、文字をセル...
-
VBA:結合されたセルに対する「...
-
Excel 隣のセルに文字を表示さ...
-
エクセルのIF関数で、文字が...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで右隣のセルより優先...
-
エクセル2013で英単語を折り返...
-
エクセルで特定の列のセルだけ...
-
セルの大きさを個別に変更したい。
-
エクセルの白黒の反転で困って...
-
セルの結合について(3行中2行...
-
エクセルの入力規則プルダウン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
セルを結合しても、文字をセル...
-
エクセルで特定の列のセルだけ...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセル 折り返して全体を表...
-
エクセル2013で英単語を折り返...
おすすめ情報