[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAで別表へコピー』(ばんばん)
いつもお世話になっております。 VBAでのA表からB表へのコピー(値の代入)について質問させてください。 注文書を受理した時点でA表へ必要事項を入力します。 A表のキー項目(C〜F)のデータがある範囲をコピーしてB表C表・・・へ 貼り付けるマクロを作成中です。 下記のようにコードを書いてみましたが、 どうしても.PasteSpecial Paste:=xlValuesの使い方がわかりません。 他のサイトで調べてみたりもしたのですが、私には難しくてわかりません。 できれば、今度の為にもどこを直すのかではなく、 どう使えばいいのかをわかり易く教えていただけませんでしょうか? どうか、よろしくお願い致します。
Sub test() Dim filename As String Dim PATH As String PATH = "\\aaa\sss\管理\管理表\" strfilename = PATH & "A表" & ".xls" If Dir(strfilename) <> "" Then Set WB = Workbooks.Open(strfilename) With Worksheets("A管理表") With .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy _ .Worksheet("B表").Range("B4:E" & .Range("E65536").End(xlUp).Row) .PasteSpecial Paste:=xlValues End With End With End If End Sub
これだとどうなりますか。 Sub test() Dim filename As String Dim PATH As String PATH = "\\aaa\sss\管理\管理表\" strfilename = PATH & "A表" & ".xls" If Dir(strfilename) <> "" Then Workbooks.Open (strfilename) With Worksheets("A管理表") .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy With Worksheets("B表") .Range("B4:E" & .Range("E65536").End(xlUp).Row) _ .PasteSpecial Paste:=xlValues End With End With End If End Sub
(川野鮎太郎)
>.PasteSpecial Paste:=xlValues は形式を選択して貼り付けの「値」を選択して実施した状態です。 式を参照するのではなく、値だけを使いたいときに使用します。 (ROUGE)
私の書いたものでご希望の通りになるとすれば、ばんばんさんのコードは以下の所がまずいようです。 With .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy ~~~~Withでくくるものはヘルプを見ると、以下のように書いてあります。 『オブジェクトやユーザー定義型に対して、一連のステートメントを実行するフロー制御ステートメントです。』
.Worksheet("B表").Range("B4:E" & .Range("E65536").End ~ここと ~ここにピリオドがあると、 Worksheets("A管理表").Worksheet("B表").Range("B4:E" & Worksheets("A管理表").Range("E65536").End に、なってしまいます。
(川野鮎太郎)
鮎太郎さん、ROUGEさん、早速のご回答ありがとうございました。 昨日は17:00退社をしてしまった為、ご教授頂いたのに 投げ逃げ(そんな言い方はないですね(^▽^;))なってしまいすみませんでした。 朝一で学校へ来て、読ませて頂きました。 なのに、今まで御礼もせずごめんなさい。 なんとか、読解することが出来て、ROUGEさんと鮎太郎さんのご教授の意味がわかりました。(なんとなく)
鮎太郎さんがご提示してくれたコードですが、 With Worksheets("B表") でインデックスが有効範囲にありませんとなってしまいます。
>A表のキー項目(C〜F)のデータがある範囲をコピーしてB表C表・・・へ と書きましたが、別のファイルになっている為、(質問の仕方が足りなくてすみません) With workboooks("test 管理表").Worksheets("B表") webで異なるオブジェクトならネスト構造に出来ると書いてあったので With workboooks("test 管理表").Worksheets("B表") なども試してみました。 ・・・お手上げです。
初めの趣旨(>どう使えばいいのかをわかり易く教えていただけませんでしょうか?) とは変わってしまいますが、ご教授下さい。 よろしくお願い致します。
ばんばんです。 すごく困っています。 鮎太郎さんご不在のようですので、どなたか教えて頂けないでしょうか。 よろしくお願い致します。 (ばんばん)
これだとどうですか? ---------- Sub test() Dim filename As String Dim PATH As String PATH = "\\aaa\sss\管理\管理表\" strfilename = PATH & "A表" & ".xls" If Dir(strfilename) <> "" Then Workbooks.Open (strfilename) With Worksheets("A管理表") .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy End With '←ここにEnd Withを移動しました。 With Worksheets("B表") .Range("B4:E" & .Range("E65536").End(xlUp).Row) _ .PasteSpecial Paste:=xlValues End With End If End Sub
WookBoooksはミスタイピングですね・・・。(←これは今回は関係ないですよね?) (ROUGE)
ROUGEさん、お返事ありがとうございました。 早速、試してみたのですが、 With Worksheets("B表") でやはり、インデックスが有効範囲にありません。となってしまいます。 今日も早くも退社時間になってしまいましたので、朝一チェックになってしまいますが よろしくお願い致します。 (ばんばん)
これでいかがですか? ---------- Sub test() Dim strfilename As String Dim PATH As String PATH = "\\aaa\sss\管理\管理表\" strfilename = PATH & "A表" & ".xls" If Dir(strfilename) <> "" Then Workbooks.Open (strfilename) With Worksheets("A管理表") .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy End With With Worksheets("B表") .Range("B4").PasteSpecial Paste:=xlValues End With End If Application.CutCopyMode = False End Sub
A表.xlsのシート名はちゃんと設定されていますか? (ROUGE)
えっと・・・、不在でした・・・_/ ̄|○ il||li ばんばんさんのコードを拝見したときに、 strfilename = PATH & "A表" & ".xls" If Dir(strfilename) <> "" Then Workbooks.Open (strfilename) と、なったあとで、開いたブック名を指定しての コードではなかったので、同じブックにA管理表とB表があるとおもっていましたが、 もしかしたら、別ブックでしょうか? となると、コードのなかで、親オブジェクト(ブック名)を指定しないといけないような・・・。
(川野鮎太郎) ---- ROUGEさん、コードありがとうございました。 鮎太郎さんお返事ありがとうございました。 やはり、ご不在だったのですね。 ROUGEさんのコードで試してみましたが、やはり・・・。
鮎太郎さんの仰るとおり、別ファイルなので(すみませんでした<(_ _)>) 一応、自分なりにコードを考えてみましたがどうでしょうか(;^_^A アセアセ・・・ でもやはり、インデックスが・・・となってしまいます。 どうやらデバッグすると
Sub test() Dim strfilename As String Dim filename As String 'ここ足してみました。 Dim PATH As String PATH = "\\aaa\sss\管理\管理表\" strfilename = PATH & "A表" & ".xls" filename = PATH & "B表" & ".xls" If Dir(strfilename) <> "" Then Workbooks.Open (strfilename) With Worksheets("A表") .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy End With Workbooks(filename).Active ←ここが黄色くなりますが With Worksheets("B表") ←worksheets("B表")=<有効範囲にありません> .Range ("B4") .PasteSpecial Paste:=xlValues End With End If Application.CutCopyMode = False End Sub
>となると、コードのなかで、親オブジェクト(ブック名)を指定しないといけないような・・・。 は、Workbooks(filename).Activeのコードであっているでしょうか? 皆さん任せにせず、自分でも理解できるように頑張っているつもりなのですが、 一度ハマってしまうとなかなか抜けれずに一日が彡(-_-;)彡ヒューヒュー かなり長期戦になりそうですが( ̄ェ ̄;) エッ?お付き合い頂けますでしょうか よろしくお願いします。
A管理表.xlsのA管理表シートのA1セルにファイル名を入力(.xlsは不要)して、目的のブックを開き、そこにデータを写す前提で作成。 また、B表.xlsにはB表というシート、C表.xlsにはC表というシートがある前提で作成しました。 あと、A管理表と同じフォルダにB表、C表・・が格納されている前提です。 ------ Sub test() Dim myPath As String Dim strFileName As String Dim strFileSubname As String Dim WB As Workbook
Application.ScreenUpdating = False With ThisWorkbook.Sheets("A管理表") .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy End With myPath = ThisWorkbook.PATH & "\" If Range("A1").Value = "" Then MsgBox "ファイルが指定されていません" Exit Sub Else strFileSubname = ThisWorkbook.Sheets("A管理表").Range("A1").Value strFileName = myPath & strFileSubname & ".xls" End If If Dir(strFileName) <> "" Then Workbooks.Open (strFileName) Else MsgBox "指定したファイルはこのフォルダにありません" Exit Sub End If With Worksheets(strFileSubname) .Range("B4").PasteSpecial Paste:=xlValues End With ThisWorkbook.Activate With Application .CutCopyMode = False .ScreenUpdating = True End With End Sub
どうでしょうか? (ROUGE)
ROUGEさん、ありがとうございました。 質問があるのですが、インデックスが有効範囲にありません。となる時は どのような場合が多いのでしょう? 自分は、path名とかファイル名が違っている場合に出るんだと思っていたのですが、 今回の場合、path名もファイル名も合っています。 何度試しても同じ部分でエラーになってしまうのは 何故なのでしょうかΣ(T▽T;) ぐわわぁぁ〜ん! 私の容量少ない脳みそはいろんなコードでゴチャゴチャです。 もう一度、したいことを整理してコードを組みなおすしかないでしょうか ちょっと頭を整理してみます(_ _。)・・・シュン
推測ですが、ばんばんさんが参照していると思っているブック(シート)を Excelが参照していないからではないでしょうか? (ROUGE)
>Excelが参照していないからではないでしょうか? すみません、どぉいう意味なのでしょうか? 教えてください。 ・・・あまり、長すぎるとROUGEさんにご迷惑ですね(;^_^A アセアセ・・・ 物分りが悪く本当にすみません。。。 (ばんばん)
眉に唾をつけながら見て下さいね(^ー^;; >Workbooks(filename).Active ←ここが黄色くなりますが Activeではなく、Activateですね。 >With Worksheets("B表") ←worksheets("B表")=<有効範囲にありません> とすると、この段階でアクティブなbookはA管理表.xlsとなります。 A管理表にB表というシートがあれば(思った動きではありませんが)動きます。 (ROUGE)
何をどぅしても無理なようなので少々あきらめモードに突入気味です。 でも、今回のような処理って特別な処理ではないですよね? 皆さん似たような事きっとされている筈・・・。 なのにどぅしてあたしだけ・・・。 あまり、長くなっても生徒の方にも、校長先生にも、ROUGEさん・鮎さん・他先生にも 申し訳ないので、また、頭がすっきりしたらレスしてみます。 ROUGEさん、鮎さん、ありがとうございました・・(oT-T)尸~~ (ばんばん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.