エクセルVBAでのブック間操作・保存について

このQ&Aのポイント
  • エクセルVBAを使用して、複数のブック間でセルの操作と保存を行いたいと思っています。
  • 具体的には、BOOK1とBOOK2のセルに入力された文字を取得し、BOOK2に保存するプログラムを作成したいです。
  • 現在、セルの操作はうまくできていますが、ファイル名の付け方と繰り返し処理について問題があります。
回答を見る
  • ベストアンサー

エクセルVBA ブック間の操作・保存について

エクセルVBAで次の内容でプログラムしたいと思っていますが、どうもうまくいきません。 1.BOOK1のsheet1のセルC10・セルE10に文字入力 2.1のセルE10に文字入力し確定後、BOOK2が自動的に開く 3.BOOK2・sheet1・セルC4にBOOK1・セルC10の文字を取得 4.BOOK2・sheet1・セルH4にBOOK1・セルE10の文字を取得 5.BOOK2に「(秘)セルC10の文字+(セルE10の文字)・xlsx」で名前を付けて保存 6.BOOK1のsheet1のセルC11・セルE11に文字入力 7.6のセルE11に文字入力し確定後、BOOK2が自動的に開く 8.BOOK2・sheet1・セルC4にBOOK1・セルC11の文字を取得 9.BOOK2・sheet1・セルH4にBOOK1・セルE11の文字を取得 10.BOOK2に「(秘)セルC11の文字+(セルE11の文字).xlsx」で名前を付けて保存  以降BOOK1 セルC12~C29、セルE12~E29まで上記を繰り返す  ※セルC、Eの文字入力は29行まで入力されないこともある という感じでBOOK1の決められたセルに入力された文字を BOOK2へ独立した形で振り分け、それぞれ名前をつけて保存していきたいです。 1~4までは何とかできたのですが、ファイル名をつけて保存と、以降の繰り返しが いろいろ参考にしたのですが、うまくいきません。 初歩的な内容で申し訳ありませんが、ご教授お願い致します。

  • na714
  • お礼率52% (43/82)

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

No1です。 「BOOK1のそれぞれセルE10~29に文字入力後、マクロが起動するように」 という事は、BOOK1にマクロを設定していいのですか? BOOK1のSheet1のタブを右クリックしてコードの表示でコードペインを 表示しそこへ Private Sub Worksheet_Change(ByVal Target As Range)   Dim bk2 As Workbook   Dim r   As Range   Dim e   As Range   Const bk2Path As String = "C:\temp\BOOK2.xlsx"      If Target.Count > 1 Then Exit Sub   Set r = Intersect(Me.Range("C10:C29,E10:E29"), Target)   If r Is Nothing Then     Exit Sub   Else     Set e = Target.EntireRow.Cells(1, 1)     If e(1, 3) <> "" And e(1, 5) <> "" Then       Application.EnableEvents = False       Application.DisplayAlerts = False       Set bk2 = Workbooks.Open(bk2Path)       bk2.Worksheets("Sheet1").Range("C4").Value = e(1, 3)       bk2.Worksheets("Sheet1").Range("H4").Value = e(1, 5)       bk2.SaveAs _         bk2.Path & "\(秘)" & e(1, 3) & _         "+(" & e(1, 5) & ").xlsx", xlWorkbookDefault       bk2.Close       Set bk2 = Nothing       Application.DisplayAlerts = True       Application.EnableEvents = True     End If   End If End Sub

na714
質問者

お礼

解決しました。 迅速な対応でたいへん助かりました。 長々としたコードを考えていたのでさっぱりしました。 また機会がありましたらご教授お願い致します。 ありがとうございました。

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんばんは C10~C29、E10~E29にはマクロ実行時に文字を入力するのですか? どこに保存するのですか? BOOK1、BOOK2は既存ですか? 取り敢えず都度作成して、入力する文字も設定し、"C:\temp\"に保存するとして、 Sub test()   Dim bk1 As Workbook   Dim bk2 As Workbook   Dim i   As Long   Dim c   As Variant   Dim e   As Variant      Const 保存先 As String = "C:\temp\"      Set bk1 = Workbooks.Add      With bk1.Worksheets("Sheet1")     For i = 10 To 29       c = Application.InputBox("C" & i & "に入力する文字")       e = Application.InputBox("E" & i & "に入力する文字")       If c <> False Then         .Range("C" & i).Value = c         .Range("E" & i).Value = e                  Set bk2 = Workbooks.Add         bk2.Worksheets("Sheet1").Range("C4").Value = c         bk2.Worksheets("Sheet1").Range("H4").Value = e         bk2.SaveAs 保存先 & "(秘)" & c & "+(" & c & ").xlsx", xlWorkbookNormal         bk2.Close         Set bk2 = Nothing       End If     Next   End With End Sub

na714
質問者

補足

