Excel VBA質問箱 IV

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

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


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

【72036】別Sheetのデータ挿入について VBA初心者 12/5/21(月) 9:52 質問[未読]
【72037】Re:別Sheetのデータ挿入について UO3 12/5/21(月) 13:21 発言[未読]
【72040】Re:別Sheetのデータ挿入について VBA初心者 12/5/21(月) 16:39 質問[未読]

【72036】別Sheetのデータ挿入について
質問  VBA初心者  - 12/5/21(月) 9:52 -

引用なし
パスワード
   こんにちわ。

 1行目と2行目を固定の項目として、3行目からデータが変更されれば、その都度Excelファイルが
作成される処理をしております。
 この処理にさらに、別シート(Sheet2)のB6〜I33をコピーして、振分作成されるExcelファイル
に挿入される処理を作成しようと思います。
 別シート(Sheet2)のB6〜I33は固定で全てのExcelファイルに挿入しようとしてます。
 
 
例)
  題名1  
  題名2
  データ
  データ
  データ
  
  ----------------------------------------------
   (Sheet2)のB6〜I33
  ----------------------------------------------

コメント「'◆テスト」にテスト的に記入してみたのですが、思うように処理できません。
ご存知の方がおりましたら、ご教授いただきたくよろしくお願いします。


---------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()

  Dim WS1 As Worksheet
  Dim Tbl As Range
  Dim v, i As Long, n As Long, n1 As Long
  Dim myPath As String
  Dim newBook As Workbook
  Dim Bookname As String

  Application.DisplayAlerts = False

  myPath = ActiveWorkbook.Path & "\"
  Set WS1 = ActiveWorkbook.Worksheets("Sheet1")

  'Set Tbl = ActiveSheet.[A1].CurrentRegion '◆ A列で Sort済み
  Set Tbl = WS1.[A1].CurrentRegion '◆ A列で Sort済み

  n = Tbl.Rows.Count
  v = Tbl.Resize(n + 1, 1).Value
  n1 = 3    '◆変更
  For i = 3 To n '◆変更
    If v(i, 1) <> v(i + 1, 1) Then '下と違えば
      With Workbooks.Add(xlWBATWorksheet) '◆変更 シート1枚のBook
        Tbl.Rows("1:2").Copy .Sheets(1).[A1] '◆見出し行2行をCopy
        Tbl.Rows(n1 & ":" & i).Copy .Sheets(1).[A3] '3行目へ
                
        .Sheets(1).UsedRange.EntireColumn.AutoFit '◆挿入
        
        
        Range("B23:E23").Select  '◆テスト
        Selection.Copy      '◆テスト
        Sheets("Sheet1").Select  '◆テスト
        ActiveSheet.Paste     '◆テスト


     With ActiveSheet.PageSetup
     .PrintTitleRows = "$1:$1"
     .PrintTitleColumns = ""
     End With
  ActiveSheet.PageSetup.PrintArea = ""
  With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftMargin = Application.InchesToPoints(0.787)
    .RightMargin = Application.InchesToPoints(0.787)
    .TopMargin = Application.InchesToPoints(0.984)
    .BottomMargin = Application.InchesToPoints(0.984)
    .HeaderMargin = Application.InchesToPoints(0.512)
    .FooterMargin = Application.InchesToPoints(0.512)
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .PrintQuality = 200
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlLandscape
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = False
    .PrintErrors = xlPrintErrorsDisplayed
  End With
        Bookname = v(i, 1) '↓ A列データが日付のときはBook名をFormatする
        If IsDate(Bookname) Then Bookname = Format$(v(i, 1), "yy-mm-dd")
        .SaveAs myPath & v(i, 1) & ".xls", FileFormat:=XlFileFormat.xlExcel8
        .Close False
      End With
      n1 = i + 1
    End If
  Next

  'Application.SheetsInNewWorkbook = nSheet
  
  MsgBox "出力しました"


End Sub

【72037】Re:別Sheetのデータ挿入について
発言  UO3  - 12/5/21(月) 13:21 -

引用なし
パスワード
   ▼VBA初心者 さん:

こんにちわ。

コードは読んでいないけど、全体的に、元ブックのSheet1以外のシートがどれなのかが
ちょっとあいまいなコード記述になっていますね。全て、ちゃんと指定したほうがいいです。
少なくとも、【元ブックのSheet2】は、ちゃんと(WS1のように)設定しておくべき。

で、本題。
質問文の中では「B6〜I33」、一方、アップされたコードの中では「B23:E23」。
ここはどうなのでしょう?

いずれにしても
1.Range("B23:E23").Select  '◆テスト
2.Selection.Copy      '◆テスト
3.Sheets("Sheet1").Select  '◆テスト
4.ActiveSheet.Paste     '◆テスト

この1.は、今アクティブなブックのアクティブなシートをさしています。
で、今、アクティブなブックは、新規に作成するために追加されたブックですよね。
それと気になるのは、4. これは新規に作成するブックのSHeet1にペーストするんだけど
そのペーストする場所は?たまたまブックを追加してから、セルを動かしてはいないので
A1を想定しているのでしょうか?

たとえば元ブックのSheet2が WS2 なら

