• ベストアンサー

特定文字のセル(エクセルデータ)の所で改ページ印刷する仕組みは可能?

「タイトル+本文」という形でのエクセルデータ(他DBから変換したもの)があります。1タイトルが終わり、続けてそれぞれの「タイトル+本文」が50組ぐらいあり、そのまま印刷する場合は、各々長さがバラバラなので各用紙にまたがって印刷されてしまいます。改ページを手動で設定して印刷する方法もあるのですが、量が多いのと今後も別のデータを取り込んだとき再び設定する必要があるので、何とか特定文字をキーに改ページ印刷を自動化できないかと色々方法を探しています。エクセル2000を使用しています。同じような経験をお持ちの方が居られましたらお聞きしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

(1)セルの値全体で比較すれば良い時 #2のやり方 (2)先頭から何文字目かの定位置 If Cells(i, "B") = "xx" Then -----> If Mid(Cells(i,"B"),3,2)="XX" then 3文字目から2文字がXXなら (3)セルの文字列の中のどこかに含まれているか探す時 p=InStr(Cells(i,"B"),"xx") If p=0 then (含まれない時) Else (含まれる時) End If

221EG6
質問者

お礼

Mid関数のご説明に加えて(3)の例も教えて頂きましてありがとうございました。これから(1)~(3)のパターンをケースに応じて使い分けていこうと思います。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 #2さんのサンプルで解決でしょうが、、、 A列内の ほげほげ を含むセルを探して改ページを挿入するサンプルマクロを書いてみました。 Sub Test() Dim r As Range, fr, fa As String  Application.ScreenUpdating = False  With ActiveSheet   Set r = .Range("A1:A" & .Range("A65536").End(xlUp).Row)   Set fr = r.Find("ほげほげ", LookAt:=xlPart)   If Not fr Is Nothing Then     fa = fr.Address     Do     If fr.Address <> "$A$1" Then .HPageBreaks.Add Before:=fr       Set fr = r.FindNext(fr)     Loop While Not fr Is Nothing And fa <> fr.Address   End If  End With End Sub ちょっとおせっかいですが、#2さんの例でxxを含むものを探す場合、 If Cells(i, "B") = "xx" Then を If Cells(i, "A") Like "*xx*" Then でも良いかと思います。

221EG6
質問者

お礼

色々なマクロがあるのだなと奥の深さを痛感するとともに参考になります。おせっかいだなんてとんでもありません、私の方も手法の引き出しが増えるので感謝です。ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

VBAで良くやります。 下記ではB列に文字列「xx」が出てくるか、30行を越えると、そこの直前行まで1ページに印刷しています。 列はA,B列しかないサンプルになっています。 本番に合わせて変えるところは、シート名、30行、 スタート行、最右列、先頭検出文字列(xx)、その文字列のある列(本例ではB列)でしょうか。 XXはタイトルの1部であるなら、MID関数でタイトルの先頭から数文字を識別できるように切り出しましょう。 Sub test01() Worksheets("sheet1").Activate d = Range("a1").CurrentRegion.Rows.Count MsgBox d s = 1 For i = 2 To d If i > s + 30-1 Then Range(Cells(s, "A"), Cells(i - 1, "B")).PrintOut s = i - 1 Else If Cells(i, "B") = "xx" Then Range(Cells(s, "A"), Cells(i - 1, "B")).PrintOut s = i End If End If Next i Range(Cells(s, "A"), Cells(d, "B")).PrintOut End Sub 少数例(百数十行)でテスト済み。

221EG6
質問者

補足

VBの構文まで丁寧につけて頂きましてありがとうございます。列は1列のみのデータでしたので、Cellsはひとつだけにすればよいのでしょうか。Mid関数の定義の仕方がよくわからなかったので、 "*xx*" として試してみようと思います。(プリンタが職場に1台しかなくなかなか試せないのですが) imogasiさんのようにVBが記述できる人にはあこがれてしまいます。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

行タイトルを使えるような出力に元データを変更出来ないのですね? データの合間にあるタイトルを特定出来るキーワードがあるなら、マクロで出来ると思いますが、、、

221EG6
質問者

お礼

元データからの変換で1セルの中にタイトルとページ番号が一緒に取り出されています。タイトルは固定なので、それを検索キーワードにマクロかVBAを使うとできそうですが。。マクロやVBAの作り方がわからないもので。

関連するQ&A