Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP Professional : Excel 2010)
2行おきにデータを取り出したい
投稿日時: 18/10/10 13:06:37
投稿者: Owl916

再度質問させてください。
SheetAとBがあります。SheetAは取り出したデータを印刷する画面です。
SheetBにはデータが縦に並んでいます。
 SheetBから2行おきにデータを取り出して連続印刷したいのですが、
codeの書き方がわかりません。教えてください。
(VLOOKUP関数の使い方は多少ですがわかります。)

回答
投稿日時: 18/10/10 13:27:07
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
codeの書き方がわかりません。教えてください。

 
ここの掲示板では、コードの作成依頼は禁止されています。
 
なぜ、前スレを続けなかったのですか?
↓前スレ
 
http://www.moug.net/faq/viewtopic.php?t=77539
 
VLOOKUP関数で、SheetBから、SheetAに取り込めば、後は印刷するだkでしょ。!
印刷するだけならば、前スレに掲示したコードで問題ないはずです。
 
 
 

回答
投稿日時: 18/10/10 13:34:45
投稿者: WinArrow
投稿者のウェブサイトに移動

質問に対する姿勢について、一言、注意しておきます。
 
↓のような、極めて漠然とした、仕様では、コード化することは不可能です。

引用:
SheetBにはデータが縦に並んでいます。
  SheetBから2行おきにデータを取り出して連続印刷したいのですが

回答
投稿日時: 18/10/10 14:19:33
投稿者: sk

引用:
SheetAとBがあります。SheetAは取り出したデータを印刷する画面です。
SheetBにはデータが縦に並んでいます。
SheetBから2行おきにデータを取り出し連続印刷したいのですが、
codeの書き方がわかりません。

「連続印刷」の件は全く別の問題なので
とりあえず後回しにするとして、
 
(標準モジュール)
----------------------------------------------------------------------
Private Sub subPickupRows()
 
    Dim xlsWorkbook As Excel.Workbook
 
    Dim xlsSourceSheet As Excel.Worksheet
    Dim xlsSourceRange As Excel.Range
     
    Dim xlsDestinationSheet As Excel.Worksheet
    Dim xlsDestinationRange As Excel.Range
     
    Dim varCurrentRow As Variant
     
    Dim lngRow As Long
    Dim lngFirstRow As Long
    Dim lngLastRow As Long
    Dim lngNewRow As Long
 
    Dim lngFirstCol As Long
    Dim lngLastCol As Long
     
    Set xlsWorkbook = ThisWorkbook
     
    Set xlsSourceSheet = xlsWorkbook.Worksheets("SheetB")
    Set xlsSourceRange = xlsSourceSheet.UsedRange
     
    With xlsSourceRange
        lngFirstRow = 1 'ワークシートの1行目を列見出しとする場合は 2 にする
        lngLastRow = .Rows.Count
        lngFirstCol = 1
        lngLastCol = .Columns.Count
    End With
     
    '新規ワークシートの挿入と参照
    Set xlsDestinationSheet = xlsWorkbook.Worksheets.Add
     
    lngNewRow = 1
     
    For lngRow = lngFirstRow To lngLastRow Step 3
        With xlsSourceRange
            varCurrentRow = .Range(.Cells(lngRow, lngFirstCol), _
                                   .Cells(lngRow, lngLastCol)).Value
        End With
        With xlsDestinationSheet
            Set xlsDestinationRange = .Range(.Cells(lngNewRow, lngFirstCol), _
                                             .Cells(lngNewRow, lngLastCol))
            xlsDestinationRange.Value = varCurrentRow
            Set xlsDestinationRange = Nothing
        End With
        lngNewRow = lngNewRow + 1
    Next
 
    xlsDestinationSheet.Activate
 
    Set xlsDestinationSheet = Nothing
    Set xlsSourceRange = Nothing
    Set xlsSourceSheet = Nothing
    Set xlsWorkbook = Nothing
 
End Sub
----------------------------------------------------------------------
 
上記のコードのような具合に、 3n + 1 行目(もしくは 3n + 2)の
セル範囲を、先頭から順に参照出来ればよい、ということでしょうか。

回答
投稿日時: 18/10/10 14:29:57
投稿者: WinArrow
投稿者のウェブサイトに移動

前スレでの説明では
@「1枚のシートにまとめる」について
>780社の基本データを1枚のシートにまとめようと思います。
と書かれています。
しかし、SheetBシートには基本データが存在するんですよね?
ということは、すでに1枚のシートにまとまっていると思いますが、
違いますか?
 
A「引継ぎ資料として、連続印刷したい」について
引継ぎ資料ですから、1回だけの印刷と考えますが・・・・
1回だけでよいのでしたら、「番号」を指定する意味はあるのでしょうか?
何回も番号を指定して印刷するって、要望があるのでしたら、
常に「1から指定の番号まで」は、無駄があるとは思いませんか?
抽出開始番号と、抽出終了番号の2つを指定する方が無駄がないと思いますが・・・
 
もう一つは、
>連続印刷の意味が分かりません。
具体的に、どのようになればよいのか説明してほしいです。
前スレでは、3行分(1社)を印刷するコードでした(1社/ページ)
が、この仕様とは異なるのですか?
 
 
勝手に推測しますが、
「抽出開始番号と抽出終了番号の2つを指定して、
指定した番号に該当するデータを、SheetBからSheetAに複写して、
SheetAを印刷したい」
という仕様ではないかと思いますが、違いますか?
 
 
 
 
 
 

投稿日時: 18/10/10 19:37:48
投稿者: Owl916

数々のご無礼の段、誠に申し訳ありませんでした。
何とか自分でCodeを書いて作業が無事に終了し780社分の資料を
電子文書化できました。ありがとうございました。 
かなりパニックになっていたためご迷惑失礼の数々すみませんでした。