• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:難しい挿入マクロを教えて下さい)

挿入マクロの難問について

DOUGLAS_の回答

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

e)但し、『商品コード.xls 』だけは、「商品コード」のある列が他の『データ【*】.xls 』と異なりますので、この ブック だけは、同様の コード により、別途、単独に行なっておきます。 ==================== 【3】「D列を検索し、E列を挿入して、商品を記入」する操作 f)先ず、「E列を挿入」します。  この程度の操作は、[新しいマクロの記録] で コード を採取する習慣を付けましょう。 Columns("E:E").Insert Shift:=xlToRight g)次に「D列を検索し、商品を記入」する操作ですが、最も簡単なのは、 ・『商品コード.xls 』も開いておいて、 ・E列に、「=VLOOKUP(D2,[商品コード.xls]Sheet1!$B:$C,2,FALSE)」という式を入れる。 ということになろうかと存じます。 '--------------- Sub 第3段階()   Columns("E:E").Insert xlToRight   With Range(Range("E2"), Cells(Range("D" & Rows.Count).End(xlUp).Row, "E"))     .FormulaR1C1 = "=VLOOKUP(RC[-1],[商品コード.xls]Sheet1!C2:C3,2,FALSE)"     .Copy     Range("E2").Select     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _       :=False, Transpose:=False     Application.CutCopyMode = False     .Replace "#N/A", ""   End With End Sub '---------------  「第3段階」を実行すると、「E列を挿入」し E列 に上記の計算式を施してから、すべて値に変化し、その中で「#N/A」を表示している セル を、すべてクリアします。 ==================== 【4】『商品コード.xls 』を更新する作業 h)案外、これが難しい作業になるかも知れません。  とりあえず、「第3段階」を終えた時点で、E列 が空白の行の D列 の「商品コード」を『商品コード.xls 』の B列 の後ろに コピー する、という作業になろうかと存じますが、「E列 が空白の行」は、E列 を選択しておいて、[ジャンプ] メニュー - [空白セル] を選択する操作を [新しいマクロの記録] で記録します。  これまでにも何度か出てきましたが、[End プロパティ]・[Offset プロパティ]、また、[Resize プロパティ] などについては、ザクッとお勉強しておいてください。 http://www.google.co.jp/webhp?q=#sclient&q=Offset+Resize+End+%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB '--------------- Sub 第4段階()   With columns("E:E") 'Range(Range("E2"), Cells(Range("D" & Rows.Count).End(xlUp).Row, "E"))     .SpecialCells(xlCellTypeBlanks).Offset(, -1).Copy     Windows("商品コード.xls").Activate     Range("B" & Rows.Count).End(xlUp).Offset(1).Select     ActiveSheet.Paste     Application.CutCopyMode = False   End With End Sub '--------------- ==================== 【5】さて、冒頭の見出しに「??」と書きましたが、実は、この段階で「手作業」が必要になります。  と申しますのは、ここで、【6】 の操作に移りたいトコロですが、肝心なコトが抜けています。  【4】の段階では、 >基準となる『商品コード.xls 』に追加(更新) されただけであって、その「商品コード」に対応する「商品」名が記入されていないのではありませんか?  したがって、ここで、『商品コード.xls 』の C列 に、手作業で「商品」名を記入していきます。  その前に、各ブック から寄せ集められた「未登録の商品名」がダブっていることも考えられますので、先ず、『商品コード.xls 』の D列 を並べ替えましょうか。  ≪実は、『商品コード.xls 』の D列 には、[VLOOKUP 関数] で、別表から「商品名」を引っ張ってくるようにしてある≫ ということになれば、この段階も マクロ化 できます。 ==================== 【6】更新された『商品コード.xls 』で再度検索し直す操作 【7】最後のご質問  では、いよいよ「再検索」ですが、これは、「第3段階」の「E列を挿入」する操作を外せばよいだけかと存じます。  換言すれば、【2】~【4】までの操作は、1回行なえば、今後は必要のない操作かと存じます。  ですから、【2】~【4】までの操作を、1回行なっておけば、今後は、【3】から「E列を挿入」する操作を外した操作、及び【4】と【5】を1つにまとめておけば、そのまま使えるかと存じます。 ====================  以上、長々とご説明いたしましたが、一つずつ、よくご自身でお考えいただいて健闘されますことをお祈り申します。

