プロが教えるわが家の防犯対策術!

恐らく基本的な操作なのかもしれないのですが、初心者ゆえ苦戦しております。
マクロの加工操作はそこそこ作れるようになって来たのですが、データの抽出や、吐き出し方がよくわかりません。どうぞお助けくださいませ。

●決められた加工作業を行うにあたり、不特定のエクセルから情報を引用し、マクロ加工を行い、
それをCSVファイルとしてアウトプットするということを行いたいのです。

やりたい事①(ボタン1)
Book1のExcel上に[参照]ボタンをつくり、参照したいExcelを選択すると、
そのExcelの情報がBook1のsheet1に左上から引用されるというもの。

やりたい事②(ボタン2)
参照したデータをマクロで加工。(ここは作れました!)

やりたい事③(ボタン3)
加工されたデータをCSVファイルとしてoutputする。(できれば名称も自由に変えれるようにしたい)
保存される場所はBook1を保存しているフォルダと同一。(同一フォルダ内にoutputフォルダがつくられそこへ保存でも可能)

よろしくお願い致します。

A 回答 (3件)

こんにちは。



#1の回答者です。
>①も困っている状態です。
そうだったのですね。
>「Book1のExcel上に[参照]ボタンをつくり、参照したいExcelを選択すると、
>そのExcelの情報がBook1のsheet1に左上から引用されるというもの。」

これを、どのレベルまで押し上げられるのか、または、逆に簡易的に済ませるのか、今の段階では、ちょっと、こちらからは手が出ませんね。#2さんの示されたものが、ヒントになるかもしれませんが、実際にVBAで作るとなれば大変です。具体的な内容があれば、アドバイスはできるかと思います。
    • good
    • 0

例えば、あるフォルダに見積書.xlsのファイルは複数あり、それらのファイルを開いて、


A1の内容を台帳のA2へ、B2の内容を台帳のB2へ.....、最後に見積書の内容は一覧として纏められます。

これは見積書と台帳の「マッピング」が必要となります。
(見積書のどのセルの内容を台帳のどの列にコピーする定義)

定義されたマッピングに基づいて、VBAで纏められます。
下記に似ていると思います。ご参考ください。
    • good
    • 0

こんばんは。


>恐らく基本的な操作なのかもしれないのですが、
最初に、VBAというか、マクロというか、すべて簡単なものというものはないと思っいたほうがよいかと思います。

>やりたい事③(ボタン3)
>加工されたデータをCSVファイルとしてoutputする。
ここだけでいいのですよね。output自体は、定番というものはあるものの、それぞれの味付けがされているものがありますから、私もそうしたように、人のテクニックを学ばれるとよいでしょう。

>(同一フォルダ内にoutputフォルダがつくられそこへ保存でも可能)
コードが長くなりますので、今回は、パスしましたが、
>保存される場所はBook1を保存している
一応、一回、保存したBookでないと、フォルダーは取れません。

なお、VBAでCSV ファイルを作る場合、いくつかの違ったものができます。
・Unix系の改行コードが、LF(Line Feed)のもの
・文字列がUNICODEになっているもの
・文字列には、" " で囲まれているもの。数値には付かない。
これらは、以下のコードでは作れないはずです。

'//
Sub CSVOutput()
 Dim myPath As String
 Dim myFname As Variant
 Dim rng As Range
 Dim Fno As Integer
 Dim buf As String
 Dim i As Long
 Dim j As Long
 myPath = ThisWorkbook.Path & "\"
 'A1から
 Set rng = Range("A1").CurrentRegion
 ''Set rng = ActiveSheet.UsedRange 'A1から始まっていない場合
 If rng.Cells.Count < 2 Then MsgBox "データが少なすぎます", vbExclamation: Exit Sub
 
 ChDir myPath 'あまり意味はありませんが、なんとなくです。
 myFname = Application.GetSaveAsFilename("", "テキスト ファイル (*.csv), *.csv")
 If myFname = False Then
  Exit Sub
 ElseIf Dir(myFname) <> "" Then
  If MsgBox("同じ名前のファイルがあります。上書きしますか?", vbQuestion) = vbCancel Then
   Exit Sub
  End If
 End If
 
  Fno = FreeFile()
  Open myFname For Output As #Fno
  With rng
  For i = 1 To .Rows.Count
   For j = 1 To .Columns.Count
    If Not IsEmpty(.Cells(i, 1).Value) Then
      buf = buf & "," & .Cells(i, j).Value
     End If
   Next j
   Print #Fno, Mid(buf, 2)
   buf = ""
  Next i
  End With
  Close #Fno
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!③は頂いたコードで無事解決しました!
しかし残念ながら個人でできたのは②のみで、①も困っている状態です。
他の方の回答を見ながらもう少し勉強してみます。
お尻の部分ができて嬉しいです。本当にありがとうございました!

お礼日時:2015/03/13 08:28

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