• 締切済み

【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く

【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ A B C 1 2 3 4 5 6 新データ D E F 3 1 2 3 1 2 6 4 5 6 4 5 かなり簡略化で書いていますがやりたいことを記述していきます。 (1)マクロの記述しているブックのシート1にボタンを作成する。 ボタンから別のブックの元データ(CSVファイル)を選択。 元データのブックのシート1をマクロブックのシート2にコピーします。 コピーデータを加工、修正していきます。 (2)次に列のデータを入れ替えます。 これは法則がないので一行目の行をみて判断します。 (ex.C行の列ならD行に挿入する) (3)列を入れ替えた後、 3 1 2 6 4 5 になっていますがこれを 3 1 2 3 1 2 6 4 5 6 4 5 というふうに一行を二行にしていきます。 (4)最後にorder byします。 1、3、2列目の順にorder byします。 以上がやりたいことになります。 特に(1)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

内容については、状況に合わせて加工してください。 Private Sub CommandButton1_Click()  Dim rng As Range  Dim sh1 As Worksheet  Dim sh2 As Worksheet  Dim fn As Variant  Dim fnum As Integer  Dim i As Long, j As Long  Dim ar As Variant  Dim TextLine As String  Set sh1 = Worksheets("Sheet1") 'シート1  Set sh2 = Worksheets("Sheet2") 'シート2  On Error GoTo ErrHandler  If Application.CountA(sh1.Range("A1").CurrentRegion) > 0 Then   If MsgBox("データがありますが、削除しますか?", vbOKCancel) = vbOK Then    sh1.Range("A1").CurrentRegion.ClearContents   Else    Exit Sub   End If  End If  fn = Application.GetOpenFilename("CSVファイルl(*.csv),*.csv")  If VarType(fn) = vbBoolean Then Exit Sub  fnum = FreeFile()  j = 1  Application.ScreenUpdating = False  Open fn For Input As #fnum  Do While Not EOF(fnum)   Line Input #fnum, TextLine   ar = Split(TextLine, ",")   sh1.Cells(j, 1).Resize(, UBound(ar) + 1).Value = ar   j = j + 1  Loop  Application.ScreenUpdating = True  Set rng = sh1.Range("A1").CurrentRegion  If rng.Columns.Count < 3 Then Exit Sub  Application.ScreenUpdating = False  With rng   For i = 1 To rng.Rows.Count    sh2.Cells((i - 1) * 2 + 1, 2).Resize(, 2).Value = .Cells(i, 1).Resize(, 2).Value    sh2.Cells((i - 1) * 2 + 1, 1).Value = .Cells(i, 3).Value    sh2.Cells((i - 1) * 2 + 2, 1).Resize(, 3).Value = sh2.Cells((i - 1) * 2 + 1, 1).Resize(, 3).Value   Next  End With  Application.ScreenUpdating = True ErrHandler:  If Err.Number = 0 Then    sh2.Activate    MsgBox "エラーなく'" & sh2.Name & "'に転送されました。", vbInformation  End If End Sub

関連するQ&A