Excel VBA質問箱 IV

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

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


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

【14771】オートフィルター後のナンバーの読み取り(宛名印刷について) YN61 04/6/7(月) 19:37 質問[未読]
【14790】Re:オートフィルター後のナンバーの読み取... kein 04/6/8(火) 0:38 回答[未読]
【14881】Re:オートフィルター後のナンバーの読み取... YN61 04/6/9(水) 6:20 お礼[未読]
【14791】Re:オートフィルター後のナンバーの読み取... しん 04/6/8(火) 0:40 回答[未読]
【14882】Re:オートフィルター後のナンバーの読み取... YN61 04/6/9(水) 6:46 お礼[未読]
【14885】Re:オートフィルター後のナンバーの読み取... しん 04/6/9(水) 11:33 回答[未読]
【14903】Re:オートフィルター後のナンバーの読み取... しん 04/6/9(水) 19:55 回答[未読]
【14906】Re:オートフィルター後のナンバーの読み取... IROC 04/6/9(水) 22:29 回答[未読]
【14909】Re:オートフィルター後のナンバーの読み取... しん 04/6/9(水) 23:08 発言[未読]
【14941】Re:オートフィルター後のナンバーの読み取... YN61 04/6/10(木) 22:53 お礼[未読]

【14771】オートフィルター後のナンバーの読み取り...
質問  YN61  - 04/6/7(月) 19:37 -

引用なし
パスワード
   今晩は、質問をさせていただきます。

名簿の葉書宛名印刷について

『顧客リスト』の最左列に連番(No.)に基づき宛名印刷をしています。(別シートに『宛名印刷』のフォームを作成しています)
しかしながら、顧客リストにオートフィルターをかけて必要な顧客(必要なNo.対象顧客)のみを印刷したいのですが、現在のコードでは、オートフィルターが反映されません。
オートフィルターをかけた状態の画面に出ているヴィジュアルセル(No.)のみを順次選択して印刷に反映させるには、このコードをどのように変更を加えればよいのか、ご指導ください。

Sub 葉書宛名差込印刷()

Dim 番号 As Long
Dim 最初行 As Long
Dim 最終行 As Long

  Worksheets("顧客リスト").Activate

   最終行 = Range("B65536").End(xlUp).Row - 10
   最初行 = Range("B65536").End(xlUp).Offset.End(xlUp).Row - 9

  Worksheets("宛名印刷").Activate
   For 番号 = 最初行 To 最終行
     Sheets("宛名印刷").Range("E1").Value = 番号
     Sheets("宛名印刷").PrintOut
 Next 番号
  
End Sub

【14790】Re:オートフィルター後のナンバーの読み...
回答  kein  - 04/6/8(火) 0:38 -

引用なし
パスワード
   質問文とコードの内容がちぐはぐでよく理解できませんが、フィルターで抽出した
"行"を、1行づつ宛名印刷シートの1行目にコピーして印刷する。というマクロなら

Sub 葉書宛名差込印刷()
  Dim MyR As Range, C As Range

  On Error GoTo ErLine
  With Worksheets("顧客リスト")
   Set MyR = .Range("B2", .Range("B65536").End(xlUp)) _
   .SpecialCells(xlCellTypeVisible)
  End With
  For Each C In MyR
   With Sheets("宛名印刷")
     .Rows(1).ClearContents
     C.EntireRow.Copy .Range("A1")
     .PrintOut Copies:=1
   End With
  Next
ErLine:
  Set MyR = Nothing
  If Err.Number > 0 Then
   MsgBox Err.Number & vbLf & Err.Description
  Else
   MsgBox "印刷を終了しました", 64
  End If
End Sub

【14791】Re:オートフィルター後のナンバーの読み...
回答  しん  - 04/6/8(火) 0:40 -

引用なし
パスワード
   いま、たとえば「顧客リスト」シートのA,B,C列のデータが

A    B    C
No.    顧客    住所
1    a    東京
2    b    神奈川
3    c    東京
4    d    大阪
5    e    島根
6    f    奈良
7    g    東京
8    h    北海道
9    i    沖縄
10    j    山口

であったとき

>顧客リストにオートフィルターをかけて必要な顧客(必要なNo.対象顧客)のみを
>印刷したいのですが、現在のコードでは、オートフィルターが反映されません。
>オートフィルターをかけた状態の画面に出ているヴィジュアルセル(No.)



A    B    C
No.    顧客    住所
1    a    東京
3    c    東京
7    g    東京

のように表示されているとすれば、下記のようなVBAコードで処理ができると思いますが・・・、オートフィルターとビジュアルの意味がよくわからないので、ご質問の回答とはなっていないかも知れませんね。

