• ベストアンサー

VBA EXCELファイル選択⇒指定セルコピー

マクロでこんなことできませんか? 完全でなくても構いませんので、できる範囲で教えてください。 宜しくお願いします。 マクロを起動すると、ファイルを選択するウインドウが開きます。ここで、あるExcelファイル(仮にC:\MYDOCUMENT\EXCEL\AAAA.xls)を選択すると、このファイルのセルB2,B3,B4,B5が、マクロを実行しているファイルの同じセルにコピーされ、更にセルB1に、AAAA.xlsの.xlsを抜いた数値のAAAAが入力されます。 AAAA.xlsは一度オープンになってもかまいませんが、自動的に閉じればベターです。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 こんな感じでしょうか。 「ファイルのセルB2,B3,B4,B5」「マクロを実行しているファイルの同じセル」とありますが、複数のシートが存在する可能性があるので、これでは特定出来ません。 取あえず双方ともActiveSheetで処理してます。 Sub Test() Dim FName, i As Integer Dim wb As Workbook, pWs As Worksheet  Set pWs = ThisWorkbook.ActiveSheet  FName = Application.GetOpenFilename("Excel (*.xls), *.xls")  If FName = False Then Exit Sub  Workbooks.Open (FName)  Set wb = ActiveWorkbook  pWs.Range("B1") = Left(Dir(FName), Len(Dir(FName)) - 4)   For i = 2 To 5    pWs.Range("B" & i) = wb.ActiveSheet.Range("B" & i)   Next i  wb.Close End Sub

joe7jp
質問者

お礼

完璧にできました。感謝しています。 プログラムの内容はちんぷんかんぷんですが、一つ一つこれから勉強します。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

少し簡単になりました。 (1)私の場合、My Documentsの中にaa2.xlsのファイルがある。 (2)エクセルを立ち上げて出来るBook1の標準モジュール に下記を貼りつけ、実行します。 Sub test01() Application.FindFile x = ActiveWorkbook.Name y = Left(x, Len(x) - 4) Workbooks("Book1").Worksheets("sheet1").Range("B1") = y Workbooks("Book1").Worksheets("sheet1").Range("B2") = ActiveSheet.Range("b2") Workbooks("Book1").Worksheets("sheet1").Range("B3") = ActiveSheet.Range("b3") Workbooks("Book1").Worksheets("sheet1").Range("B4") = ActiveSheet.Range("b4") End Sub (3)ファイル名指定のダイログウインドウがでるから、そこでaa2のアイコンをクリックする。 (4)Book1のsheet1のB1セルにaa2、B2,B3,B4にaa2の Sheet1のB2,B3,B4の内容が書きこまれました。 (5)最後にActiveWorkbook.Closeを入れると, 自動的にaa2は閉じるもことが出来ます。

joe7jp
質問者

お礼

完璧にできました。素人にもわかりやすい記述にしていただきましたので、理解できました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • bugmaru
  • ベストアンサー率38% (76/195)
回答No.1

出来ます。 が、結構プログラミングの知識が要求されます。 このスペースで説明するのは大変なので、ヒントだけですが記載します。 難関はファイル選択ウィンドウの表示で、VBのコモンダイアログコントロールがインストールされていると簡単にウィンドウズ標準のファイル選択ダイアログを呼び出せますが、なければWin32APIをコールするか、ExcelのInputダイアログで代用します。 読み込んだExcelファイルはExcelオブジェクトとして扱う知識が必要です。セルの値はもちろん取得可能です。 "C:\MYDOCUMENT\EXCEL\AAAA.xls"から"AAAA"を抜き出す方法は、文字列検索系の関数Instr()やRevInstr()、と文字列抽出系のMid()やLeft()、Right()などを組み合わせればわりと簡単にできるでしょう。もちろん一文字ずつファイル名を解析するコードを書いてもOKですし、Replace()を使えばもっと簡単にできるでしょう。 がんばって下さい。

