検索対象の行内容を代入してシートを印刷処理
ワークシートにテキストファイルからデータを読み込み、その内容を別のフォーマットシートに貼り付けて印刷することを考えています。
今のところできているコードは以下の通りです。
Private Sub Workbook_Open()
'テキストデータを読み込み
Dim Fname As String 'ファイル名
Dim rw As Long '書き出しの最初の行
Dim j As Long
Dim u As Integer '配列の上限
Dim TextLine As String
Dim LineBuf As Variant 'ラインバッファ
Dim FNo As Integer 'ファイルNo
Sheet1.Select
Fname = Application.GetOpenFilename("tstnama(*.txt),*.txt")
If Fname = "False" Then
Exit Sub
End If
rw = 1
FNo = FreeFile()
Open Fname For Input As #FNo 'ファイルインポート
Do Until EOF(FNo)
Line Input #FNo, TextLine
LineBuf = Split(TextLine, "|") '配列の取り出し,区切り文字は、「|」
u = UBound(LineBuf)
If u >= 0 Then
ActiveSheet.Cells(rw + j, 1).Resize(, u + 1).Value = LineBuf
End If
j = j + 1
Loop
Close #FNo
'533の件数検索
Dim TargetStr As String, LastRow As Integer
Dim TargetArea As Range, FoundCell As Range
Dim R As Integer, N As Integer
TargetStr = "533"
LastRow = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
Set TargetArea = Range(Cells(1, 1), Cells(LastRow, 1))
Set FoundCell = TargetArea.Find(what:=TargetStr, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
If Not FoundCell Is Nothing Then
R = FoundCell.Row
N = 1
Do
Set FoundCell = TargetArea.FindNext(after:=FoundCell)
If FoundCell.Row = R Then Exit Do
N = N + 1
Loop
Else
MsgBox "該当データがありません", vbCritical
End If
Set FoundCell = TargetArea.FindPrevious(after:=FoundCell)
'印刷件数の確認と印刷フェーズへの移行処理
If vbYes = MsgBox("B796K533は" & N & " 件です。印刷しますか?", vbYesNo) Then
R = FoundCell.Row
N = 1
Do
With Sheet2
.Cells(4, 4).Value = Sheet1.Cells(R, 2).Value
.Cells(5, 4).Value = Sheet1.Cells(R, 3).Value
.Cells(6, 4).Value = Sheet1.Cells(R, 4).Value
.Cells(7, 4).Value = Sheet1.Cells(R, 5).Value & " " & Sheet1.Cells(R, 6).Value & " " & Sheet1.Cells(R, 7).Value
.Cells(8, 4).Value = Sheet1.Cells(R, 8).Value
.Cells(9, 4).Value = Sheet1.Cells(R, 9).Value
.PrintPreview
End With
MsgBox N & "枚目プリント"
Set FoundCell = TargetArea.FindNext(after:=FoundCell)
If FoundCell.Row = R Then Exit Do
N = N + 1
Loop
Else
MsgBox "該当データがありません", vbCritical
End If
Set FoundCell = Nothing
Set TargetArea = Nothing
End Sub
テキストファイルの内容はシートに貼り付けたとき8列になっておりA列には重複する番号が数パターン振られていて行当たりはダブりません。
A列にある特定の文字列(コード内では533)の件数を検索し、それぞれの行内容をシートに代入して、そのシートを印刷しますので
「533の数を確認(印刷される枚数を確認)」
↓
「検索された533の行内容を上から順番(A1~A*)に印刷」
という段取りで行きたいと思っています。
コードを走らせると、533の件数はちゃんと合うのですがその行内容が反映されません。変数Foundcellが印刷フェーズに入った段階でA1の行に固定されているようでその行内容が件数分印刷されてしまいます。(コードではPrintPreviewなのでプレビュー画面で確認しています。)
Foundcellへの渡し方がわるいのでしょうか?それとも、やはり特定の行内容を取得するには別に主キーのようなものを振らなければだめでしょうか?
533の後ろには534というように何パターンかあってそれらもあてがわれたフォーマットに代入して印刷していきたいので、これができれば後は繰り返しになりますから後一歩なのですが・・・。
お礼
おぉぉぉ~。 ありがとうございます。 参考まで記載していただき感謝です。 よく読んでみますね。 御手数おかけしました。