dポイントプレゼントキャンペーン実施中!

いつもお世話になってます。
マクロに関してですが、
見えているセル(可視セル)のみコピー&ペーストをする方法についての質問です。

請求書を連続印刷するマクロを質問させていただいたことがありまして。
http://oshiete.goo.ne.jp/qa/6948578.html

色々ありまして現在この形で使用しています。

Sub sample()
Dim lastrow As Long
Dim i As Long
Dim hassou_column As Integer

hassou_column = Range("W3").Column '条件項目のある列を指定(発送列)

'「発送」列の最終行を取得
lastrow = Range("W3").End(xlDown).Row
For i = 4 To lastrow
If Cells(i, hassou_column) = "●" Then
Call mySeikyusyoPrint(i)
End If
Next i
MsgBox "実行しました"
End Sub

Sub mySeikyusyoPrint(ByVal rowNum As Long)
Dim koumoku(24) As String
Dim j As Integer

Sheets("売上").Select

'「売上」側の処理
For j = 1 To 24
koumoku(j) = Cells(rowNum, j)
Next j

'「請」側の処理
Sheets("請").Select
For j = 1 To 24
Cells(1, j) = koumoku(j)
Next j

ActiveWindow.SelectedSheets.PrintOut From:=2, To:=32766, Copies:=1
Sheets("売上").Select

End Sub


「売上」「請」の2つシートがあり、「売上」のW列において●があるところを判定し、
●があるところだけ連続印刷していくという仕様になっています。

「売上シート」の1行目コピー→「請」シート1行目に貼り付け→印刷→
「売上シート」の次の行をコピー→「請」シート1行目に貼り付け→印刷
という繰り返しになっています。

「売上」シートには非表示列が存在しまして。
現在は非表示部分を削除して使用していますが、本来は消したくないという事もあり
今回このマクロに「可視セル」だけコピー&ペーストさせるにはどうすればいいか、
という話になり、その点でつまずきまして質問をさせていただきました。

何度か修正を加えたのですがうまくいかず。
可視セルと言うと
Selection.SpecialCells(xlCellTypeVisible).Select
で、可視セルを選択して、という流れかと思います。
しかし勉強不足以外の何物でもないのですが、結局わからず。

上記のマクロを修正でも全く別の形でも構いませんので、
皆様の知恵をお借しいただけないでしょうか。

いつも申し訳ございません。何卒よろしくお願い致します。

A 回答 (2件)

たとえば売上シートのABDFG列が可視(CE列が非表示)だとして,ABDFG列の値を「どこに」貼り付けたいのかが説明不足です。


非表示列は詰めて請シートのABCDE列に貼りたいのか,それとも非表示の列はスキップして列は対応したままABDFG列に記入したいのか。

また,非表示の列は「常に決まっている」のか,それともあんまりフツー考えにくいことですが何かの理由で「マクロを実行する都度イチイチ調べて今どこが見えてるのか/非表示なのか確認しなきゃならない」ということなのか,どういう状況なんでしょうか。



作成例:
非表示の列は可変
非表示列はスキップしてABDFG列をABDFG列に転記

sub mySeikyusyoPrint(byval rowNum as long)
 dim j as long
’準備必ず
 worksheets("請").range("A1:X1").clearcontents

’可視列を同じ列に転記する
 for j = 1 to 24
 if not worksheets("売上").columns(j).hidden then
  worksheets("請").cells(1, j).value = worksheets("売上").cells(rownum, j).value
 end if
 next j

 worksheets("請").printout from:=2, to:=999, copies:=1
end sub



ヤリタイ事を聞いてから回答するのはメンドクサイので:

sub mySeikyusyoPrint(byval rowNum as long)
 dim j as long
 dim k as long

’準備必ず
 worksheets("請").range("A1:X1").clearcontents

’可視列を詰めて転記する
 for j = 1 to 24
 if not worksheets("売上").columns(j).hidden then
  k = k + 1
  worksheets("請").cells(1, k).value = worksheets("売上").cells(rownum, j).value
 end if
 next j

 worksheets("請").printout from:=2, to:=999, copies:=1
end sub
    • good
    • 1
この回答へのお礼

長い上に説明不足で大変申し訳ございませんでした。

やりたかったのは後に教えていただいたマクロの方になります。
おかげで解決しました。
お手数おかけしてしまい申し訳ございません。
本当にありがとうございました!

お礼日時:2011/10/20 16:26

 マクロの記録を取って勉強すればすぐ判る。


マクロの記録はいつも念頭に置いておいて。
操作は、VBAをやるぐらいなら知って居ないとおかしいが
範囲指定して
編集ージャンプー「セル選択」ボタンー可視セルーOK
でどんなコードになるか。
これを応用して出来ないですか?
質問文が長いが、ほかに聞きたい点あるのかな?
    • good
    • 0
この回答へのお礼

仰る通り勉強不足でございました。
マクロの記録ももちろん取ってみてはいたのですが。力及ばずでした。
今後、色々な形でマクロの記録を取りながら、
勉強していきたいと思います。ありがとうございました。

お礼日時:2011/10/20 16:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!