Excel VBA/VBScriptでセルコピーする方法とは?

このQ&Aのポイント
  • Excelの特定のセルを別のファイルにコピーする方法について詳しく教えてください。
  • セルの中身だけでなく、フォントやフォントの色、罫線の状況などもそのままコピーしたいです。
  • VBAやVBScriptを使用して、設定を保持したままセルをコピーする方法について教えてください。
回答を見る
  • ベストアンサー

Excel VBScript VBA セルコピー

当方、Windows7 Pro 64bit 、Excel2010の環境です。 出来れば、VBScript希望ですが、VBAでも結構ですので 教えてください。 あるエクセルのファイルの特定のセルを 別のエクセルのファイルにコピーするとき、 x.Cells(1, 1).Value = y.Cells(1, 1).Value などとするのは分かっているのですが、 コピーされる元のセルの中身だけでなく、 フォントやフォントの色、 罫線の状況など、 設定されているそのままをコピーしたいのです。 上記のような情報を「設定する」方法は 調べると分かるのですが、 そのまま持ってくる方法は 私が調べた中では、出てきませんでした。 もちろん、 x.Cells(1, 1) = y.Cells(1, 1) とやってみましたが、ダメでした。 何か、方法はあるでしょうか? 教えてください。

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

  • ベストアンサー
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

構造体、オブジェクト、 此れをネットで検索してください 実は、VBAでブック、シート、セル範囲、此れ等は 内部的には、 実データーが入っている訳ではなく 実データーが入っている メモリー領域が何処か 此れを指し示しているだけ なのです。 此れを「ポインター」と、言います まあ、 「だから」 と、いう訳ではありませんが 構造体、オブジェクト間の代入では VBAでは 代入する項の先頭に 「SET 」 と、書き記す 此れか、取り決められています。     SET x.Cells(1, 1) = y.Cells(1, 1) お試し頂けますでしょうか。

Prome_Lin
質問者

お礼

ありがとうございます。 お礼が遅れまして、申し訳ございませんでした。 しかも、内部構造的なお話まで、教えて頂き、 大変、参考になりました。

その他の回答 (1)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.1

記載している方法は値のみコピーの方法で書式は含みません。 VBAの一例です。 Destinationはpasteより処理速度が速いと言われています。 Sub test() Dim x, y As Range Set x = Workbooks("Book1").Worksheets("sheet1").Cells(1, 1) Set y = Workbooks("Book2").Worksheets("sheet1").Cells(2, 1) x.Copy Destination:=y End Sub コピー&ペーストは、マクロの記録を実施すれば自動でコードが記載されますよ。不要なコードまで記載されるのが玉に瑕ですが。

Prome_Lin
質問者

お礼

ありがとうございました! そうですよね、マクロの記録があったのですね。 普段、全く使わないので、完全に忘れていました。 また、具体的なご指示、いたみいります。 問題は、解決しました。 ありがとうございました。

