Excel VBA質問箱 IV

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

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


7126 / 13646 ツリー ←次へ | 前へ→

【40798】長文の表示・印字 momo 06/7/24(月) 13:35 質問[未読]
【40799】Re:長文の表示・印字 neptune 06/7/24(月) 13:43 発言[未読]
【40800】Re:長文の表示・印字 momo 06/7/24(月) 13:53 発言[未読]
【40817】Re:長文の表示・印字 neptune 06/7/24(月) 17:35 発言[未読]
【40803】Re:長文の表示・印字 ハチ 06/7/24(月) 14:13 発言[未読]
【40805】Re:長文の表示・印字 momo 06/7/24(月) 14:46 発言[未読]
【40806】Re:長文の表示・印字 momo 06/7/24(月) 15:27 発言[未読]
【40807】Re:長文の表示・印字 ハチ 06/7/24(月) 15:55 回答[未読]
【41081】Re:長文の表示・印字 momo 06/7/28(金) 17:34 お礼[未読]

【40798】長文の表示・印字
質問  momo  - 06/7/24(月) 13:35 -

引用なし
パスワード
    いつも、このサイトには大変お世話になっておりますm(_ _)m
 
 今、苦情内容のデータベースなんぞを作っておりまして、どうしても行き詰ってしまいました。
 データベース自体は、ADOを使って、MDBに保存したものを、適宜ExcelVBAから検索して、表示・印刷をするという、比較的シンプルなものなんですが、苦情内容の表示がどうしてもうまくいきません。
 というのも、苦情内容のデータは、処理までを含むレポートのようなもので、数行程度のものからA4用紙に数枚にわたるものまであります。
 これを印刷しようと思うと、どうしてもセルを結合させたりして調整する必要があるのですが、印字される位置より下にも定型の書式を入れたいので、セルの縦幅を調整する必要があります。

<書式のイメージ>
-----------------------------
表題などの表記
-----------------------------


苦情内容のレポート
(ここが長文)

-----------------------------
その他の内容の表記
-----------------------------
(最終的な印字結果は、数枚にわたっても差し支えない。)


まず、【38051】の記事を参考にしたのですが、セルの縦幅の最大値(545ピクセル?)を超える場合には対応ができず、断念。

そこで、WORDに表示させる方法を検討したのですが。【40313】の記事の方法でも、貼り付ける文字数が250(なぜか250)を超えるとエラーが出てしまいます。
仮にKenmeiの内容が、長文レポートだとして、
>        .Replacement.ClearFormatting
>        .Text = "<件名>"
>        .Replacement.Text = Kenmei
>        .Execute Replace:=wdReplaceAll
の部分を、
        .ClearFormatting
        .Text = "<件名>"
        If Len(Kenmei) > 250 Then
         For i = 0 To Int(Len(Kenmei) / 250) + 1
         Kenmei2 = Mid(Kenmei, 250 * i + 1, 250) & "<件名>"
         .Replacement.Text = Kenmei2 '""
         .Execute Replace:=wdReplaceAll
         Next
         Kenmei = ""
        End If
        .Replacement.Text = Kenmei
        .Execute Replace:=wdReplaceAll

などと、変えてみたのですが、なんとなく迂遠な気がするのと、
この方法では、改行が再現されていないことに気がつきました。

どなたか、お知恵をお貸しいただけないでしょうか?

【40799】Re:長文の表示・印字
発言  neptune  - 06/7/24(月) 13:43 -

引用なし
パスワード
   解決方法は調べてないんですが、素直にAccessのレポートでは駄目なんですか?

【40800】Re:長文の表示・印字
発言  momo  - 06/7/24(月) 13:53 -

引用なし
パスワード
   ▼neptune さん:
>解決方法は調べてないんですが、素直にAccessのレポートでは駄目なんですか?

おっしゃるとおりです。
Accessなら、おそらく問題がありません。
ただ、いくつか問題があって、Accessでの作成は考えてません。
問題というのは、
 1.まず、Accessの操作に明るくなく、検索などのマクロを組む自信がない。
これは、まぁ解決の余地があるとしても、
 2.苦情内容以外にも、数値データをグラフ化したものも表記したい。
一番の問題点は、
 3.予算の都合上、Accessを導入できない端末が複数ある。

こんなところです。
すみません。。。

【40803】Re:長文の表示・印字
発言  ハチ  - 06/7/24(月) 14:13 -

