tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelの改行
記事No15779
投稿日: 2013/08/10(Sat) 10:08
投稿者GC
お世話になっています。
質問:
TextBoxの文字列をExcelセルに貼り付けます。
TextBox側にMultiLine=True
自動的に行改行しています。
Excel側に何個セルを接合しています。
貼り付けるとTextBox側の文字列の改行が変わります。(セルの最後まで自動的に改行)
TextBox側の文字列の改行をそのまま貼り付けますと無理でしょうか。
ちなみに、文字フォント=MSPゴジック 11 です。

簡単な方法があるのでしょうか。
よろしくお願いします。
環境:VB6+XP+office 2000

[ツリー表示へ]
タイトルRe: Excelの改行
記事No15783
投稿日: 2013/08/10(Sat) 17:31
投稿者YK
こんにちは。

> TextBox側の文字列の改行をそのまま貼り付けますと無理でしょうか。
これって手作業ですよね。
ctrl+c,ctrl+v
テキストの内容を置き換えて貼り付けます。
例えばコマンドボタン1のClickイベントを実行後コピペして
コマンドボタン2のClickイベントで元に戻す。

Private strText As String
Private Sub Command1_Click()
    strText = Text1.Text
    Text1.Text = Chr(34) & Replace(Text1.Text, vbCrLf, vbLf) & Chr(34)
End Sub

Private Sub Command2_Click()
    Text1.Text = strText
End Sub

[ツリー表示へ]
タイトルRe^2: Excelの改行
記事No15784
投稿日: 2013/08/13(Tue) 09:26
投稿者GC
YKさん、ご回答ありがとう。
> これって手作業ですよね。
> ctrl+c,ctrl+v
そうですか、
今考えたのは、手作業ではないですが
1.文字列の各文字の幅を計測して、合計文字列の幅をわかります。
(プロポーショナル フォントなので、すべての文字の幅を計測する)
2.セルの幅も計測して、わかった。
3.セルの幅に合わせて貼り付けます。
かなり面倒な作業ですが、やる前に他の方法があるのでしょうか。

実際は、Word文章からExcelのセルに貼り付けるという作業です、
Word文章のすべて文字列を貼り付けるではないですが、ある修正が
あります、修正できた文字列をセルに貼り付けます。
Word文章の一段落文章をセルに貼り付けると形が崩れます。(改行のせい)
そういうことで、
まず、Word文章をTextファイルに変更して、
つぎに、Wordの一段落文章をTextBoxに表示して、
第三、TextBoxの自動的に改行を利用して、一応、文章の形を整理して、
最後に、その形にセルに貼り付けます。
随分遠回り作業になりますが。
質問したように、
TextBoxの自動的に改行した文字列をセルに貼り付けるということです。

アドバイスよろしくお願いします。

[ツリー表示へ]
タイトルRe^3: Excelの改行
記事No15785
投稿日: 2013/08/13(Tue) 11:16
投稿者YK
こんにちは。

> TextBoxの自動的に改行した文字列をセルに貼り付けるということです。

TextBoxの値をエクセルに貼り付けです。

Option Explicit
Private xlBook  As Excel.Workbook
Private Sub Command1_Click()
    Dim strText As String
    
    'Text1の改行を vbCrLf -> vbLf にする
    strText = Replace(Text1.Text, vbCrLf, vbLf)
    
    'TEST1.xlsは作成しておく。無いとエラー
    '張り付けるエクセルをセット開いていても、いなくてもOK
    Set xlBook = GetObject("D:\Excel\TEST1.xls")
    xlBook.Parent.Visible = True
    With xlBook.Worksheets(1).Range("A1")
        ' 値の挿入
        .Value = strText
    End With
'    必要であれば保存して閉じる
    xlBook.Save
    xlBook.Parent.Quit
End Sub

[ツリー表示へ]
タイトルRe^4: Excelの改行
記事No15786
投稿日: 2013/08/13(Tue) 13:39
投稿者GC
YKさん、ご回答ありがとう。

自分で説明が不足ですが、
ただTextBoxの文字列をセルに貼り付けるということではないですが、
例:
TextBoxの文字列は以下になっています
  きょう13日午前11時30分までの最高気温は、全国のトップは高知県
 四万十市江川崎で、すでに38.2℃と、ここ数日と同じようなハイペー
 スで気温が上がっている。また、高知県四万十町で36.8℃、宮崎県西
 都市で36.7℃と、引き続き西日本を中心に猛烈な暑さとなっている。
