• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロで関数を使う方法)

マクロで関数を使う方法

このQ&Aのポイント
  • マクロを使用して工場のパーツの出荷に関するファイルの処理をスムーズに行う方法を教えてください。
  • 毎月最新データが送られてくるファイルに、過去のファイルから一部データを取り込む処理を簡単にする方法があれば教えてください。
  • 上記の処理をマクロを使用して実現する方法や、他の簡単な方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.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)
回答No.2

n-junです。 #1のコードをメモ帳などで一度テキストファイル(てすと.txt)に貼付けます。 保存した後でファイルの名前変更で拡張子”txt”を”vbs”とします。 そのアイコンをデスクトップに準備して下さい。 次に0904.xls 0905.xlsのファイルをデスクトップにコピペして下さい。 2つのファイルを選択して、同時にドラッグし(てすと.vbs)のアイコンの上に 重ねて下さい。 暫くすると”作業が終わりました”と表示されますので、0905.xlsのファイルを 開いてみて下さい。 変更されているはずです。 ただしこれは提示された情報のみで検証し作成されています。 ・0904,0905とは固定されないため、違うBookの準備が必要だった。 ・データの転記は2列になっている。(それ以外はどこなのか不明) ・作業性からファイルをドラッグさせて処理を行えるようにしてみた。 と言った所です。 ご参考になれば幸いです。(Windows XPにて検証)

chimaki102
質問者

お礼

こんにちは。 回答ありがとうございます。 早速ためしでしてみました。 問題なく動くことができました。 この方法で自分でアレンジして組み替えていこうかと思います。 (転記数を増やした場合・・・できるか不安ですが) ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

取り敢えず提示されている範囲を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

関連するQ&A