引用なし
パスワード
   ▼momo さん:
> いつも、このサイトには大変お世話になっておりますm(_ _)m
> 
> 今、苦情内容のデータベースなんぞを作っておりまして、どうしても行き詰ってしまいました。
> データベース自体は、ADOを使って、MDBに保存したものを、適宜ExcelVBAから検索して、表示・印刷をするという、比較的シンプルなものなんですが、苦情内容の表示がどうしてもうまくいきません。
> というのも、苦情内容のデータは、処理までを含むレポートのようなもので、数行程度のものからA4用紙に数枚にわたるものまであります。
> これを印刷しようと思うと、どうしてもセルを結合させたりして調整する必要があるのですが、印字される位置より下にも定型の書式を入れたいので、セルの縦幅を調整する必要があります。
>
><書式のイメージ>
>-----------------------------
>表題などの表記
>-----------------------------
>
>
>苦情内容のレポート
>(ここが長文)
>
>-----------------------------
>その他の内容の表記
>-----------------------------
>(最終的な印字結果は、数枚にわたっても差し支えない。)
>
>
>まず、【38051】の記事を参考にしたのですが、セルの縦幅の最大値(545ピクセル?)を超える場合には対応ができず、断念。
>
>そこで、WORDに表示させる方法を検討したのですが。【40313】の記事の方法でも、貼り付ける文字数が250(なぜか250)を超えるとエラーが出てしまいます。

40313を回答させて頂いたのですが、
日付、30文字程度の文字列でしか使用してませんでしたので
250文字の制限があるとは知りませんでした・・
すいません。

ADOでデータを引っ張ってくるとひとつのセルに
大量の文字列が入ってしまい印刷が切れることが問題だと、いうことですか?
切れないようにするだけなら、別Sheetに改行コードと文字数で区切って入れていく
方法ではどうでしょうか?

【40805】Re:長文の表示・印字
発言  momo  - 06/7/24(月) 14:46 -

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


ありがとうございますm(_ _)m

>ADOでデータを引っ張ってくるとひとつのセルに
>大量の文字列が入ってしまい印刷が切れることが問題だと、いうことですか?


イメージとして、
レポートが短文なら、ある程度、空白を開けて整形し、
------------------------------
|               |
|件名             |
------------------------------
|今日は大雨でした。      |
|以上             |
|               |
|               |
|               |
|               |
|               |
|               |
|               |
|               |
|               |
------------------------------
|グラフなど          |
|               |
------------------------------

レポートが長文なら、複数ページにまたぐことを許容したいのです。
<1ページ目>
------------------------------
|               |
|件名             |
------------------------------
|九州北部から東北地方の日本海側|
|と東北の太平洋側で雨が降りやす|
|いでしょう。         |
|先週大雨の降った長野県でも再び|
|災害に警戒が必要です。    |
|関東から九州の太平洋側は、雨の|
|止んでいる時間の方が長いですが|
|、九州南部などこれまでの大雨で|
|地盤の緩んでいる所では、引き続|
|き土砂災害などに警戒してくださ|
|い。             |
|今夜、沖縄・八重山地方では、台|
|風5号の影響で海上は大シケとな|
|りそうです。         |

<2ページ目>
|梅雨前線が、九州北部から本州の|
|南岸にのびています。このため、|
|東海地方は岐阜県中心に概ね雨と|
|なっています。東海地方の今日は|
|、梅雨前線が本州付近に停滞する|
|ため、岐阜県では雨、その他も夕|
|方にかけて雨の降る所があるでし|
|ょう。また雷を伴う所もある見込|
|みです。明日も梅雨前線が本州に|
|停滞するため、岐阜県飛騨地方で|
|は夕方まで雨ですが、その他は昼|
|頃まで時々雨でその後は曇りでし|
|ょう。また、雷を伴う所もある見|
|込みです。          |
------------------------------
|グラフなど          |
|               |
------------------------------


もちろん、実際の表示・印刷では、一行あたりの文字数は、行ごとで異なるでしょうから、文字数で改行や改ページがどこで発生するかは判断できません。


>切れないようにするだけなら、別Sheetに改行コードと文字数で区切って入れていく
>方法ではどうでしょうか?

「別Sheetに改行コードと文字数で区切って入れていく方法」というのが、まったく想像が沸かないので、お恥ずかしいのですが、
具体的には、どんな感じなのでしょう?