早速のご回答ありがとうございます。 助かります。 説明不足ですみません。 BOOK1・2はそれぞれ既存のもので、BOOK1のそれぞれセルE10~29に 文字入力後、マクロが起動するようにしたいと思っています。 BOOK2は指定の項目が取得できたら自動で保存する形にしようと 思いますが、BOOK1は手動で保存します。 ご検討お願いいたします。

関連するQ&A

  • エクセル、ブック間でのデータ読込

    教えてください。 Excel2010を使っています。  動作:閉じているブックからデータを読み出し、開いているブックに貼付けることです。  詳細:閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215のデータを      開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35に貼付けをた      いのですが。      応用1.        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B40~C55・D40~D55        閉じているブック’2014_11月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B60~C75・D60~D75        ・        ・        ・        閉じているブック’2015_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2015集計.xlsx、、シート’集計’、セル’B20~C35・D20~D35        それぞれのブックは事前に作成します。’2014_9月.xlsx’、’2014_10月.xlsx’、’2014_11        月.xlsx’、’2015_9月.xlsx’、’2014集計.xlsx、’2015集計.xlsx      応用2.        現状        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        開いているブック’2014集計.xlsx、シート’集計’セルB19’年’、セルC19’月’を変更する        ことにより        変更        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        と言うことは可能でしょうか。 エクセルのマクロは初心者で苦労をしています、ご教授頂ければ幸いです。 よろしくお願いいたします。        

  • 他のブックファイルのセルの参照が上手く行きません

    こんにちはよろしくお願いいたします。 エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。 しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となっています。式は,キーボードを使って変更しました。もちろん,(Book3.xls)は,(Book2.xls)と同様のシート形式をもち,データも入力されています。 このような状態になると,先に挙げたように,”=”を入力して参照するブックファイル(Book3.xls)のセルをクリックしても,ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となったままで,(Book3.xls)のデータは表示されません。 (Book2.xls)と(Book3.xls)のセルのデータは,文字列です。 気になるのは,(Book1.xlsx)はoffice2010で作成されたファイルであること,(Book2.xls)と(Book3.xls)は,互換モードと表示されるファイルであること,また表示されているファイルを見ると,フルパスで参照している点です。「 ='C:\aaa\bbb\・・・・・[Book3]Sheet1'!$A$1 」という参照式になっています。3つのファイルはすべて同一ファイルに入っています。 何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

  • 【Excel-VBA】アクティブセルが参照しているブックを開くには?

    いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:A1に =[Book2.xls]Sheet1!$A$3 が入力されている) そこで、そのセルが参照しているブックをVBAで自動的に開く方法を考えています。 つまり、例で言えば、Book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。

  • Excel セル参照で参照ブック指定

    指定したセルに拡張子を抜いたブック名を入力し、そのセルを参照してブック参照することは可能でしょか? 「INDIRECT」では参照ブックを開かないと表示されないため目的が達成されません。 (例) Book1.xlsx A1=test Book2.xlsx A1=Book1 A2=["&(A1)&".xlsx]Sheet1'!A1 何か良い解決策をご存知の方、ご教授願います。

  • EXCELの複数シートをそれぞれ別ブックへ保存したい

    EXCEL97を使用しています。 1つのブック内に複数のシート(10~20枚)があります。 これを全て1シートずつの別のブックに分けて保存をするマクロを作成したいのですが、できますでしょうか? できれば各シート内の(A4)に入力されている文字列を各ブックの名前として使用したいのですが・・・。 (各シートのセルA4の値に重複はありません) 現在は各シートを新しいブックにコピーして名前を付けて保存、の作業をシート数分繰り返しています。 すみませんがよろしくお願いいたします。

  • エクセル

    Book1 A1セルにBook2 A1,B1,C1(同一シート)いずれかに文字あるいは数値が入力された場合 Book1 A1にリンクするようにしたいのですが =[Book2.xls]Sheet1!A1&[Book2.xls]Sheet1!B1&[Book2.xls]Sheet1!C1 とすると今後D,E・・・・と続くとすごく長い式になってしまいます。 これをもっと簡単な式に出来ないものでしょうか。(エクセル2003使用) ヨロシクお願いします。

  • Excel VBAに詳しい方教えてください。

    Excel VBAについて 下記内容をマクロを使ってできるようにしたいのですが、どなたかお力添えいただけませんか? 例えば、下記のような記載のファイルBook1があるとします。 A1セル内 名前 B1セル内 〇〇会社 C2セル内 〇〇部 D2セル内 〇〇係 この内容を別のファイルBook2へ転記したいのです。 ただし、Book2の列は下記のようになっており A列 名前(すでに入力されている) B列 会社名 C列 部 D列 課 E列 係 Book1の内容をBook2の下記の条件で正しいセルへ転記したいです。 -Book1で[部]で終わっているものはBook2のB列[部]に転記 -Book2ですでに入力されている名前の行に、Book1の情報を転記 ご協力のほど何卒よろしくお願いいたします。

  • エクセルVBAでブックを開くと処理が終わってしまう

    VBA初心者なのですが、VBAでエクセルブックを開くとVBAの処理が終わってしまいます。理由がわからないのでアドバイスをお願いします。なお、止まってしまう箇所にコメントを入れプログラムを下記しました。また、4000字以上質問できないためプログラムの途中までしか書かれていません。そのため、余分な宣言が多数ありますが無視してください。よろしくお願いいたします。 Option Base 1 Sub 健康診断の郵送() Dim kyoNum() As String Dim b_name As String Dim a_name() As Variant Dim b_address As String Dim a_address() As Variant Dim mailNum() As Variant Dim place() As String Dim banchi() As String Dim ken() As String Dim Adr As String Dim AdrLen As Integer Dim i, j, k, cnt, l, m As Integer Dim ChrCode As Integer Dim cell As Range Dim Book1 As String Dim wb As Workbook Dim Book1_Path As String Dim flag As Boolean 'セルのクリア ThisWorkbook.ActiveSheet.Cells.ClearComments 'セルのプロパティを設定をする With ThisWorkbook.ActiveSheet.Columns("A:B") .ShrinkToFit = True .NumberFormatLocal = "@" .ColumnWidth = 45 End With 'カレントディレクトリのチェンジ(Windows2000以降) CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path '簡易名称Book1にする Book1 = "Book1.xlsx" 'パスを取得する Book1_Path = ThisWorkbook.Path & "\" & Book1 If Dir(Book1_Path) = "" Then MsgBox "Book1.xlsxファイルが存在しません。", vbExclamation End If '同名ブックのチェック For Each wb In Workbooks If wb.Name = Book1 Then MsgBox "健康診断の郵送.xlsmはBook1を開こうとしています" _ & vbCrLf & "Book1を閉じて再実行してください", vbExclamation Exit Sub End If Next wb Application.ScreenUpdating = False '画面の更新を止める Workbooks.Open Book1_Path '*****←ここで処理が終わってしまう***** 'ブック名を指定して非表示 Application.Windows("Book1.xlsx").Visible = False '後方検索でBook1.xlsxの入力済みセルの行数と列数を取得 With Workbooks("Book1.xlsx").ActiveSheet.UsedRange Book1_MaxRow = .Find("*", , xlValues, , xlByRows, xlPrevious).Row - 2 'データ入力済み行数取得 End With Application.ScreenUpdating = True Workbooks("Book1.xlsx").Activate j = 1 ReDim kyoNum(Book1_MaxRow) ReDim a_name(Book1_MaxRow) ReDim a_address(Book1_MaxRow) ReDim mailNum(Book1_MaxRow) ReDim ken(Book1_MaxRow) ReDim place(Book1_MaxRow) ReDim banchi(Book1_MaxRow)

  • Excelの複数の行番号の指定したセルを他のシートの

    特定のセルに表示させる方法はありますか? これだけではわかりづらいと思いますので…。 例えば、Book1のシート1のセルB3からD3をシート2のセルC4F6K6に表示(同じセルではない)させ、このシートを他の新しいブック(Book2)として保存(これは印刷するので無理なら必ずしも保存出来なくても良い)し、Book1のシート1のセルB3からD3に入力したデータはそのまま(変更しない)で、次に次の行のB4からD4をBook1のシート2のセルC4F6K6に表示させ、またこのシートを他の新しいブック(Book3)として保存する、というような作業を繰り返したいのです。 要するにBook1のシート1の行の上から下へ順番にデータを入力していき、常にシート2の特定セルにシート1の最新データが表示されるようにしたい、ということです。 要領はわかっていただけたでしょうか? よろしくお願いします。

  • エクセル 他ブックからデーターの参照。

    一つのブックに名前が1、2、3~31と31枚シートがあって、月毎にブックを分けて管理している 物があるのですが、ほぼすべてのデーターが前日のデーターを必要としており、月が替わった 1日のデーターで前月のデーターを取得する際、 『 =[23-01.xlsx]31!XX 』 といった感じでデーターを拾ってきてます。その翌月は 『 =[23-02.xlsx]28!XX 』 という風になるのですが、23-01を23-02へ、31を28へと 置き換えるのに数も多く非常に時間がかかって困っています。 ※ XXは任意のセル。 上手く言葉で表現できないのでイメージですが (A1のセルに 23-01.xls を入力)(A2のセルに 31 を入力)で 『 =[A1]A2!XX 』と入力したら23-01.xlsの31というシートからXXデーターを 取得するといった風な感じの事を行う方法は無いのでしょうか? ○○関数でこうすればとかVBAでこうすればとかあれば知恵をお貸しいただけると 助かります。 よろしくお願いします。

専門家に質問してみよう