Sub 葉書宛名差込印刷()
  Dim 番号 As Long
  Dim 最初行 As Long
  Dim 最終行 As Long

  Dim myLastRow As Long  '最終行を格納する変数
  Dim myLastCol As Integer '最終列を格納する変数

  Worksheets("顧客リスト").Activate
  Call RowColumn(myLastRow, myLastCol)
 
  最終行 = myLastRow
  最初行 = 2

  Worksheets("宛名印刷").Activate
  For 番号 = 最初行 To 最終行
    Sheets("宛名印刷").Range("E1").Value = 番号
    Sheets("宛名印刷").PrintOut
  Next 番号
End Sub
Sub RowColumn(myLastRow, myLastCol)
  With ActiveSheet.UsedRange
   myLastRow = .Rows(.Rows.Count).Row
   myLastCol = .Columns(.Columns.Count).Column
  End With
End Sub

【14881】Re:オートフィルター後のナンバーの読み...
お礼  YN61  - 04/6/9(水) 6:20 -

引用なし
パスワード
   ▼kein さん:
早速のご回答ありがとうございました。

>質問文とコードの内容がちぐはぐでよく理解できませんが、フィルターで抽出した
>"行"を、1行づつ宛名印刷シートの1行目にコピーして印刷する。というマクロなら

十分な表現が出来ておりませんでしたが、この内容そのものでございます。ありがとうございました。

このコードの部分の意味はどういうことを指しているのでしょうか。
お時間がありましたら、解説とポイントを教えていただけませんでしょうか。
>ErLine:
>  Set MyR = Nothing
>  If Err.Number > 0 Then
>   MsgBox Err.Number & vbLf & Err.Description
>  Else
>   MsgBox "印刷を終了しました", 64
>  End If

【14882】Re:オートフィルター後のナンバーの読み...
お礼  YN61  - 04/6/9(水) 6:46 -

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

早速ご返事ありがとうございました。十分な説明が出来ておりませず失礼いたしました。
貴殿の書いていただいている通りです。丁寧に解説していただき、恥ずかしい思いをしております。本当に失礼しました。お忙しい中本当に丁寧な解説をしていただき感謝しています。
連番が非表示というか、一時的に歯抜けに(オートフィルタをかけているため)なっているその状態のナンバーを拾って行きたいと考えておりました。
ご指摘いただいたこの通りの状態です。

>
>A    B    C
>No.    顧客    住所
>1    a    東京
>3    c    東京
>7    g    東京
>
>のように表示されているとすれば、下記のようなVBAコードで処理ができると思いますが・・・、オートフィルターとビジュアルの意味がよくわからないので、ご質問の回答とはなっていないかも知れませんね。

この表でNo1、3、7・・・の順で数字を拾って、指定したセルにその数字を反映させるか、表示されたNo.の一列を表示する、のどちらかをしたく思っていました。
UsedRangeという表現がありますが、これからhelpで調べさせていただきますが・・・
これはどのような働きなのでしょうか。

貴殿のコードを走らせましたが、表示されていないNo.もピックアップしますが、何か問題があるのでしょうか。連番が順次全て表示しますが、小生、何かおかしいことをしているのでしょうか。留意点がありましたら、ご指導ください。

【14885】Re:オートフィルター後のナンバーの読み...
回答  しん  - 04/6/9(水) 11:33 -

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

>UsedRangeという表現がありますが、これは
ワークシートの中の使用済みセル範囲(書式とか値が入力されているセル範囲)を取得するという意味です。

>貴殿のコードを走らせましたが、表示されていないNo.もピックアップしますが、何か問題があるのでしょうか。連番が順次全て表示しますが、小生、何かおかしいことをしているのでしょうか。留意点がありましたら、ご指導ください。
すみません。印刷の部分までチェックしていなかったものですから、もしフィルタされた顧客リストのみを選択番号順に1枚ずつ印刷したいのであれば、以下のVBAコードで印刷できると思いますが・・・。

Sub 葉書宛名差込印刷()
  Dim 番号 As Long
  Dim 最初行 As Long
  Dim 最終行 As Long

  Dim myLastRow As Long  '最終行を格納する変数
  Dim myLastCol As Integer '最終列を格納する変数
  
  Dim i As Long      '行を格納する変数
  Dim j As Integer     '列を格納する変数

  Worksheets("顧客リスト").Activate
  
  Call RowColumn(myLastRow, myLastCol)
 
  最終行 = myLastRow
  最初行 = 2
  
  Worksheets("宛名印刷").Activate
  
  For i = 最初行 To 最終行
    For j = 1 To myLastCol
      Worksheets("宛名印刷").Cells(1, 4 + j).Value = Worksheets("顧客リスト").Cells(i, j).Value
    Next j
    Worksheets("宛名印刷").PrintOut
  Next i