【40806】Re:長文の表示・印字
発言  momo  - 06/7/24(月) 15:27 -

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

ところで、Excelの改行コード(CHR(10))と、
Wordの改行コードは、違うのでしょうか?
WordVBAの知識が皆無なので、恐縮ですが、


>        .Replacement.ClearFormatting
>        .Text = "<件名>"
**
>        .Replacement.Text = Kenmei
>        .Execute Replace:=wdReplaceAll

**のところで、
Kenmei = Replace(Kenmei, Chr(10), "Wordの改行コード")
などとすれば、改行は再現できそうな気がしたのですが、
どうなのでしょう。

【40807】Re:長文の表示・印字
回答  ハチ  - 06/7/24(月) 15:55 -

引用なし
パスワード
   ▼momo さん:
>ところで、Excelの改行コード(CHR(10))と、
>Wordの改行コードは、違うのでしょうか?

自分もWordはよくわかりません。
Wordでもマクロの記録はできますので試してみては?
改行の考え方自体が違いそうな気がします。

>「別Sheetに改行コードと文字数で区切って入れていく方法」というのが、
>まったく想像が沸かないので、お恥ずかしいのですが、
>具体的には、どんな感じなのでしょう?

新しいBookを作成し、Make_Test → Testと実行してみてください。
Testのほうは、もう少し簡単に書けそうなのですが・・

Option Explicit

Sub Make_Test()

Dim Str As String
Dim i As Integer

Str = "123456789"

With Worksheets(1).Range("A1")
  For i = 1 To 10
    .Value = .Value & Str
    .Value = .Value & "あああ" & Chr(10)
  Next i
End With

End Sub

Sub Test()

Dim Str As String
Dim i As Long
Dim Po1, Po2 As Integer '文字切り出し用
Const SptLen As Integer = 9 '文字列数

Str = Worksheets(1).Range("A1").Value

With Worksheets(2).Range("A1")
  Po1 = 1
  Do While Len(Str) >= Po1
    Po2 = InStr(1, Mid(Str, Po1, SptLen), Chr(10), vbTextCompare)
    'SptLenの文字数までに改行がない場合
    If Po2 = 0 Then
      .Offset(i).Value = Mid$(Str, Po1, SptLen)
      i = i + 1
      Po1 = Po1 + SptLen
    'SptLenまでに改行がある場合
    Else
      .Offset(i).Value = Mid$(Str, Po1, Po2)
      i = i + 1
      Po1 = Po1 + Po2
    End If
  Loop
End With

End Sub

【40817】Re:長文の表示・印字
発言  neptune  - 06/7/24(月) 17:35 -

引用なし
パスワード
   ▼momo さん:
> 1.まず、Accessの操作に明るくなく、検索などのマクロを組む自信がない。
>これは、まぁ解決の余地があるとしても、
> 2.苦情内容以外にも、数値データをグラフ化したものも表記したい。
これはAccessにもその機能はあります。
>一番の問題点は、
> 3.予算の都合上、Accessを導入できない端末が複数ある。
これも開発バージョンを購入すればランタイムを配布できます。
(価格は10万前後?必用なら調べてね)

そんな訳でやれば出来ますが、Excelで考えると、
オートシェイプのテキストボックスに張り付けられませんか?
限界は知りませんが、入るんじゃないでしょうか?
印刷も出来ますし。

お断り:やったことはありません。アイデアだけです。^ ^;

【41081】Re:長文の表示・印字
お礼  momo  - 06/7/28(金) 17:34 -

引用なし
パスワード
   ▼neptune さん:
▼ハチ さん:

ありがとうございました!
すっかり返信が遅くなってしまいました。

テキストボックスの方法は、目からウロコでしたが、
印刷範囲(実際に印刷されている範囲)がつかめず、
結局断念でした。

ハチさんの方法を、今、なんとかニーズに合わせたところで、思考錯誤中。。

>改行の考え方自体が違いそうな気がします。

Wordの改行の仕組みさえ、一緒なら・・!
と思ったのですが。やはり、無理そうですね。
Wordマクロをもう少しちゃんと勉強すればできるのかも知れませんが。

ハチさんの、
許容以上の文字数があれば、改行(セルを次の行へ)するというのは、
盲点でした!
かなり参考になります。
セルの縦幅や印字範囲の調整を上手にやりながら、
いい方法を考えてみますね!

ありがとうございました。

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