セルに貼り付けると同じ並べです
ようするに、セルの文字列
  きょう…は高知県(改行)
 四万十…ようなハイペー(改行)

行の先頭にスペースがあります。

注意:1.改行の場所がTextBoxの文字列の改行です。(Excelの改行ではないです)
2.フォント名にPが付けます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^5: Excelの改行
記事No15787
投稿日: 2013/08/13(Tue) 18:02
投稿者YK
こんにちは。

TextBoxに値をセットして実行じてみましたか?
列幅は Columns(1).EntireColumn.AutoFit でも追加すれば
エクセルが幅をあわせてくれるでしょう。
駄目でしたらシート上にラベルを追加して
Autosize = Truw
WordWrap = False
で幅が分かります。
列幅を変更したらラベルを削除すれば良いでしょう。

[ツリー表示へ]
タイトルRe^6: Excelの改行
記事No15788
投稿日: 2013/08/14(Wed) 08:38
投稿者GC
YKさん、ご回答ありがとう。

> TextBoxに値をセットして実行じてみましたか?
やりました。結局はセルの終わりに改行された
ちなみに、セルは何個セルを接合したものです。
セルはC16:O35です。(長方形の形です。)
もう一つは接合したセル行の高さと文字高さが一致していなかった。

> 列幅は Columns(1).EntireColumn.AutoFit でも追加すれば
> エクセルが幅をあわせてくれるでしょう。
エクセルの行幅が固定しています。(印刷時、A4ページの幅です。)
自分がExcelを詳しくわかっていないです。サンプルを見ながらやっています。
Columns("C:O").EntireColumn.AutoFit
A4の幅を超えました。だめです。

> 駄目でしたらシート上にラベルを追加して
> Autosize = Truw
> WordWrap = False
> で幅が分かります。
> 列幅を変更したらラベルを削除すれば良いでしょう。
やり方がわかりません、ネットで調べます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^7: Excelの改行
記事No15789
投稿日: 2013/08/14(Wed) 11:14
投稿者YK
こんにちは。

> エクセルの行幅が固定しています。(印刷時、A4ページの幅です。)
ということはフォントのサイズを下げてその幅に合うまで小さくするしかないですね。
難しく考えずに作ってみました。それとこれからの設計では結合セルを使用しない
方向で進めたほうが何かと便利ですよ。
結合セルの指定は左上のセルアドレスを指定
Option Explicit

Private xlApp   As Excel.Application
Private xlBook  As Excel.Workbook
Private xlSht   As Excel.Worksheet

Private Sub Command3_Click()
    Dim strText As String
    Dim sW      As Single
    Dim i       As Long
    Dim rng     As Range
    
    'Text1の改行を vbCrLf -> vbLf にする
    strText = Replace(Text1.Text, vbCrLf, vbLf)
    
    'TEST1.xlsは作成しておく。無いとエラー
    '張り付けるエクセルをセット開いていても、いなくてもOK
    Set xlBook = GetObject("D:\Excel\Test1.xls")
    With xlBook.Parent
        .Visible = True
        .ScreenUpdating = False
    End With
    
    Set rng = xlBook.Worksheets(1).[A1] '結合セルの左上のアドレスを指定
'   セル幅のセーブ 設定値があるなら設定値 sW = 50とか
    sW = rng.ColumnWidth
'   仮のセル幅の設定
    rng.ColumnWidth = sW + 30
'   仮のフォントサイズ
    rng.Font.Size = 11
'   テキストの貼り付け
    rng.Value = strText
'   セル幅の自動設定
    rng.EntireColumn.AutoFit
    For i = rng.Font.Size To 3 Step -1
'       セル幅が規定値より小さいか
        If sW >= rng.ColumnWidth Then
'           小さかったらセルの幅を規定値に
            rng.ColumnWidth = sW
            Exit For
        Else
'           フォントサイズを一つ下げる
            rng.Font.Size = i
            rng.EntireColumn.AutoFit
        End If
    Next
    xlBook.Parent.ScreenUpdating = True
'    必要であれば保存して閉じる
'    xlBook.Save
'    xlBook.Parent.Quit
End Sub

