• 締切済み

VBAの作成方法について

マクロ初心者です。 エクセルの値のコピペに時間がかかっているため、マクロを使って自動化させたいと思っています。 どなたかソースを教えていただけますでしょうか? <内容>  ・「実績データ」という名前のエクセルデータに値を貼付けさせたい。   シート構成は「140」「540」といった部門コード名のシートが複数あります。  ・値を持っている別エクセルデータは「実績データ140」と最後に部門コード3桁をつけた名前になります。  ・「実績データ140」のデータを「実績データ」のシート140にそのデータを貼付けしたい。  ・なお、「実績データ140」ファイルのシート名は140です。

みんなの回答

  • NuboChan
  • ベストアンサー率47% (744/1581)
回答No.1

その「エクセルデータ」がどこにあってどこに読み込むのかも記載されていないので とりあえずたたき台の参考コードです。 (なお、このコードは検証していません。) 完全に正しいとは保証できません。自己責任でご利用ください。 希望と異なる仕様ならもう少し情報を上げてください。 このコードは、エクセルファイル(A)のシート1のA列からB列までのデータを読み込み、 A列の値の先頭3桁と同じ名前のシートがあるエクセルファイル(B)にB列の値を書き込むものです。 エクセルファイル(B)に同じ名前のシートがない場合は、新しく作成します。 エクセルファイル(A)と(B)は同じフォルダに保存されているものとします。 Sub test() Dim wbA As Workbook 'エクセルファイル(A) Dim wbB As Workbook 'エクセルファイル(B) Dim wsA As Worksheet 'エクセルファイル(A)のシート1 Dim wsB As Worksheet 'エクセルファイル(B)の書き込み先シート Dim rngA As Range 'エクセルファイル(A)の読み込み範囲 Dim rngB As Range 'エクセルファイル(B)の書き込み範囲 Dim i As Long 'ループカウンタ Dim sheetName As String 'シート名 'エクセルファイル(A)と(B)を開く Set wbA = Workbooks.Open(ThisWorkbook.Path & "\エクセルファイル(A).xlsx") Set wbB = Workbooks.Open(ThisWorkbook.Path & "\エクセルファイル(B).xlsx") 'エクセルファイル(A)のシート1を取得 Set wsA = wbA.Worksheets(1) 'エクセルファイル(A)のA列からB列までの入力されている範囲を取得 Set rngA = wsA.Range("A1", wsA.Range("B1").End(xlDown)) 'エクセルファイル(A)の読み込み範囲の行数分ループ For i = 1 To rngA.Rows.Count 'A列の値の先頭3桁をシート名とする sheetName = Left(rngA.Cells(i, 1).Value, 3) 'エクセルファイル(B)にシート名と同じシートがあるかチェック On Error Resume Next 'エラーを無視する Set wsB = wbB.Worksheets(sheetName) 'シートを取得 On Error GoTo 0 'エラー処理を元に戻す 'シートがない場合は新しく作成する If wsB Is Nothing Then Set wsB = wbB.Worksheets.Add 'シートを追加 wsB.Name = sheetName 'シート名を変更 End If 'エクセルファイル(B)の書き込み先シートの最終行の次の行を取得 Set rngB = wsB.Range("A" & wsB.Rows.Count).End(xlUp).Offset(1, 0) 'エクセルファイル(B)の書き込み先シートにB列の値をコピーする rngB.Value = rngA.Cells(i, 2).Value 'シートオブジェクトを解放する Set wsB = Nothing Next i 'エクセルファイル(A)と(B)を保存して閉じる wbA.Close True wbB.Close True End Sub ``` 実際に動かす前には、模擬DATAを利用して正しく動作するか確認してください。

ibc-zaimu
質問者

お礼

ご連絡遅くなりました。 こちらで一度作成してみます。 ありがとうございました。

Powered by GRATICA

関連するQ&A

  • 複数のエクセルを一つに貼り付け

    複数のエクセルファイルを一つのエクセルファイルの中のシートに マクロを利用してデータを貼り付ける方法はありますでしょうか? 実績表というフォルダ内に、下記のエクセルファイルがあります。 ・貼付け元のエクセルファイル名:実績表+3桁数値 →10ファイル ・1つに集計したいエクセルファイル名:実績表  ※その中に、貼付け元のファイル名と同じシート名が10シートあります。 できれば、「値の貼付け」でなはく、数式も含めた状態のデータを貼付けしたい。 是非、マクロのコードを教えていただきたく、宜しくお願い致します。

  • 【Excel VBA】セルに入力されている値と同じ名前のシートにデータをコピーする

    Excel2003を使用しています。 Sheet1のC2セル以下に入力されている値と同じ名前のシートに、その行のデータをコピーする作業をマクロで処理したいのですが、セルに入力されている値と同じ名前のシートを取得する方法がわかりません。 どのようにコードを書いたらいいのでしょうか? ちなみに、Sheet1のC2セル以下に入力されている値(=シート名)は、文字列(4桁の数字)です。 よろしくお願いします。

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • 【エクセル】各シートのB4の値をシート名にしたい

    たびたびエクセルに関する質問で、失礼いたします。 各シートが30シートほどございます。 各シートの”B4”の値をそのシートのシート名にしたいです。 ですが、シート名が”元データ”と”ひな形”と名付けられているものに関しては ”B4”の値は適用せず、そのまま”元データ”と”ひな形”という名前にしておきたいです。 マクロ初心者のためインターネットで活用できそうなコードをいじってみましたが、 シート名が”元データ”と”ひな形”と名付けられているものに関しても、 ”B4”の値が適用されてしまいます。 お手数おかけいたしますが、ご教授いただけますでしょうか。

  • 【Excel VBA】シート見出しの色を変更する

    Excel2003を使用しています。 シート数が10数枚のBookが複数あり、これらのBookで、シートのデータが変更されたら、シート見出しに色を付けるマクロを作りたく、とりあえず、マクロの記録をとってみました。 マクロの記録で、シート見出しの色を変更するコードや複数のシートを選択するコードはわかりましたが、実際にしたいことは、シート名が4桁の数値のシートにだけ、このマクロが実行されるようにしたいのです。このようなことは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? よろしくお願いします。

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • VBA どのように記述すれば良いか教えてください。

    はじめて、質問させていただきます。 まだExcel VBAの勉強を始めたばかりの者です。 下記のようなツールを作ることになったのですが、非常に困っています。どなたかわかる方がみえましたら、どうか教えて下さい。(Excel2003を利用) <すべてAという同じフォルダ内> book1.xls book2.xls ・  ・ book*.xls →ファイル数は変動します。集計.xls以外のファイルはすべて同じシート名で構成されて         います。すべてのファイルのシート名 ”結果”が対象です。 集計.xls →このファイルにマクロを作りたいです。        シート名が1、2、3・・と116まで用意されています。 __________________________________________________________________________________________________________________________________ Aフォルダ内の複数ファイルの同じシート名(”結果”)というシートのみコピーをし、同じフォルダ内のファイル「集計.xls」のシートへ値貼り付けをしたいのですが、 一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け、2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け。。3番目にコピーしたシートは「集計.xls」の3という名のシートへ値貼り付け。。というのを、シート数分繰り返す。。という記述を教えて頂きたいのです。 ループ??ですが、【一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け】 次に【2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け】というのを一連の流れにしてループ処理したいのです。 こんなこと出来るのでしょうか??  初心者とはいえ丸投げは駄目だと、1週間ほどネットやいろいろなテキストで自分で何とかできないかと頑張ってみたのですが、部分部分しか記述できず時間だけが過ぎていき。。すっかり行き詰ってきてしまいました。 どうかお力を貸してください。宜しくお願い致しますm(uu)m

  • VBA 条件が一致した場合のみコピーする

    VBAについて、現在勉強中な為、色々調べておりますが、詳しい方がおりましたら教えてください。 在庫管理の表をエクセルでやっております。 注文が来て、品物の手配をする時に、在庫の有無を確認したいので下記のような事が出来れば 良いと思っております。 3つのシートを使っております。シート名は、”必要数””出荷数””在庫数” シート:”在庫数”では、入荷数の合計から、マクロを使ってコピーした”出荷数”の数を 差し引くことにより、発注手配が必要な物とそうでない物がわかりやすいように作りたいと思って おります。 今回は、注文来た数を出荷数のシートにVBAでコピーさせる方法の質問です。 シート名:”必要数” のセルC2:C:50 を、コピーして、隣のシート”出荷数”のA列の 一番上の空白に、形式を選択して貼り付け(値・行列を入れ替える) ただし、A列には、日付が入力されてる為、参照した空白の一つ上のセルがコピー元と同じ 日付なら、貼り付けをしないでエラー表示させたい。 自動マクロでは、コピー元を選択して、ここに貼り付けみたいな事はできたのですが 3行目に貼り付けした後は、4行目に貼り付けるという自動マクロがわかりません。 ネットで調べたコードを何個もコピペしてやってみたのですが、なかなかうまく行きません。 詳しい方がおりましたら、コードを教えて頂けると助かります。 どうぞ、宜しくお願い致します。

  • Excel VBAでQRコードを生成したい

    下記のようなExcelファイルがあります。 (Webシステムからのダウンロードで作られる.xlsmのファイル) このExcelを開くときに、各シートにB4セル(データ3)をもとにQRコードを生成したいです。    A  | B   1  タイトル(AB結合) QRコード(タイトルと同様のセル、タイトルの右側に配置) 2 項目名1 データ1 3 項目名2 データ2 4 項目名3 データ3 5 項目名4 データ4 ・シートはダウンロードするデータ数によるため変動 ・各シートに1つQRコードを生成 テンプレートを利用しダウンロードしているため、指定のセルにはもともと違う値が入っています・ ActiveXコントロールでは中身のデータが更新されない&シート2枚目以降にQRコードが生成されなかったためマクロで作成したいのですが、 インターネットで調べると1シート内の連続生成のみで シートごとの繰り返し方がわからなかったので投稿させていただきました。 ご教授よろしくお願い致します。

  • エクセルで以下のマクロ作成して使用しています

    エクセルで以下のマクロ作成して使用しています シート1の1行目のデータをシート2に貼り付け ↓ 印刷 ↓ シート2のデータをクリア ↓ シート1の2行目のデータをシート2に貼り付け ↓ 印刷 ・・・と指定行数まで繰り返し ここで質問です 通常印刷では上記マクロでなんの問題もなく使用しているのですが、プリンターをAdobe PDFに選択してPDFファイルを作成する際、[PDF ファイルに名前を付けて保存] ダイアログボックスが開いて、毎回 保存場所とファイル名を指定しなければなりません。 50行分のデータをPDF化する際は50回保存場所とファイル名を指定しなければなりません この作業を省略または自動化する設定・方法はないでしょうか? windowsXPにて AdobeAcrobat9pro エクセル2003  を使っています おわかりの方がいらっしゃいましたら是非ご教授ください よろしくお願いいたします。

専門家に質問してみよう