Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5749 / 13645 ツリー ←次へ | 前へ→

【49041】Justifyについて 07/5/21(月) 16:37 質問[未読]
【49044】Re:Justifyについて neptune 07/5/21(月) 17:38 発言[未読]
【49047】Re:Justifyについて 07/5/21(月) 18:11 回答[未読]
【49053】Re:Justifyについて neptune 07/5/21(月) 22:58 発言[未読]
【49055】Re:Justifyについて 07/5/21(月) 23:19 お礼[未読]
【49098】Re:Justifyについて りん 07/5/23(水) 3:03 回答[未読]
【49119】Re:Justifyについて 07/5/24(木) 8:59 お礼[未読]
【49128】Re:Justifyについて 07/5/24(木) 12:09 お礼[未読]

【49041】Justifyについて
質問    - 07/5/21(月) 16:37 -

引用なし
パスワード
   マクロ初心者です
ここの質問箱(過去ログ)で勉強させていただいています。
以前、長文を一定文字数で区切って、次ぎの行に改行する方法を教えていただきました。
それはそれで、かなり重宝させていただいているんですが、元の文章は半角や全角が混在するため、各行の文末位置は当然ばらつきが出ている状態です。
最近、Justify という便利なものがあることを本で知り、試してみたら「こりゃ、便利だ」と思ったんですが、場合によっては、文章の途中で表示が終わってしまうことが分かり、ガッカリです。
原因がどこにあるのか、さっぱり分かりません。ご指導いただければありがたいです。

Sub 実験()
'
Columns("B:B").ColumnWidth = 100
Range("B5").Justify

End Sub

現象
B5セルに、200文字程度の文章がある場合は、思った通りの結果が得られます。
しかし、300文字以上の文章がある場合は、表示が途中で終わってしまいます。
表示された文字数をカウントしてみたところ、だいたい254文字でした。(上記の場合、5行目の途中まで)
文字数に関係なく、全ての文章を表示する方法を教えていただきたく、質問させて頂きました。
宜しくお願いします。
WindowsME & Excel2000 です。

【49044】Re:Justifyについて
発言  neptune  - 07/5/21(月) 17:38 -

引用なし
パスワード
   こんにちは

▼岳 さん:
理解力不足のせいか質問内容が良くわからないのですが、
>B5セルに、200文字程度の文章がある場合は、思った通りの結果が得られます。
>しかし、300文字以上の文章がある場合は、表示が途中で終わってしまいます。
>表示された文字数をカウントしてみたところ、だいたい254文字でした。(上記の場合、5行目の途中まで)
>文字数に関係なく、全ての文章を表示する方法を教えていただきたく、質問させて頂きました。
>宜しくお願いします。
>WindowsME & Excel2000 です。
Excelの仕様にはこんなのがありますが、
項目        最大数
列の幅       255 文字
セルの内容の長さ  32,767 文字。セルに表示できるのは
(文字列)      1,024 文字まで。数式バーでは 32,767 文字すべての表示が可能。

こういうことですか?

【49047】Re:Justifyについて
回答    - 07/5/21(月) 18:11 -

引用なし
パスワード
   ▼neptune さん:
早速のアドバイス有難うございます。

実験のコードでの結果は
列の表示文字数(ひとつのセルの文字数)は句読点の数によって58〜60文字程度でした。(4行目までの処理は、これで正常だと思っています。)

また、途中で表示されなくなった5行の文章は20〜30文字で
数式バーにも全文は表示されませんでした(セルの表示内容と同じ)

教えていただいたExcelの仕様の、範囲内での処理内容だとは思うんですけど。
説明力不足で申し訳ありませんが、状況としては上記の通りです。


>Excelの仕様にはこんなのがありますが、
>項目        最大数
>列の幅       255 文字
>セルの内容の長さ  32,767 文字。セルに表示できるのは
>(文字列)      1,024 文字まで。数式バーでは 32,767 文字すべての表示が可能。
>
>こういうことですか?

【49053】Re:Justifyについて
発言  neptune  - 07/5/21(月) 22:58 -

引用なし
パスワード
   こんにちは

いまだに良くわかりませんが、Justifyは使ったことないので
適切な事は言えません。m(_ _)m

改行コードのない数百字の文章をセルにあわせて強制的に折り返すという事??
もしそうなら、セルの書式で「折り返して全体を表示する」でいけそうなんですが。。。

識者のアドバイスをお待ち下さい。

【49055】Re:Justifyについて
お礼    - 07/5/21(月) 23:19 -

引用なし
パスワード
   ▼neptune さん:
色々と有難うございます。