Private Sub Form_Load()
    Me.Text1.Text = " きょう13日午前11時30分までの最高気温は、全国のトップは高知県" & vbCrLf & _
                    "四万十市江川崎で、すでに38.2℃と、ここ数日と同じようなハイペー" & vbCrLf & _
                    "スで気温が上がっている。また、高知県  四万十町で36.8℃、宮崎県西" & vbCrLf & _
                    "都市で36.7℃と、引き続き西日本を中心に猛烈な暑さとなっている。"
End Sub

[ツリー表示へ]
タイトルRe^8: Excelの改行
記事No15801
投稿日: 2013/08/23(Fri) 13:34
投稿者GC
YKさん、ご回答ありがとう。

やってみたのですが、
問題:
1.セルを接合した場合と接合しない場合。
>     For i = rng.Font.Size To 3 Step -1
> '       セル幅が規定値より小さいか
>         If sW >= rng.ColumnWidth Then
> '           小さかったらセルの幅を規定値に
>             rng.ColumnWidth = sW
>             Exit For
>         Else
> '           フォントサイズを一つ下げる
>             rng.Font.Size = i
>             rng.EntireColumn.AutoFit
>         End If
>     Next

単一セルのサイズになっています。
例:セル接合しない場合、A1セルのサイズになっています。
A1−I9の接合したセルもA1セルのサイズになっています。
(文字列が小さくなった)

問題2.
> Me.Text1.Text = " きょう13日午前11時30分までの最高気温は、全国のトップは高知県" & vbCrLf & _
>"四万十市江川崎で、すでに38.2℃と、ここ数日と同じようなハイペー" & vbCrLf & _
>"スで気温が上がっている。また、高知県  四万十町で36.8℃、宮崎県西" & vbCrLf & _
>"都市で36.7℃と、引き続き西日本を中心に猛烈な暑さとなっている。"

確かに、A1セルに文章が上にようになっています。
文章に ” & vbCrLf & ”手動で入れるのですか、いちいち手動で入れるなら、意味がないです。
自動でほしいですが、(TextBoxに複数行で表示したままに貼り付ける)

なかなか難しくなった。だめならやめます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^9: Excelの改行
記事No15802
投稿日: 2013/08/24(Sat) 07:59
投稿者YK
こんにちは。

> 問題:
>
> 単一セルのサイズになっています。
> 例:セル接合しない場合、A1セルのサイズになっています。
> A1−I9の接合したセルもA1セルのサイズになっています。
> (文字列が小さくなった)

セルの結合で処理をすると避けられあい問題ですね。
前回答でも書きましたが結合セルは使わないことですね。
列幅が固定されているのだから文字を小さくしないと入らないですね。

> 問題2.
> 文章に ” & vbCrLf & ”手動で入れるのですか、いちいち手動で入れるなら、意味がないです。
> 自動でほしいですが、(TextBoxに複数行で表示したままに貼り付ける)

テストのためにTextBoxに値を入れてあるのですが。
Me.Text1.Text = " きょう13日午前11時30分までの最高気温は・・・・
を消してご自分で入力されて試されたらどうですか。

[ツリー表示へ]
タイトルRe^10: Excelの改行
記事No15803
投稿日: 2013/08/25(Sun) 10:40
投稿者GC
YKさん、ご回答ありがとう。
>
> セルの結合で処理をすると避けられあい問題ですね。
> 前回答でも書きましたが結合セルは使わないことですね。
> 列幅が固定されているのだから文字を小さくしないと入らないですね。
>  
Excelの仕様が決まっています。
文章を貼り付ける前のセルが接合して、固定しています。
選択肢として、固定した場合、結合するか、結合しないかとします。


> テストのためにTextBoxに値を入れてあるのですが。
>  Me.Text1.Text = " きょう13日午前11時30分までの最高気温は・・・・
> を消してご自分で入力されて試されたらどうですか。
試したのですが、
TextBoxの場合:
  きょう13日午前11時30分までの最高気温は、全国のトップは高知県四万十市江川崎で、す
でに38.2℃と、ここ数日と同じようなハイペー スで気温が上がっている。また、高知県四万十町
で36.8℃、宮崎県西 都市で36.7℃と、引き続き西日本を中心に猛烈な暑さとなっている。
になっていますが、
貼り付けると
Excel側に
C16に未接合場合、
一行になっています。
C16:G20接合した場合
一行になっています。

自動的に改行になっていせん。

結論として、無理です。あきらめます。
いろいろアドバイスありがとうございました。

[ツリー表示へ]