joe7jp
質問者

お礼

回答ありがとうございました。 一番早く回答いただき、いいヒントをいただき感謝しています。

すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのVBAでファイルの状態を調べるコマンド

    エクセルのVBAでファイルのコピーをしたいのですが、コピー元がOPEN状態だとコピーできません。 FileCopy "C:\A.XLS", "C:\B.XLS" そこで、上記のコマンドを実行する前に、コピー元がOPEN状態かどうかを判断させて、OPEN状態だと実行を5秒待つようなマクロを記述したいのですが、可能でしょうか?

  • エクセルVBA

    こんばんは! エクセルマクロ初心者です。 エクセルVBAについて教えてください! パス(?)を指定して、ファイルを開けてから実行する マクロを書きたいのですが、エラーになってしまいます。 Dim Filename as string (1)Workbooks.Open Filename:= "\D\MyDocument\●●.xls" (●●はファイル名) (2)Workbooks("●●").Activate (1)の部分は実行されて目的のファイルは開くのですが(2)でエラーになってしまいます。 どなたか教えてください! 以前までは、このマクロ実行できていたのですが、突然できなくなりました。 困ってます。

  • VBA マクロ付きExcelファイルを無効で開く

    タイトルの通り、マクロを含むExcelファイルを、マクロ無効でオープンしたいのですが、そういうことは出来るでしょうか? 新規ファイル作成.xlsというマクロがあって、temp.xlsというマクロを含んだファイルをnew.xlsというファイル名でコピーし、それをオープンしてデータを追加して終了。 次にそのnew.xlsをオープンした時にはtemp.xlsに含まれるマクロが実行される・・・ というようなことをしたいと思っています。 もしくは新規ファイル作成.xlsのマクロから、直接new.xlsのファイルにコーディングが可能であれば、それでも良いのですが・・・ データベースから表を作成し、作成後の変更データを再度データベースへ戻す、ということがやりたいのですが、上記の方法しか思いつきません。 もし上記の方法が出来ない場合は、別の方法がありますでしょうか? どなたかアドバイス、よろしくお願いします。

  • VBAで、excelファイルのマクロを実行したら、特定のフォルダのファ

    VBAで、excelファイルのマクロを実行したら、特定のフォルダのファイルの特定セルを確認し、その結果を反映する、というマクロを組みたいと思っています。 具体的には下記のマクロを組みたいと思っています。 ------------------------------------------------------ (1)マクロを組むファイル【worksheet】にてマクロを実行する (2)特定のフォルダのファイルのA1、A2、A3、A4の全てに”OK”という文字が入っているかを確認 ・C:\excel\1番\kakunin_1.xls にあるkakunin.xlsの、A1セルに”OK”という文字が入っていたら次はA2、A3、A4の順序で 確認する。 ・このとき、A1にOKと入っていて、A2には入っていなかった場合は、A2という文字を、【worksheet】のB1セルに結果を表示する ようにする。 ・特定のフォルダの構成は下記 C:\excel\1番\kakunin_1.xls |--\2番\kakunin_2.xls |--\3番\kakunin_3.xls ・上記の処理を、1番フォルダの【kakunin_1.xls】で実行し、【worksheet】のB1セルに結果を表示。 2番フォルダの【kakunin_2.xls】で実行し、【worksheet】のB2セルに結果を表示。 3番フォルダの【kakunin_3.xls】で実行し、【worksheet】のB3セルに結果を表示。 ------------------------------------------------------ VBAどころかプログラミング自体が初めてなので、例えば引数が何かも一々考えて1文ずつ読み込まなければいけない状態です。。 どなたかこの無知な自分に力を貸して頂けないでしょうか?

  • excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか?

    excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか? 1.最初の処理 (1)A.xlsのファイルを開く (2)マクロ:2010.xlsのファイルを開く (3)マクロ:チェックのシートをA.xlsの明細のシートの前に追加 (4)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (5)マクロ:2010.xlsのファイルをディスクトップ上から削除 2.後から追加する処理 (6)B.xlsのファイルを開く (B.xlsは、A.xlsとは異なるフォルダを作成し、A.xlsの特定のセルの中身の名称でファイル名保存されます。名前が異なるだけでマクロの中身はA.xlsと同じ) (7)マクロ:2010.xlsのファイルを開く (8)マクロ:チェックのシートをB.xlsの明細のシートの前に追加 (9)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (10)マクロ:2010.xlsのファイルをディスクトップ上から削除 上記を対応する為に下記の様なマクロ((6)(7)の部分を抜粋)を設定しています。 '2010.xlsのファイルを開く(2010.xlsのファイルは適宜、ディスクトップにコピーされます) Workbooks.Open FileName:="C:\Documents and Settings\ID\デスクトップ\2010.xls" 'チェックのシートを現在のブックの明細の前にコピーする。 Windows("2010.xls").Activate Sheets("チェック").Copy before:=Workbooks(1).Sheets("明細") 単独でA.xlsやB.xlsのファイルが開かれている場合には、 上記の対応で問題ないのですが、A.xls、B.xls以外のexcelファイルが開かれていると、 実行時エラーが出てしまいます。 Workbooks(1)の部分で最初に開いたexcelのファイル名称を指定しているのが 影響しているのはわかるのですが、ここの処理をなんとかしたいというおもいです。 つまり、複数のexcelファイルが開かれていて、A.xlsやB.xlsのファイルを後から開いても エラーがでない様にするには、どの様な処理にしたらよいのか教えて頂きたく。 マクロを実行したexcelのファイル名を覚えておいて、その名前が(1)に置き換わる 様な処理が望まれる処理です。

  • エクセルVBA

    選択しているセルが1セルの場合は、その行を1行ごと、 例えばB10にセルがあれば、10行めを行コピーして11行めに、行挿入、 選択しているセル範囲が3セルの場合は、そのセルのある3行をコピーして 例えばB10:B13を範囲選択していたら、10~13行めを行コピーして、 14行めに3行まとめて挿入するようなマクロ作るには、 どのように記述したらいいでしょうか? コピー元には、計算式を含むセルがあります。 貼り付け先には、その計算式もコピペされているとベストなんですが・・・

  • ExcelのVBAで、他のExcelファイルのセルのデータを取得

    ExcelのVBAで、他のExcelファイルのセルのデータをファイルを実際に開かずに取得する方法はありますか? Workboks.openを使わずに、具体的にどうすればいいのでしょう? (例)  AAA.xls のセル"C5"に BBB.xls のセル"B3"のデータを入力したい場合。 (AAA.xlsにマクロを起動するボタンがある) ただし、BBB.xlsの最初の3行は空白です。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • Excel VBAでのセルの範囲指定

    Excel2000 Win2000です。 あるbook「A.xls」にある表「a」を「B.xls」にコピペ&行列反転するマクロを作っています。 A.xlsの表「a」のサイズが作成の都度変わるため、 B.xlsからサイズの取得をする為、 Workbooks.Open Filename:="A.XLS" I1 = 1 ' 行数の取得 DO WHILE CELLS(I1,1).VALUE <> ""  I1 = I1 + 1 LOOP I2 = 1 '列数の取得 DO WHILE CELLS(1,I2).VALUE <> ""  I2 = I2 + 1 LOOP として、行と列の数を取得しています。 で、ここまで来てセルの範囲をどうやって指定していいのか分からなくなりました。 例えば、I2の値をExcelの列のアルファベット表記に変える等、 なにかいい方法はありませんか??

このQ&Aのポイント
  • 銀行口座番号や支店名、銀行名、氏名の情報から住所が漏れることはありますか?
  • 楽天銀行で口座を持っている場合、口座情報から住所が特定される可能性はあるのか疑問に思います。
  • 銀行の情報から住所が知られないか心配しています。
回答を見る

専門家に質問してみよう