End Sub

Sub RowColumn(myLastRow, myLastCol)
  With ActiveSheet.UsedRange
   myLastRow = .Rows(.Rows.Count).Row
   myLastCol = .Columns(.Columns.Count).Column
  End With
End Sub

【14903】Re:オートフィルター後のナンバーの読み...
回答  しん  - 04/6/9(水) 19:55 -

引用なし
パスワード
   ▼YN61 さん:
こんばんは、YN61さんの疑問点をよく読み直してわかりました。オートフィルタとは元データシートに検索をかけたとき検索されたセル行だけが明示的に表示され、それ以外のセルデータは表示はされないが、元データシートには残っているということなんですね。そのような場合は私が先に回答したVBAコードではセル範囲の自動取得が元データシートのセル範囲と同じくなってしまいYN61さんの処理したい結果とはとは違ってしまいます。
それで、検索して合致したデータのセル範囲のみを自動取得して、検索結果を単に「宛名印刷」シートのE1セルを始点にして検索データの出力をしたいということであれば、下記のVBAコードではどうでしょうか?

Sub 葉書宛名差込印刷()
  'Dim 番号 As Long
  'Dim 最初行 As Long
  'Dim 最終行 As Long
  Dim myLastRow As Long  '最終行を格納する変数
  Dim myLastCol As Integer '最終列を格納する変数
  Dim i As Long      '行を格納する変数
  Dim j As Integer     '列を格納する変数
  Dim iRow As Long     '検索された行
  Dim strSearch As String '検索文字列
  Dim strNo As String   '顧客No.
  Dim strName As String  '顧客名前
  Dim strAddress As String '顧客住所
  
  '------ワークシート「宛名印刷」の1行目以下を消去する-----------------
  Sheets("宛名印刷").Select
  Worksheets("宛名印刷").Range("1:64000").Rows.Delete
  '------ワークシート「顧客リスト」のセル範囲を取得する----------------
  Worksheets("顧客リスト").Activate
  Call RowColumn(myLastRow, myLastCol)
  '最終行 = myLastRow
  '最初行 = 2
  '------顧客住所の検索と検索結果のワークシート「宛名印刷」への出力----
  strSearch = InputBox("絞り込みたい顧客の住所を入力して下さい!")
  iRow = 0
  For i = 2 To myLastRow
    If strSearch = Worksheets("顧客リスト").Cells(i, 3) Then
      strNo = Worksheets("顧客リスト").Cells(i, 1)
      strName = Worksheets("顧客リスト").Cells(i, 2)
      strAddress = Worksheets("顧客リスト").Cells(i, 3)
      iRow = iRow + 1
      Worksheets("宛名印刷").Cells(iRow, 5) = strNo
      Worksheets("宛名印刷").Cells(iRow, 6) = strName
      Worksheets("宛名印刷").Cells(iRow, 7) = strAddress
    Else
    End If
  Next i
  '-----ワークシート「宛名印刷」の内容印刷-----------------------------
  Worksheets("宛名印刷").Activate
  Worksheets("宛名印刷").PrintOut
End Sub

Sub RowColumn(myLastRow, myLastCol)
  With ActiveSheet.UsedRange
   myLastRow = .Rows(.Rows.Count).Row
   myLastCol = .Columns(.Columns.Count).Column
  End With
End Sub

【14906】Re:オートフィルター後のナンバーの読み...
回答  IROC  - 04/6/9(水) 22:29 -

引用なし
パスワード
   こちらは参考になりませんか?

http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=8225&rev=&no=0

【14909】Re:オートフィルター後のナンバーの読み...
発言  しん  - 04/6/9(水) 23:08 -

引用なし
パスワード
   ▼IROC さん:
>http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=8225&rev=&no=0
がぴったりですね!

【14941】Re:オートフィルター後のナンバーの読み...
お礼  YN61  - 04/6/10(木) 22:53 -

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

色々とアドバイスや、ご指導ありがとうございます。
オートフィルター後の差込み印刷がマクロでもっと簡単にできると思っていました。
ワードとエクセルの組み合わせの差込印刷は、表には出ていませんが、多分マクロのようなものが組まれて居るのでしょうね。
ただ、不安定ですので、どうしても自作マクロで動かしてみたくなったのです。

色々とありがとうございました。
また、質問をさせていただくことがあると思います。その節にもよろしくお願いします。
また、添付いただきましたURLをじっくりと見させていただきます。
今後ともよろしくお願いします。

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