セル書式で「折り返して全体を表示する」をした場合
画面の見た目は完璧なのに、印刷した場合、表示されている文字が
最後まで印刷されない場合があったので、
マクロで一定文字数で改行する手法をとってきました。
(これで、当初の問題は解決しました)

最初の質問の時に述べたように「justify」を使用すれば文末位置が
わりと綺麗にそろうので「こりゃいいや」と思ったんで試してみたんですが・・・。

問題は解決していませんが、私の疑問に neptuneさんが一緒に考えて頂いたことに
感謝申し上げます。今後とも宜しくお願いします。


>こんにちは
>
>いまだに良くわかりませんが、Justifyは使ったことないので
>適切な事は言えません。m(_ _)m
>
>改行コードのない数百字の文章をセルにあわせて強制的に折り返すという事??
>もしそうなら、セルの書式で「折り返して全体を表示する」でいけそうなんですが。。。
>
>識者のアドバイスをお待ち下さい。

【49098】Re:Justifyについて
回答  りん E-MAIL  - 07/5/23(水) 3:03 -

引用なし
パスワード
   岳 さん、こんばんわ。

>最初の質問の時に述べたように「justify」を使用すれば文末位置が
>わりと綺麗にそろうので「こりゃいいや」と思ったんで試してみたんですが・・・。
>
文字列が255文字でちぎれるようなので、それより長い文字列は繰り返してJustifyを適用するようにしてみました。

Sub test()
  Dim s1 As String, Rmax&, Rpos&, Md&
  '
  With Application.ActiveSheet
   .Cells(1, "A").Value = ReptStr(1256) '適当な文字列を生成する関数
   '
   s1 = .Cells(1, "A").Value
   '
   '念のため作業エリアをクリア
   Rmax& = .Cells(65536, "A").End(xlUp).Row
   If Rmax& >= 2 Then _
     .Range(.Cells(2, "A"), .Cells(Rmax&, "A")).ClearContents
   '
   'アラート非表示
   Application.DisplayAlerts = False
   'Justify適用初期行
   Rpos& = 1
   Do
     .Cells(Rpos&, "A").Justify
     If Len(s1) <= 255 Then Exit Do
     '繰り返す
     Rmax& = Range("A65536").End(xlUp).Row '上に移動し一番下を判定
     Md& = 255 - Len(.Cells(Rmax&, "A").Value) '途中でちぎれていると仮定
     s1 = Right$(s1, Len(s1) - Md&) '新しい文字列(正しく分割された部分を削除後)
     '新しい位置
     Rpos& = Rmax&
     .Cells(Rpos&, "A").Value = s1 '新しい文字列
   Loop
   '終了
   Application.DisplayAlerts = True
  End With
End Sub
'テスト用の適当な文字列(アルファベットのられつ)
Function ReptStr(arg1 As Long)
  Dim II As Long, s1 As String
  For II = 1 To arg1
   s1 = s1 + Chr(Asc("A") + ((II - 1) Mod 26))
  Next
  ReptStr = StrConv(s1, vbWide)
End Function

無理やり感はありますが、とりあえず結果を出すならこんな感じです。

【49119】Re:Justifyについて
お礼    - 07/5/24(木) 8:59 -

引用なし
パスワード
   ▼りん さん:

おはようございます。
neptuneさんからアドバイスを頂いた後、22日はレスが無かったため
駄目かなと思っていました。
今朝、りんさんから回答を頂いているのを知り、あきらめていただけに
ビックリすると同時に、まずはお礼をしなくちゃとと思いあせってしまいました。

りんさんのコードを試して見たところ、うまく行きました。
後は、自分の思っている使用方法にあうように若干手を加えて、完成させようと
思っています。(初心者ですが頑張って見ます)

お礼が遅くなって申し訳ありませんでした。
りんさん、真夜中にやってくれたんですか?
ラジオ深夜便の時間帯でしたね・・・本当に有難うございました。

【49128】Re:Justifyについて
お礼    - 07/5/24(木) 12:09 -

引用なし
パスワード
   ▼りん さん:
やりたいことが完璧に出来ました。
分かりやすい解説文が付いていたので助かりました。
実際の作業では、文章の入っている行は500〜2000行位あります。処理するセルの下の行に他の値が入っていれば、255文字目の行数がカウントできないのが理解できたので、元の原稿はB列に、書き換え文章はA列に書くようにしました。

また、原稿(B列)の次の行が、必ず改行表示したA列の最終行の下に来るように、必要行数を挿入処理し、B列の上から順番に、データーがあったら、A列に改行表示させることによって一発処理の自動化も出来ました。
最終確認がうまくいったことを報告して、重ねて御礼申し上げます。
有難うございました。

5749 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free