WS2.Range("B23:E23").Copy Sheets("SHeet1").range("A1") といったように記述しましょう。

値コピーでいいならコピペじゃなく

Sheets("Sheet1").range("A1:D23").value = WS2.Range("B23:E23").Value

といった書き方のほうが素直かな?
(コピー先のセルは想像でA1にしているけど、ここは実際のものに)

★何をどうしたいのかがわからないので、コードをざっと眺めた上での感想。
 勘違いしていたらスルー願います。

【72040】Re:別Sheetのデータ挿入について
質問  VBA初心者  - 12/5/21(月) 16:39 -

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

ご返信有難うございます。
 ご教授していただいた通り、
--------------------------------------------------------------------------------- 
Private Sub CommandButton1_Click()

  Dim WS1 As Worksheet
  Dim Tbl As Range
  Dim v, i As Long, n As Long, n1 As Long
  Dim myPath As String
  Dim newBook As Workbook
  Dim Bookname As String

  Application.DisplayAlerts = False

  myPath = ActiveWorkbook.Path & "\"
  Set WS1 = ActiveWorkbook.Worksheets("Sheet1")
  
  Set WS2 = ActiveWorkbook.Worksheets("Sheet2") 'テスト


  'Set Tbl = ActiveSheet.[A1].CurrentRegion '◆ A列で Sort済み
  Set Tbl = WS1.[A1].CurrentRegion '◆ A列で Sort済み

  n = Tbl.Rows.Count
  v = Tbl.Resize(n + 1, 1).Value
  n1 = 3    '◆変更
  For i = 3 To n '◆変更
    If v(i, 1) <> v(i + 1, 1) Then '下と違えば
      With Workbooks.Add(xlWBATWorksheet) '◆変更 シート1枚のBook
        Tbl.Rows("1:2").Copy .Sheets(1).[A1] '◆見出し行2行をCopy
        Tbl.Rows(n1 & ":" & i).Copy .Sheets(1).[A3] '3行目へ
        
        Sheets("Sheet1").Range("A10:J30").Value = WS2.Range("A5:J23").Value 'テスト


        .Sheets(1).UsedRange.EntireColumn.AutoFit '◆挿入


     With ActiveSheet.PageSetup
     .PrintTitleRows = "$1:$1"
     .PrintTitleColumns = ""
     End With
------------------------------------------------------------------------------------------
にて、 「Set WS2 = ActiveWorkbook.Worksheets("Sheet2") 'テスト」
と「Sheets("Sheet1").Range("A10:J30").Value = WS2.Range("A5:J23").Value 'テスト」
を追加しましたが、上手くいきません。

やりたい事は例として、
「Sheet1」
題名1
題名2
りんご \100
りんご \100
りんご \100
バナナ \200
バナナ \200
メロン \500

「Sheet2」

-------注意事項-----------------
冷蔵保存して下さい。
---------------------------------

作成されるデータ1.
題名1
題名2
りんご \100
りんご \100
りんご \100
-------注意事項-----------------
冷蔵保存して下さい。
---------------------------------

作成されるデータ2.
題名1
題名2
バナナ \200
バナナ \200
-------注意事項-----------------
冷蔵保存して下さい。
---------------------------------

作成されるデータ3.
題名1
題名2
メロン \500
-------注意事項-----------------
冷蔵保存して下さい。
---------------------------------

としたいと考えております。
ご教授をお願い致します。


>▼VBA初心者 さん:
>
>こんにちわ。
>
> コードは読んでいないけど、全体的に、元ブックのSheet1以外のシートがどれなのかが
> ちょっとあいまいなコード記述になっていますね。全て、ちゃんと指定したほうがいいです。
> 少なくとも、【元ブックのSheet2】は、ちゃんと(WS1のように)設定しておくべき。
>
> で、本題。
> 質問文の中では「B6〜I33」、一方、アップされたコードの中では「B23:E23」。
> ここはどうなのでしょう?
>
> いずれにしても
>1.Range("B23:E23").Select  '◆テスト
>2.Selection.Copy      '◆テスト
>3.Sheets("Sheet1").Select  '◆テスト
>4.ActiveSheet.Paste     '◆テスト
>
> この1.は、今アクティブなブックのアクティブなシートをさしています。
> で、今、アクティブなブックは、新規に作成するために追加されたブックですよね。
> それと気になるのは、4. これは新規に作成するブックのSHeet1にペーストするんだけど
> そのペーストする場所は?たまたまブックを追加してから、セルを動かしてはいないので
> A1を想定しているのでしょうか?
>
> たとえば元ブックのSheet2が WS2 なら
>
> WS2.Range("B23:E23").Copy Sheets("SHeet1").range("A1") といったように記述しましょう。
>
> 値コピーでいいならコピペじゃなく
>
> Sheets("Sheet1").range("A1:D23").value = WS2.Range("B23:E23").Value
>
> といった書き方のほうが素直かな?
> (コピー先のセルは想像でA1にしているけど、ここは実際のものに)
>
> ★何をどうしたいのかがわからないので、コードをざっと眺めた上での感想。
> 勘違いしていたらスルー願います。

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