p1_1q
質問者

お礼

DOUGLAS_さま、ご忠告も含め、このように丁寧なご説明を書いてくださって ありがとうございます。 わがままな注文に、親切に対応してくださり、感激しております。 【5】のご指摘も、ありがとうございます。おっしゃる通りです。 【3】の検索ですが、Find や xlWhole を使うとばかり思っていましたが、 VLOOKUP関数をマクロで表示させるという方法が、想像もしなかったことで 大変参考になりました。 難しいコードを難しく考えすぎず、今の自分にできる範囲でのコードを考えてみることを学びました。 教えていただいたコードと解説、保存して勉強します。 ありがとうございました。

関連するQ&A

  • excel2000マクロ抽出方法

    2つのファイルがあります。ブック名A.XLS シート名 WORK              ブック名b.XLS シート名 SORT              ブック名A.XLS シート名 WORKに下記のデータが入っています。 AD 1300G A227550 000PA505(C列2行目) 200112(F列)200201(G列)200202(H列)200203(I列)200204(J列)200205(K列)→1行目固定データ AD 1300G A227550 000PA533(C列3行目)   ブック名b.XLS シート名 SORTに下記のデータが入っています。 AD 1300G A227550 000PA505(A列2行目)200112(E列)200201(F列)200202(G列)200203(H列)200204(I列)200205(J列) →1行目E列~J列のデータは都度変わっている AD 1300G A227550 000PA533(A列3行目)    データ抽出条件  ブック名A.XLS シート名 WORKの F列~K列の1行目の列データとブック名b.XLS シート名 SORTの  E列~J列の1行目の列データが同じで、ブック名A.XLS シート名 WORKのC列の2行目以降のコードと  ブック名b.XLS シート名 SORTのA列の2行目以降のコードが同じだったら  ブック名b.XLS シート名 WORKの E列~J列の同じ行にデータを入れる。違うときは、  ブック名b.XLS シート名 WORKのデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • エクセルのマクロで悩んでます

    はじめて投稿いたします。 現在、エクセル2000でマクロを組んでいるのですが、何日も悩んでそこから動けないので質問させていただきます。 やりたいことは、 (1)検索フォームの入力テキストに記載した数値を読んで検索ボタンを押すと、 (2)データブック.xls内の完全に一致した数値のセルの行をアクティブにして (3)その行のA列からO列の値をコピーして (4)入力ブック.xlsの入力シートのB4:B18に数値だけ貼り付け したいと考えています。 検索フォームは入力ブック.xls内で作成しています。 今のところ、(3)でA列の値を読んで、(4)でB4セルに貼りつけということはできているのですが、複数になるとできていません。 根気よく、同じプログラムを書くのが良いのでしょうか? かなり面倒なので、もっと簡単にかける方法があれば教えてください。

  • 【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く

    【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ A B C 1 2 3 4 5 6 新データ D E F 3 1 2 3 1 2 6 4 5 6 4 5 かなり簡略化で書いていますがやりたいことを記述していきます。 (1)マクロの記述しているブックのシート1にボタンを作成する。 ボタンから別のブックの元データ(CSVファイル)を選択。 元データのブックのシート1をマクロブックのシート2にコピーします。 コピーデータを加工、修正していきます。 (2)次に列のデータを入れ替えます。 これは法則がないので一行目の行をみて判断します。 (ex.C行の列ならD行に挿入する) (3)列を入れ替えた後、 3 1 2 6 4 5 になっていますがこれを 3 1 2 3 1 2 6 4 5 6 4 5 というふうに一行を二行にしていきます。 (4)最後にorder byします。 1、3、2列目の順にorder byします。 以上がやりたいことになります。 特に(1)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。

  • エクセルのマクロでの検索

    「編集→「検索」でやるようなことをマクロでやりたいのです。 例えば列Aのデータを検索してそのデータがある行を表示させたいのですが ・同じブック内のシートの同じ列を検索する。 ・検索する文字列を含んでいる候補をマクロボタンを押すごとに表示させていく ということはできるでしょうか。

  • エクセル:複数ブックをマクロを使い同一条件で集約・抽出したい

    教えて下さい 複数のエクセルブックがあります(全て1フォルダーに集約してある) それぞれA列に日付、B列に金額が入っている 複数あるブックを指定する日付で次から次へと検索しその金額とファイル名を新しいブックに縦に全てコピー(抽出)したい ちなみに、必ず条件にあうデータがそれぞれのブックにあるとは限りません 無い場合もあります 無い場合は特に抽出する必要はありません ========================================================= 例:2007/12のデータを抽出したい ★抽出結果イメージ    A      B    C 1 2007/12   200   ああああ.xls 2 2007/12   300   いいいい.xls 3 2007/12   100   うううう.xls 4   ・      ・      ・ 5   ・      ・      ・ 6   ・      ・      ・ 7   ・      ・      ・ ========================================================= このような場合、マクロでできますか?マクロは初心者です 教えてください よろしくお願いします 複数あるブックとは数的に60とかあります ちなみに現状はファイルを一つ一つ開き、指定日付を検索し見つけだし その行をコピーペーストしています たくさんブックがあるので、これをしていると目がチカチカしてきてしまいます この作業がマクロでできると、すごく感激なのですが・・・ どなたか、お知恵・お力をおかしくださいませ

  • マクロ:別ブックのデータの値を転記

    ExcelでVlook関数を使ってデータを検索していたのですが、マスタの件数(15,000件)と数式が多くなってしまいブックの容量が大きくなってしまって動きづらくなってしまったので、マスタと検索のブックに分け、マクロを使おうと思ってます。 簡単にいうと、 【マスタブック】   A列  B列 1  1   あ 2  2   い 【検索ブック】   A列  B列 1  2   い 2 検索ブックA列1行目に、「2」を入力してマクロを実行すると「い」が表示されるようにしたいのです。   開いておくのは検索ブックはのみです。 Sub 転記() Dim マスタ As Workbook Dim 検索 As Workbook Dim 行, 数字 As Long Dim Bname As String Bname = ActiveWorkbook.Name Workbooks.Open Filename:="C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls" Workbooks("マスタ.xls").Activate Set マスタ = Workbooks("マスタxls") Set 検索 = ThisWorkbook Set ws1 = マスタ.Worksheets("Sheet1") Set ws2 = 検索.Worksheets("Sheet1") On Error Resume Next 行 = 1 Do Until ws2.Range("A" & 行).Value = "" 数字 = ws2.Range("A" & 行).Value 対象 = ws1.Range("A:A").Find(数字, lookat:=xlWhole).Row ws2.Range("B" & 行).Value = ws1.Range("B" & 対象).Value 行 = 行 + 1 Loop ActiveWorkbook.Close Workbooks(Bname).Activate End Sub 以上のマクロを知人に教わりながら作ってみたのですが、マスタを一度開かないと検索はできないのでしょうか? 重たいデータなのでできれば開かずに検索して値を転記したいので、そのようなコマンド等ご存知の方教えてください。 ちなみにマクロは「新しいマクロの記録」から作る程度の初心者です。よろしくお願いします。

  • エクセルのマクロ(行を挿入し連番を振る)

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? A列2行目から 書類a 書類b 書類c 書類d 書類e C列2行目から 5 3 2 4 3 と入っています。C列は各書類の枚数です。 ボタンを押すと書類aと書類bの間に4行空白行が挿入され、A列とC列は増やした4行にそれぞれ書類a、5がコピーされ、B列には2列目から6列目まで1.2.3.4.5と連番が振られる。 というマクロです。 B列C列で1/5 2/5 3/5 4/5 5/5 であるという表現がしたいのです。(/は入りません) 書類が1枚の場合はB列C列共に空白で1/1とは入りません。 C列に入る書類の枚数により行が挿入されその書類の枚数分の連番が振られるようなマクロが作りたいです。 毎日何百行も手作業で挿入しコピーし連番を振る作業をしています。 決まった行数を増やすとか上の行をコピーするマクロならわかるのですが、C列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • 行挿入マクロをご教示ください

    A列の5行目から1000行ほどK列までデータが入っています。 A列からK列をB列優先でソートを行うと、B列にところどころ同じ番号が2行あったり、3行あったり、また4行とバラバラで、出てきます。 この場合、同じ番号が2行以上あるセルの上に空白の行1行を挿入し、同じ番号行分を合計して整理したいと考えています。 2行以上ある行の上に空白行を1行挿入するようなマクロをご教示ください。 どなたか、よろしくお願いします。