マクロで関数を使う方法

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

マクロで関数を使う方法

マクロ初心者です。 下記処理をスムーズに行う場合どのようにすればよいか 悩んでおります。的外れなことを質問しているかもしれませんが わかる方がいましたら、教えてくださいお願いいたします。 工場のパーツの出荷に関してファイルを毎月まとめております。 毎月最新データーが他部署より送られてきて そのファイルを私が、過去のファイルから一部データーを持ってきたりしております。 今回、下記の処理を簡単にさせたいのですが、マクロで出来る方法があれば教えてください。 下記2つのファイルのフォーマットは基本同じです。 装置番号の並びはその月その月で並びが違います。 【0904.xlsのファイル】 A      B     C     D    E 装置番号  商品 売上合計 コメント 担当  a1    P8  13,523   ***   ●   B1    P8  38,523   +++   ■  a2   P10 23,523   Ccc   △ 他部署より送付された今月売上分(0905.xls)の 装置情報を0904ファイルを元にD・E項目をVLOOKで入力しています。 【0905.xlsのファイル】 A      B     C     D    E 装置番号  商品 売上合計 コメント 担当  B1    P8  78,523   a1    P8  63,523       a2   P10 53,523  ここでは3行しかありませんが実際は2000行位あります。 また、VLOOKする項目も実際は10箇所ほどあります。 毎回前月のファイルを元にひとつひとつ関数でデーターを入力しております。 簡単に表示する方法がありましたらマクロでなくても教えてください。 お願いいたします。

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

  • ベストアンサー
  • 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

  • Excelマクロ 表の書き換え方法教えてください

    2日くらいあれこれやってみたのですが、全くできないためお教えいただけますでしょうか。 1 2 3 4 5 6 7 A a b c d e f g B h i j k l m n C o p q r s t D u v w x y z (以下続く) 注)A1セルは空白、1、a、h、o、uは同じ列になります という表(Book1.xls)を下記(Book2.xls)へ変更するマクロを作りたいと思っています。 A 1 a A 2 b A 3 c A 4 d A 5 e A 6 f A 7 g B 1 a B 2 b (以下略) Book1の行数は任意、1~7は固定、abcde…は空白セルもあります。 いいマクロがありましたらぜひご教授ください。 よろしくお願い致します。

  • エクセル2000マクロ検索方法

    Aのファイル a.xls シート名 aaa Bのファイル b.xls シート名 bbb Aのファイルに下記のデータベースがあります。   A列 B列   0001 100   0002 200   0004 300 Bのファイルに下記のデータベースがあります。   A列 B列   0001 300   0002 200    抽出条件方法 AのファイルとBのファイルのA列を参照して違うものだけを、Aのファイルから 別のファイルに取り出す方法をマクロでの記述方法を教えてください。 別のファイルに取り出すデータは、下記の通リです。   A列 B列   0004 300 以上よろしくお願いします。

  • excel マクロ vlookupがわかりません(泣)

    初心者です。 ほんとに迷宮にはいっていまい、提示のコードもめちゃめちゃですが ご回答頂ける方はいらっしゃいますでしょうか・・・ マクロのコード記載のある "A.xle" ファイルの"報告書"シートのE2セルに 外部ファイル(一覧.xls)からVLOOKで値をひっぱってきて入力させたいです。 Vlookで入力させたい値が複数あるので、一気にできたらと思っているのです。 Private Sub CommandButton111_Click() Dim wb1 As Workbooks Dim 範囲 As Range Dim 列番号 As Range Dim 検索値 As Range Range("E2") = TextBox1.Value   Set wb1 = Workbooks.Open("\\192.168.~\~\一覧.xls") Set 範囲 = \\192.168.~\~\一覧.xls 状況!A3:P3000 ←ここに外部ファイルを設定したいのですが、どう記述すればよいかわかりません。 列番号 = 11 検索値 = (Worksheets("報告書").Range("E2")) Range("D3").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Unload Me End Sub どうぞ、ご教授宜しくお願い致します。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

  • Excelで複数行を1行にするマクロについて

    Excel2000で3行を繰り返し、1つの行にまとめていくマクロの書き方についてご教授ください。 例えば下記のような並びの時、 A B C D E F G H I ..... マクロを使って、 A B C D E F G H I ...... のようにしたいと考えています。

  • エクセルマクロ 次のようなプログラム教えてください

    エクセルのマクロで、次のようなことをしたいと思っていますが、 素人でわかりません。 教えていただけますか。 ---------------------------------- o動かしているファイルをa.xlsとします。  a.xlsは、3行目からA列に名前、B列~D列にデータが入っていて、  各行ごとのファイルを作りたい。(行数は決まっていない)  なお、セルE1にある文字が入っている。 o各ファイルは、原紙としてgensi.xlsとして保存されているファイルに、  a.xlsのB~D列のものを入力したものを作りたい。  (B~D列のデータは、gensi.xlsのそれぞれセルC7・C8・C9に入力する)   gensi.xlsは、a.xlsと同じフォルダにあります。 o作成場所は、「C:\date」の中に、セルE1にある文字のフォルダ、A列に  ある名前のフォルダに作りたい。 (セルE1の文字のフォルダは、マクロを初めて実施するときは無いと思います  が、2回目からは存在すると思います。A列の名前のフォルダはマクロ実施時  にはありません。作成するファイル名は、A列の名前と同じ(フォルダ名と同じ).xls にします。) o実行ボタンを3つ作って、1つは今選択されている行のフォルダ・ファイルを作る。  2つ目は数字を入力させて、今選択されている行から入力した数字の行までを一括  で作成する。  3つ目は、3行目から現在入力されている行すべてを一括で作成する。 ------------------------------- 上記のことをしたいと思っています。 よろしくお願いします。 駄文ですみません。 なお、エクセルは古いバージョンでエクセル2000です。

  • 【Excel2003】マクロの実行

    お世話になります。 フォルダー内全てのエクセルファイルに、あるマクロを実行したいのですが可能でしょうか? 例としましては フォルダー「変更ファイル」 以下中にあるファイル ------------------------ ファイル「A.xls」 ファイル「B.xls」 ファイル「C.xls」 ファイル「マクロ.xls」←ソートを行うマクロ入り ------------------------ 「変更ファイル」フォルダー内の「マクロ.xls」を実行してA,B,Cファイル(フォルダー内全てのファイル)内データーを各ファイル毎ソートしたい。 この作業はマクロ.xlsのマクロをカスタマイズしてすることは可能でしょうか? 可能ならやり方を教えてください。 お願いいたします。

  • エクセルのマクロで範囲を選択するマクロ

    教えてください。 下記の通り、例えばA列の2~5にデータが入っている場合に、B2~D5の範囲を選択するマクロを教えてください。 A列のデータが入っている行は可変です。   A B C D E 1  2 6 3 7 4 9 5 10 6 7

  • 別のブックのセルの値をコピーするマクロについて

    ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。