2018年2月17日土曜日

CSVファイルを選択してコピペする

こんにちは、Shigeです。
今回はエクセルを選択してブックに取り込むコードをのっけます。
  1. Sub BookOpen()
  2. Dim fname As String, Thisbook As String
  3. Dim ws As Worksheet
  4. Dim SetArea As Range

  5. Thisbook = ThisWorkbook.Name '現在のブックの名前を格納
  6.     Worksheets("TOP").Cells.ClearContents
  7.     fname = Application.GetOpenFilename(Title:="帳簿を選択")
  8.     If fname <> "False" Then
  9.         Workbooks.Open Filename:=fname
  10.     Else
  11.         MsgBox " キャンセルしました"
  12.         Exit Sub
  13.     End If

  14. Newbook = ActiveWorkbook.Name  '選択したブックの名前を格納
  15.     On Error Resume Next
  16.     Set SetArea = Range("A:J")

  17.     SetArea.Copy
  18.     
  19.     Workbooks(Thisbook).Activate
  20.     Worksheets("TOP").Cells(1, 1).PasteSpecial
  21.        
  22.     Application.DisplayAlerts = False
  23.         Workbooks(Newbook).Close
  24.     Application.DisplayAlerts = True
  25.         
  26.     MsgBox "コピーしたのでCSVを作成してください"
  27. End Sub
では、ざっくり説明していきます。
まず、必要なシートは「TOP」というシートです。こちらは名前を「Date」とか「データ」とかシートを作成してもらえば、「TOP」の部分を変更すれば動きます。
7行目 Worksheets("TOP").Cells.ClearContents 「TOP」シートのデータをクリアする
説明としては上の「クリアする」で十分だと思うのですが、なんで消すのかというと基本的にこのコードを使う時には「取込したいエクセル」っていうのが決まっていて、それ以外のデータは入っていてほしくない為、最初にデータを消しています。
8~14行目は取込したいエクセルを選ばせるダイアログを表示させます。
16行目 Newbook = ActiveWorkbook.Name  '選択したブックの名前を格納
6行目を飛ばしましたが、なんでブックの名前を格納しているのかは、エクセルのブックを新規に開くとその開いたエクセルがアクティブ(選択した状態)になる為、貼り付けたいエクセルに戻るためには、戻りたいエクセルの名前を格納しておくとWorkbooks(〇〇).Activateでどちらのブックも選択することができます。
18行目 Set SetArea = Range("A:J") コピーしたい列を格納(Range型)
23行目 Worksheets("TOP").Cells(1, 1).PasteSpecial TOPシートに貼付
26行目 Workbooks(Newbook).Close 選択したエクセルを閉じる

とりあえず赤文字のところを変更すれば理屈は抜きに使用できると思います。
もちろん、この単体のコードだけではコピペするのみですので、「その先」に行くためには独自のコードが必要になりますが、コンバーターを作成する上での導入部分はこちらでいいんじゃないでしょうか。
では、また。

0 件のコメント:

コメントを投稿

ブックの全シートをまとめるコード

こんにちは、Shigeです。 今回は、ブックに複数あるシートのデータを「まとめ」のシートにコピペするコードです。 Sub Matome()   Dim i As Integer   Dim lRow As Long, lCol As Long, lRow2 As Lo...