- ベストアンサー
マクロで関数を使う方法
- マクロを使用して工場のパーツの出荷に関するファイルの処理をスムーズに行う方法を教えてください。
- 毎月最新データが送られてくるファイルに、過去のファイルから一部データを取り込む処理を簡単にする方法があれば教えてください。
- 上記の処理をマクロを使用して実現する方法や、他の簡単な方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
n-junです。 例えば0904.xlsがA列~N列までが検索範囲とした場合、 >Set rng1 = .Range("A2" ,.Cells(.Rows.Count ,1).End(-4162)).Resize(,5) を Set rng1 = .Range("A2" ,.Cells(.Rows.Count ,1).End(-4162)).Resize(,14) とする。 Resize(,5) はA列を1としてどの位広げるかですから、N列であれば14なので、 Resize(,14) です。 0905.xls の方は With .Offset( ,3) ⇒A列からいくつ右に移動するか(E列なら3つ) .Formula = "=VLOOKUP(A2,[" & wb1.Name & "]" & wb1.Worksheets(1).Name & "!" & rng1.Address & ",4,0)" ⇒4は0904.xlsの列数を差してます。 .Value = .Value End With これらをループ処理で行なえば、 For i = 1 To 11 With .Offset( ,i + 2) .Formula = "=VLOOKUP(A2,[" & wb1.Name & "]" & wb1.Worksheets(1).Name & "!" & rng1.Address & "," & i + 3 & ",0)" .Value = .Value End With Next
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
n-junです。 #1のコードをメモ帳などで一度テキストファイル(てすと.txt)に貼付けます。 保存した後でファイルの名前変更で拡張子”txt”を”vbs”とします。 そのアイコンをデスクトップに準備して下さい。 次に0904.xls 0905.xlsのファイルをデスクトップにコピペして下さい。 2つのファイルを選択して、同時にドラッグし(てすと.vbs)のアイコンの上に 重ねて下さい。 暫くすると”作業が終わりました”と表示されますので、0905.xlsのファイルを 開いてみて下さい。 変更されているはずです。 ただしこれは提示された情報のみで検証し作成されています。 ・0904,0905とは固定されないため、違うBookの準備が必要だった。 ・データの転記は2列になっている。(それ以外はどこなのか不明) ・作業性からファイルをドラッグさせて処理を行えるようにしてみた。 と言った所です。 ご参考になれば幸いです。(Windows XPにて検証)
- n-jun
- ベストアンサー率33% (959/2873)
取り敢えず提示されている範囲をVBSで。 Dim FSO , Fname2 Dim xlApp Dim wb1 , wb2 Dim rng1 Dim v , w Set Fname = WScript.Arguments If Fname.Count = 0 Or Fname.Count <> 2 Then WScript.Echo "Excelファイルをドラッグして下さい。" & vbCrLf & _ "または2つのExcelファイルをドラッグして下さい。" WScript.Quit End If For i = 0 To 1 Ext = LCase(Right(Fname(i), 4)) If Not (Ext = ".xls") Then WScript.Echo "このファイルはExcelファイル(.xls)ではありません。" WScript.Quit End If Next Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False xlApp.WorkBooks.Open(Fname(0)) xlApp.WorkBooks.Open(Fname(1)) v = Split(Fname(0),"\") : w = Split(Fname(1),"\") If v(Ubound(v)) < w(Ubound(w)) Then Set wb1 = xlApp.WorkBooks(v(Ubound(v))) Set wb2 = xlApp.WorkBooks(w(Ubound(w))) Else Set wb1 = xlApp.WorkBooks(w(Ubound(w))) Set wb2 = xlApp.WorkBooks(v(Ubound(v))) End If With wb1.worksheets(1) Set rng1 = .Range("A2" ,.Cells(.Rows.Count ,1).End(-4162)).Resize(,5) End With With wb2.Worksheets(1) With .Range("A2" ,.Cells(.Rows.Count , 1).End(-4162)) With .Offset( ,3) .Formula = "=VLOOKUP(A2,[" & wb1.Name & "]" & wb1.Worksheets(1).Name & "!" & rng1.Address & ",4,0)" .Value = .Value End With With .Offset( ,4) .Formula = "=VLOOKUP(A2,[" & wb1.Name & "]" & wb1.Worksheets(1).Name & "!" & rng1.Address & ",5,0)" .Value = .Value End With End With End With wb1.Close False wb2.Close True xlApp.Quit WScript.Echo "作業は終了しました" Set xlApp = Nothing Set wb1 = Nothing Set wb2 = Nothing Set rng1 = Nothing
お礼
こんにちは。 回答ありがとうございます。 早速ためしでしてみました。 問題なく動くことができました。 この方法で自分でアレンジして組み替えていこうかと思います。 (転記数を増やした場合・・・できるか不安ですが) ありがとうございました。