電子書籍の厳選無料作品が豊富!

【至急】VBAわかる方、ご教示ください。
▫️やりたいこと
Sheet1のA1から2行飛ばしでSheet2のA列を貼り付け
Sheet1のA2から2行飛ばしでSheet2のB列を貼り付け
Sheet1のB1から2行飛ばしでSheet2のD列を貼り付け
Sheet1のB2から2行飛ばしでSheet2のC列を貼り付け
A4サイズで印刷


Application.ScreenUpdating=False
Worksheets (“Sheet1).select
Worksheets (“Sheet2).select
Range(“A1”).Select
Selection.End(xldown).Select
Saigo=ActiveCell.Row

If Renge(“A2”)=“”then
Saigo=1
End if

If Saigo=1 Then
Err=8
Application.Run”errs Shoto”
Exit Sub
End If

For i=2 to Saigo
Worksheetts(“Sheet2”).Select
kiban =cells(i,1)
Worksheets (“Sheet1”).select
Range(“A1”)=kiban
ActiveWindow.SelectedSheets.PrintOut Collate:=tire

どうしたらいいでしょうか…

「【至急】VBAわかる方、ご教示ください。」の質問画像

A 回答 (3件)

こんばんは



以下でどうでしょうか。
Sub sumple2()
Application.ScreenUpdating = False

Dim s1 As Worksheet, s2 As Worksheet, saigo As Long, i As Long, k as long
Set s1 = Sheets("sheet1")
Set s2 = Sheets("sheet2")
saigo = s2.Range("A1").End(xlDown).Row

'if saigo = 云々は省略

With s2
  For i = 2 To saigo
    k = (i - 2) * 3 +1
    s1.Cells(k, 1) = .Cells(i, 1)     
    s1.Cells(k + 1, 1) = .Cells(i, 2)
    s1.Cells(k, 2) = .Cells(i, 4)
    s1.Cells(k + 1, 2) = .Cells(i, 3)
  Next i
End Wtih

s1.PrintOut Collate:=tire

Application.ScreenUpdating = True
End Sub

No.2の方の回答と基本的には同義です。少し見やすくなったくらいでしょうか。

印刷については、シート1を印刷するものとお見受けしたためそうしています。PrintOutメソッドはワークシートオブジェクトに使えばそのシートのみを印刷できます。
用紙サイズについてはVBAではなく、あらかじめページ設定をA4にしておくのをお勧めします。
    • good
    • 0

こんばんは!



おそらくこういうコトをお望みだと解釈して・・・
標準モジュールにしてください。

Sub Sample1()
 Dim i As Long, myRow As Long
 Dim wS As Worksheet
  Set wS = Worksheets("Sheet2")
   With Worksheets("Sheet1")
    For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//←Sheet2の2行目~A列最終行まで//
     myRow = (i - 2) * 3 + 1
      .Cells(myRow, "A").Resize(2).Value = Application.Transpose(wS.Cells(i, "A").Resize(, 2).Value)
      .Cells(myRow, "B") = wS.Cells(i, "D")
      .Cells(myRow + 1, "B") = wS.Cells(i, "C")
    Next i
   End With
End Sub

こんな感じではどうでしょうか?

※ いちいちSheetをアクティブにすると時間を要するだけなので、
Selectはしません。m(_ _)m
    • good
    • 0

こんにちは



なんだかややこしいですね・・・
添付図を見ると、Sheet2のA~D列の値を参照して、同じ行の値を
 A列の値  D列の値
 B列の値  C列の値
という風に2行に渡って配置し、次に空行をいれて、3行をセットにして繰り返すって感じでしょうか?

まずは、その参照をそのまま式にして、A1セルに
=IF(MOD(ROW(A1),3)=0,"",OFFSET(Sheet2!$A$1,INT(ROW(A3)/3),INDEX({0,3,1,2},COLUMN(A4)+MOD(ROW(A3),3)*2)))
でフィルコピーするとご提示のような参照になると思います。
セルの関数を消して値に変換したければ「値をペースト」で固定化すれば宜しいです。

さて、ご質問はVBAで同様の処理を行いたいとのことですが、上記の内容をそのままVBA化するのが簡単だと思います。
数式はちょっと長いですが、仮に、上記の数式を変数「f」に代入してあるとするなら
 With Worksheets("Sheet1").Range("A1:B1000")
  .Formula = f
  .Value = .Value
 End With
のような要領で、数行で済ませられることと思います。
(仮の範囲をA1:B1000としてあります)
    • good
    • 0

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