- 締切済み
【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く
【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ 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)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
内容については、状況に合わせて加工してください。 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