関連するQ&A

  • エクセルVBAとVBScript

    WinXP/Pro  エクセル2002使用です。 VBScriptで下記のメール送信のプログラムを作り、 それをエクセルVBA→BATファイル→VBScript(→エクセルVBAに戻る)という流れで自動化させましたが、下記のコードでは、現在進行中のエクセルVBAとは別のブックを作るのでうまくいきません。 (エクセルブックを2重起動してしまいます) Set objExcel =GetObject( "d:\auto\aaa.xls") Dim stradrs Dim strkk Dim strjikan with objExcel stradrs = .Worksheets("Sheet1").Cells(5,1).Value strkk= .Worksheets("Sheet1").Cells(4,1).Value strjikan = .Worksheets("Sheet1").Cells(4,2).Value end with Set objEmail = CreateObject("CDO.Message") objEmail.From = "***@***.com" objEmail.To = stradrs objEmail.Subject = "表題" objEmail.Textbody = "内容" objEmail.AddAttachment("d:\auto\" & strkk & strjikan & ".doc") objEmail.Send Set objEmail = nothing Set objExcel = nothing 目的は、最初に立ち上げている(VBScriptを呼び出したVBAを実行中の)エクセルから値を取得したいのです。 下記いずれかの方法によると思っています。 (1)エクセルVBAから直接VBScriptに引数で値を渡すことは可能でしょうか? (2)VBScriptからエクセルブックを起動させずに値を取得することは可能でしょうか? 値はテキスト文字です。 何卒よろしくお願いします。

  • エクセルVBAで選択していないシートのセルコピー

    エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?

  • エクセルVBAでの質問

    お世話になります。 エクセルVBAのプログラムコードをコピーし、 エクセルの通常シートへ貼り付けした際、 「’」で始まる説明分または注釈をプロシージャ画面の 様に色づけしたいと思い下記の様なコードを書きました。 しかし、VBA実行後、元のコードが行によって、空白 から始まって行の途中に「’」がある場合など、 少し手前の文字から着色されたりしていました。 何故なのでしょうか。 どこがおかしいのでしょうか。 空白が半角か全角になっている為にこのような現象に なっているのでしょうか。 しかしその解決方法が分からなく、 どなたかご教授頂きたく宜しくお願い致します。   記 Sub サンプル() Dim x As Integer Dim y As Integer Dim z As Integer Dim myrng As String Dim zz As Integer For y = 1 To 10 For x = 1 To Cells(Rows.Count, y).End(xlUp).Row If InStr(Trim(Cells(x, y).Value), "'") = 1 Then Cells(x, y).Font.ColorIndex = 10 ElseIf InStr(Trim(Cells(x, y).Value), "'") = 0 Then Else z = InStr(Trim(Cells(x, y).Value), "'") myrng = Cells(x, y) zz = Len(myrng) Cells(x, y).Characters(z, zz).Font.ColorIndex = 10 End If Next x Next y End Sub

  • VBscriptで、Excelのセルに文字列を入力するには?

    VBScriptを使い、あるファイルから文字列を抜き出し、Excelのセルに入れるソフトを作りたいと考えています。 ほとんどうまくいっているのですが、どうしてもうまくいかない部分があります。それは、ファイルから抜き出したいくつかの文字列(例えば、”2-8-S1”)を.Cells(*,*).Valueを使って入れると、”1926/2/8”という日時データに変換されてしまう点です。 これを文字列のまま、入力するにはどうすればよいでしょうか? 基本的なことかもしれませんが、手元の参考書等をみても、うまく解決することが出来ず、困っています。 よろしくお願いいたします。

  • 【エクセルVBA】「インデックスが有効範囲にありません」というエラーがでます

    こんにちは。VBA初心者ですが、下記コードを実行すると エラーが出てしまいました。 シート(シート1)のセルから別シート(シート2)のセルに 値のみコピーするVBAを組んでいます。 適宜、シート1に入力したものを読みこませていきたいので 変数を使用しています。 ------------------------------------------------------------- Sub セルのコピー() Dim X As Integer X = 3 Y = 2 Do While Cells(X, "A").Value <> "" Sheets("シート1").Cells(X, "A").Copy Sheets("シート2").Activate Sheets("シート2").Cells(Y, "F").PasteSpecial _ Paste:=xlPasteValues ⇒エラー対象 Application.CutCopyMode = False X = X + 1 Y = Y + 1 Loop End Sub ------------------------------------------------------------ つまり、シート1のA3セルを先頭にA4,A5,A6・・・と続くセルの値 をシート2のF2を先頭としたセル(以下、F3,F4・・・)に値のみコピー していきたいのですが。。 実行すると「インデックスが有効範囲にありません」というエラーが でます。デバック対象は上記、「⇒エラー対象」の構文です。 変数の設定の仕方がおかしいのでしょうか。。 ご教示のほどよろしくお願いいたします。

  • エクセルVBAで。

    お世話になります。 VBA初心者です。 (初心者でもないのですが、しばらく遠ざかっていました。) エクセルVBAの記述内容をコピーし、 エクセルの通常のシートへ貼り付けした際、 記述上「’」で始まる文字は緑色が付いていますが、 通常のシートへ貼り付けした際、黒字になってしまいます。 そこで、下記の様なVBAを記述し、貼り付け後に、 「’」から始まる文字を緑色に着色しようと試みましたが (やはり)うまくいきませんでした。 エクセル関数なんかも織り交ぜたおかしな記述だと思いますが 何となくやりたい事が伝わって頂けるかと思うのですが、 どう修正したら出来ますでしょうか。 ご教授下さいます様、宜しくお願いいたします。   記 Sub 色() Dim y As Integer Dim x As Integer Dim a As Integer mysheet = ActiveSheet.Name For y = 1 To 10 x = Sheets(mysheet).Cells(Rows.Count, y).End(xlUp).Row a = 0 Do Until a > x a = a + 1 If Right(Cells(y, a), 1) = "'" Then Cells(y, a).Select Selection.Font.ColorIndex = 10 End If Loop Next End Sub

  • VBAにてエクセルのセルを結合するには?

    VBAにて、エクセルのセルを結合したいのですが? やっていることは、Access97よりVBAで、 Excel97へファイルを落とし込んでいるのですが 罫線を引いたり、列幅等をかえることはできたのですが セルを結合する方法がわかりません。 よろしくおねがいします。

  • VBA セルコピーのエラー

    こんにちは。 Excel VBAの初心者です。 セルコピーについて教えてください。 シート1のセル範囲e4~aj4を、シート2の同じ場所に、そのままコピーします。 Worksheets(1).Range("e4:aj4").Copy Destination:=Worksheets(2).Range("e4:aj4") 上記だと普通に通るのですが、コピー元の行に変数を使用したくて、その前に一度下のように書き換えました。 Worksheets(1).Range(Cells(4, 5), Cells(4, 36)).Copy Destination:=Worksheets(2).Range(Cells(4, 5), Cells(4, 36)) するとエラー1004(アプリケーション定義またはオブジェク定義のエラー1004(アプリケーション定義またはオブジェク定義のエラー)が出て、通らなくなります。 単純なことだと思うのですが、初心者ゆえ困っております。 どなたかご教示いただけますと幸いです。 よろしくお願いいたします。

  • EXCEL VBAについて

    EXCEL VBAについて教えてください やりたいことは以下の通りです。 ・全シートJ列1~100行目を検索しアルファベットが含まれるセルが存在すれば 上のセルをコピーする ここまで作ったのですが上手くいきません Sub VBAsample() Dim GYO As Long For GYO = 1 To 100 If Find([a-z], LookAt:=xlPart) Then Cells(GYO, 10).Value = Cells(GYO - 1, 10).Value End If Next GYO End Sub 添削をお願いします

  • EXCEL VBAについて教えてください

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。 Excelのバージョンは2003です。 よろしくお願い致します

専門家に質問してみよう