• 締切済み

別のブックへ貯蓄転記する方法を教えてください。

請求書をエクセルで作ることになりました。 請求書自体はできたのですが、 請求書内容を別のブックに貯蓄保存がどうしてもできません。 ブック「A」のM1~R1のみが転記対象。VLOOKUPを使ってデータをひいています。 ブック「B」のA3~F3に貯蓄&転記したいと考えています。 色々なサイトを見て、下記のコードを作ったのですが、貯蓄できません・・・ (上書保存のような状態になります) 初心者のため、何が間違っているのかわかりません。 ご教授いただければと思います。 よろしくお願いいたします。 Sub SAVE() Const Dest = "C:\Users\P\Desktop\Y\B.xlsx" Dim fromR As Long Dim fromRMax As Long Dim toR As Long Dim toRMax As Long '?????? toRMax = Workbooks("B.xlsx").Worksheets("Sheet1").Range("A65536").End(xlUp).Row fromRMax = Workbooks("A.xlsm").Worksheets("Sample").Range("A65536").End(xlUp).Row '?? For fromR = 2 To fromRMax 'Date Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 1).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 13).Value 'No. Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 2).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 14).Value 'Sub Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 3).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 15).Value '13% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 4).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 16).Value '5% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 5).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 17).Value 'Total Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 6).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 18).Value Next fromR End Sub

noname#257396
noname#257396

みんなの回答

  • wret615
  • ベストアンサー率34% (133/386)
回答No.1

転記元の行が2行目からfromRMax行目までで、転記先の行がtoRMax+fromR-1の計算結果で、列が固定いうことね? ほいだら、手作業か何かで転記先のデータを移動させない限り、そら毎度そこに上書きされてまうで。 溜めるものは、どこに保存しときたいん?

noname#257396
質問者

補足

やっぱり上書きされてしまうコードだったんですね・・・ 初心者なので、ネットで調べた物のシート名等を自分で変更しただけだったので、何が何やらわからなくて・・・ 溜める物はシート名「B」に追加していきたいです。 転記したい内容はシート名「A」のM1~R1です。 どのようなコードにすると追加できるようになるか、教えていただけるととても助かります。

関連するQ&A

  • エクセルVBAで他のbookのセルcellsで参照

    エクセルVBAで他のbookのセルの値(一定の範囲)を参照したいのですが、変数を使いたいため、cellsを使用したいのですがうまくいきません。方法はないでしょうか。 下記に例を示します。 rangeを使用すればすべてok((2)(5))(この場合はset文を使用しなくてもok(5))。同じbookならcells使用ok(4)。 他のbookをcells文使用する方法はないでしょうか(もちろんできれば、Thisbookの方もcellsを使用したい)。 よろしくお願いします。 sub test() Dim ThisBook As Workbook Dim Workbook2 As Workbook 'マクロを実行しているワークブック Set ThisBook = ThisWorkbook '他のワークブック Set Workbook2 = Workbooks("test11.xlsx") ' 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value  '(1)だめ 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range("a1:b2").Value '(2) OK 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test11.xlsx").Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value '(3) だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test1.xlsm").Worksheets(1).Range(Cells(3, 3), Cells(4, 4)).Value  '(4)だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:ii8000").Value = Workbooks("test11.xlsx").Worksheets(1).Range("a1:ii8000").Value  '(5) ok End Sub

  • 別bookのセルを参照するにはどうしたらよいでしょうか

    Next Forを使用したマクロで、そのNext For構文内で、別ブックのセルを参照したいのですが、どうしたらよいでしょうか。 下記のように作成してみたのですが、テストしてみると、同ブック同シートの該当セルを参照しているようで、機能しません。下記の書き方では間違っているのでしょうね・・・。 マクロ初心者で、とても初歩的な質問で申し訳ないのですが、教えていただきたく質問させていただきました。よろしくお願いします。 必要なブックは開いている状態です。 Cells(i,_)はbook1・シート"AAA"のi行・_列目を参照し、 Cells(n,_)はbook2・シート"BBB"のn行・_列目を参照し、 Cells(s,_)はbook2・シート"BBB"のセルを参照してほしいのですが・・・。 (1) book1・シート"AAA"のi行18列目のセルとbook2・シート"BBB"のn行・1列目の値が同じであれば (2) (book2・シート"BBB"のn行・1列目)の1行下をs行目としてs行・4列目のセルとbook1・シート"AAA"のi行28列目のセルが同値であれば (3) s行4列目からs行9列目を”ClearContents”するという内容です。下記のマクロは全て記述しておりませんが、ここが間違っているのは確実だと思います。今後の勉強にも是非生かしていきたいと思っておりますので、どうぞよろしくお願いいたします。 Sub test01() Dim n As Long Dim i As Long Dim s As Long For i = 6 To Workbooks("book1.xlsx").Worksheets("AAA").Cells(Rows.Count, 16).End(xlUp).Row If Cells(i, 16) = "" Then Exit For Else For n = 4 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 16) <> "" And Cells(i, 18).Value = Cells(n, 1).Value Then For s = n + 1 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 4).End(xlUp).Row If Cells(s, 1) <> "" Then Exit For ElseIf ..............

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

    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 以上のマクロを知人に教わりながら作ってみたのですが、マスタを一度開かないと検索はできないのでしょうか? 重たいデータなのでできれば開かずに検索して値を転記したいので、そのようなコマンド等ご存知の方教えてください。 ちなみにマクロは「新しいマクロの記録」から作る程度の初心者です。よろしくお願いします。

  • VBAで複数シートを新たに作成したBookにコピー

    いつも大変お世話になります。動作環境は、WindowXPSP3、EXCEL2010です。10個の名前付きsheetがあります。Book.xlsmから新たにBook1.xlsxを作成してこのBook1.xlsxに1個のsheet名が「sheet1」を作成します。そして、Book.xlsmにある10個の名前付きsheetをBook1.xlsxに作成した一個のsheet1にコピーします。コピーの仕方は、Book.xlsmの一番左端のsheetから順番にBook1.xlsxに作成した1個のsheet1に下から上に向かってコピーしていきます。最終的には、10個の名前付きsheetが纏められます。後一つの条件は、一番最初にコピーするシートには4行目に項目書かれております。なので、一番最初にコピー4行目だけはコピーして、後は、5行目からコピーしたく、下記のマクロを作成しました。 Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== Dim Book1 As Workbook For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 'MsgBox "mySheetName(i) = " & mySheetName(i) & "" 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Workbooks.Add Application.SheetsInNewWorkbook = 1 Sheets("sheet1").Select Book1 = ActiveWorkbook.Name Workbooks("Bookxlsm").Worksheets("mySheetName(i)").Range("B4:AF58").Copy _   Workbooks("Book1.xls").Worksheets("sheet1").Range("B4") ⇐ここで、実行時エラーが出ます。 Next i Label1: End Sub しかし、実行時エラーで止まってしまいます。もう、1週間格闘しております。どなたか、何卒ご教授して頂きたく、宜しくお願い申し上げます。

  • Excelマクロで別のブックをVLOOKした際のエラー処理

    Excelマクロで別のブックをVLOOKした際のエラー処理 【やりたいこと】 VLOOKで検索値から別のブックの値を拾い、検索値が見当たらない場合は "該当なし"を入力して、次の検索値に移り作業を再開させたい 【 困っていること 】 1:検索値が無くても適当な値を拾ってしまう(VLOOK関数でTRUEを指定したみたいに) 2:処理終了後に「Base.Close」を指定してるが、閉じないで残ったままになる どこを見直せば良いのか、全く検討が付かず困っています。 どなたかご教授お願いします。 【その他の質問】 教えてgooにはソフトウェアのカテゴリに"MS Office"と"Office系ソフト"がありますが、 今回の質問内容だと、どちらのカテゴリが相応しいのでしょうか? ---------------------------------------------------------------------------------- Sub 検索して値を取得する() Dim Base As Workbook Dim 出力 As Worksheet Dim 範囲 As Range Dim 検索値, i As Long Dim 検索結果 As String Set Base = Workbooks.Open"C:\~\Book1.xlsm", ReadOnly:=True, UpdateLinks:=0) Do Set 範囲 = Base.Worksheets("全体").Range("A2:D20") Set 出力 = Workbooks("検索結果.xlsm").Worksheets("Sheet1") Set 検索値 = Workbooks("検索結果.xlsm").Worksheets("Sheet1").Cells(i + 2, 1) If 検索値.Value = "" Then Exit Do On Error GoTo ErrorHandler 検索結果 = Application.WorksheetFunction.VLookup(検索値, 範囲, 2, False) 出力.Cells(i + 2, 2).Value = 検索結果 i = i + 1 Loop Exit Sub ErrorHandler: 出力.Cells(i + 2, 2).Value = "該当なし" Resume Next Base.Close savechanges:=False End Sub ----------------------------------------------------------------------------------

  • Excelのユーザーフォームで別のファイルに転記

    Excel2007です。 マクロを含んだデータファイルがあるのですが、マクロブックとデータブックは分割した方がよいと言われて今分割の方法を試しています。 「マクロブック.xlsm」にマクロを記述し、「商品在庫Data.xlsm」にデータが格納されています。 (まだ試験中で完全に分割できていないのでデータブックもxlsm形式ですが) マクロブックのユーザーフォームから「商品在庫Data.xlsm」ファイルの「商品マスタ」というシートに転記したいのですが、どうやっても「商品在庫Data.xlsm」で「商品マスタ」シートを指定して転記できません。 ユーザーフォームのコードは下記のような内容です。 「HinTouroku」コマンドボタンを押した時に商品マスタシートに内容が転記されるようになっています。 Option Explicit Private Sub HinTouroku_Click() '商品登録 Dim lRow As Long Dim s1 As String, s2 As String Dim Ctrl As Control With Workbooks("商品在庫Data.xlsm") Worksheets ("商品マスタ") lRow = .Range("A" & Rows.Count).End(xlUp).Row s1 = .Cells(lRow, "A").Value s2 = txtHinId.Text If s1 = s2 Then MsgBox "商品IDが重複しています" Exit Sub End If lRow = lRow + 1 .Cells(lRow, "a").Value = txtHinId.Text .Cells(lRow, "b").Value = txtSyohinmei.Text .Cells(lRow, "c").Value = txtHinRyaku.Text End With For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" End If Next End Sub Private Sub TourokuClr_Click() '入力フォームのクリア Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then _ myCtrl.Value = vbNullString Next End Sub Private Sub TourokuCls_Click() 'フォームを閉じる Unload Me End Sub http://vbaexcel.seesaa.net/category/7604114-2.html このサイトを参考にしながら書いてみたのですがどうしてもシートの指定ができず… どのように記述すればよいのでしょうか?

  • Findステートメントで別なブックの検索

    Findステートメントで検索した内容のある行のA列にある値をキーワードとして別なブックのA列に検索をかけてヒットしたセルの内容を元のブックの指定したセルに移すという動作をさせたいので次ののように書いてみました。 Private Sub CommandButton2_Click() Dim Yline As Long Dim No As Variant Dim c As Range Dim sh As Worksheet Dim sh_no As Integer Dim findcell As Range Dim add As String Set sh = Worksheets("ブックAの1") No = TextBox1.Text sh_no = 1 'テキストボックスに値が入っていた場合 If No <> "" Then 'Find メソッドの最低のプロパティは入れる。SearchOrder は特にいらない Set c = sh.Range("B:B").Find( _ What:=No, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '見つかった場合にのみ、値を入れる If Not c Is Nothing Then Yline = c.Row '見つかった行のA列の文字列でブックBに検索をかける add = sh.Cells(Yline, 1).Value Workbooks("B").Activate Set findcell = Workbooks("B").Worksheet(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '前Setステートメントからのループ検索開始 If findcell Is Nothing Then Do sh_no = sh_no + 1 If sh_no > ThisWorkbook.Worksheets.Count Then Exit Sub End If Set findcell = Workbooks("B").Worksheets.(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) Loop While findcell Is Nothing End If End If Workbooks("A").Activate With Worksheets("Aの2")   .Cells(21, 4).Value = sh.Cells(Yline, 14).Value .Cells(20, 4).Value = sh.Cells(Yline, 15).Value .Cells(36, 4).Value = findcell End With Unload Me Else MsgBox No & " は見つかりません。", 48 End If Set sh = Nothing End Sub するとwhat:=addとしてaddが見つかるまでシート番号を増やしていくループのところでエラーがでてキーワードが見つからないと出ます。恐らくブックBを検索してくれているとは思うのです。A列に空白があるためかと思い埋めてみましたが関係ないようです。 構文エラー的なものは無いと思いますが、宜しくお願いします。

  • VBA転記について教えて下さい

    200件位のデータがあるとします。顧客情報AB・商品C~AY 氏名 性  青森りんご 長野りんご みかん バナナ 送料 AA  男   1             2      100 BB  女          1            100 CC  男                   3     0 このデータを別シートAにはりんごと送料 別シートBにはそれ以外のデータに分けたいのです。 シートA 氏名 性  青森りんご 長野りんご  送料 AA  男   1           100 BB  女        1    100 CC  男 シートB 氏名 性  みかん バナナ AA  男    2 BB  女 CC  男       3 こんな感じです。 色々参考にして作成しましたがうまくいきませんでしたので 教えて欲しいです。 よろしくお願いします。 エクセルは2002です。 1、項目名の転記でデータは200位ですが変動があるので最終行で作成したら うまくいきませんでした。 2、データ域の転記が動きません。 Sub サンプル() Dim i As Long Dim lastRow As Long Dim lastcolumns As Long Dim S1 As Worksheet, S2 As Worksheet, S3 As Worksheet Dim myColumns As Long Dim myKey As String Set S1 = Worksheets("データ") Set S2 = Worksheets("りんご") Set S3 = Worksheets("その他") ' Sheet1の最終行を取得 lastRow = S1.Range("A" & Rows.Count).End(xlUp).Row ' Sheet1の最終列を取得 lastcolumns = S1.Cells(1, Columns.Count).End(xlToLeft).Column ' 項目名の転記 S2.Range("A1:B200").Value = _ S1.Range("A1:B200").Value S3.Range("A1:B200").Value = _ S1.Range("A1:B200").Value 'データ域の転記 For i = 2 To lastcolumns myKey = S1.Cells(1 & i).Value If myKey <> "" Then myColumns = Worksheets(myKey).Cells(1, Columns.Count).End(xlUp).Columns + 1 S1.Range(S1.Cells(1, i), S1.Cells(lastRow, i)).Copy _ Worksheets(myKey).Range(Cells(1, myColumns), Cells(lastRow, myColumns)) End If Next i End Sub

  • エクセルVBA 違うbookのフォームにデータを

    ひとつのエクセルに BOOK1,2 を 起こして BOOK1 から BOOK2 の 自作フォームの テキストに 値は 送り込めないのでしょうか? シートのセルと ボタンは 可能なのですが・・・ Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("A1:a4").Copy Workbooks("test.xlsm").Worksheets("Sheet2").Range("A1:a4").PasteSpecial Workbooks("test.xlsm").Worksheets("Sheet2").opb2.Value = True フォームには何か書き方が有るのでしょうか

  • エクセルVBAで別ブックの条件検索

    VBA初心者です。エクセルは2007です。 『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。 検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。 データのあるブックは同じ形式でシートには表があります。 数 a b c d 1 A B C D 2 ○ × △ ■ 3 Z Y X W     ・     ・ 検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、 出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。 本やインターネットで調べましたがわかりませんでした。 解決方法を教えていただきたいです。お願いします。 Sub 検索() Dim a, b, c, d As Range Dim 番号, ブック, シート As Integer With Workbooks("検索.xlsm").Sheets("検索条件") 数 = .Range("N22").Value ブック = .Range("L22").Value シート = .Range("P22").Value End With Dim wb As Workbook Dim sh As Worksheet Dim set範囲 As Variant With Workbooks("検索条件.xlsm").Sheets("出力先") Set a = .Range("D1") Set b = .Range("J6") Set c = .Range("L23") Set d = .Range("J69") End With Select Case ブック Case 1 Set wb = Workbooks("Book1.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 2 Set wb = Workbooks("Book2.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 3 Set wb = Workbooks("Book3.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case Else MsgBox "nothing", vbExclamation, "nothing" End Select ※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438 a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False) b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False) c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False) d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False) End Sub

専門家に質問してみよう