• 締切済み

ExcelのVBAでシートを直接Selectする方法

次のようなVBAがあります。 For intAge = 6 To 11  Range(strBase & intAge).Select  Selection.Copy  Windows(strMasterName).Activate  Sheets(strBase).Select  Range(strBase & intAge & "_" & strNo).Select  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, Blanks:= _   False, Transpose:=False  Windows(strFileName).Activate  Sheets(strBase).Select Next intAge 2つのファイルを開いていて、1つのファイルから別のファイルにデータを連続してコピーしています。 WindowsをActivateして、SheetsをSelectしてからRangeをSelectしているのですが、 直接、WindowsのSheetsのRangeをSelectする方法はないのでしょうか? Windows(strFileName).Sheets(strBase).Range(strBase & intAge).Select としたらエラーが発生してダメでした。 わかる方いらっしゃいましたら、よろしくお願いいたします。 (これで十分動いているのですが、もう少し、簡潔な文にしたいのです)

  • tiga-
  • お礼率77% (170/219)

みんなの回答

  • ebis
  • ベストアンサー率27% (17/61)
回答No.5

No.1で回答した者です。 値を入れたい場合、Valueプロパティを指定しますが RangeオブジェクトはデフォルトがValueですので無指定でよかったはずです。 気になったのは "_"& srtNo の部分ですが、これは必要でしょうか For intAge = 6 To 11 Workbooks(strMasterName).Worksheets(strBase).Range(strBase & intAge) = _ Workbooks(strFileName).Worksheets(strBase).Range(strBase & intAge) Next intAge これではダメでしょうか

tiga-
質問者

お礼

ありがとうございます。 「"_"& srtNo 」の部分は、学校番号が入ります。 このVBAはFDで各学校からもらったデータをまとめるものです。 したがって、「"_"& srtNo 」の部分がないとどの学校の場所にコピーするのかわからなくなります。 また、私が作ったVBA(キーボードマクロの編集)でも、うまく動いていたので「"_"& srtNo 」が問題とは思えないのですが。 WorkbooksとWorksheetsをHelpで見たのですが、オブジェクトとプロパティがあり私には理解できませんでした。 ebisさんのを参考にいろいろ試してみようと思います。 ありがとうございます。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

簡略し過すぎたでしょうか・・・・ Windows(strFileName).Sheets(strBase).Range(strBase & intAge) = Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).Text という意味だったのですが。。。

tiga-
質問者

お礼

ありがとうございます。 しかし、「438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」というメッセージが出ました。 Windowsオブジェクト(プロパティ?)には入力時にでるプロパティ等のリストにSheetsの候補が出てきませんでした。 Windowsに関係ありそうなプロパティにActiveSheetというやつがありました。 2つのWindow上でアクティブなシート同士のコピーができそうです。 いろいろ試してみようと思います。 重ね重ねありがとうございます。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

値のコピーだけをしたいのであれば、 Range("A1") = Range("A2").Text でも可能なのですが、、、

tiga-
質問者

お礼

ありがとうございます。 しかし、試してはいないのですが、上記の方法ですと、同じシート内でないとうまくいかない気がします。 私がやりたいのは、別のファイル(ブック)のデータをコピーするので、少なくとも、ファイル名とかを指定してやらなければならないと思います。 イメージは Hogehoge("ファイルA.xls").Range("A1")=Hogehoge("ファイルB.xls").Range("A2").Text という感じですが、(もちろん、Hogehogeには何かオブジェクトが入るのですが) うまく表現できなくてすみません。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

よくわかっておりませんが、、、間違っていたら失礼。。。 Selectionを使用しないで、そのまま対象を指定したらどうでしょうか? For intAge = 6 To 11 Windows(strFileName).Sheets(strBase).Range(strBase & intAge).Copy Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).PasteSpecial xlValues, xlNone, False, False Next intAge

tiga-
質問者

お礼

ありがとうございます。 ただ、「438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」というメッセージが出ました。 実は、いろいろ試した結果、 Application.Goto Reference:=strBase & intAge Selection.copy Windows(strMasterName).Activate Application.Goto Reference:=strBase & intAge & "_" & strNo Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _  False, Transpose:=False としても動きました。(キーボードマクロからの編集です) この方が、前のより少し、文章が簡潔になりました。 (でも、もし、TAGOSAKU7さんのような方法ができたらもっと簡潔なのですが)

  • ebis
  • ベストアンサー率27% (17/61)
回答No.1

自信はないのですが、これではだめでしょうか。 For intAge = 6 To 11 Workbooks(strMasterName).Worksheets(strBase).Range(strBase & intAge & "_" & srtNo) = _ Workbooks(strFileName).Worksheets(strBase).Range(strBase & intAge) Next intAge

tiga-
質問者

お礼

ありがとうございます。 でも、「1004 アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが出ました。(私が適当に設定した時のエラーと同じです) また、もし、このエラーが出なかったとしても、この方法では、そのままコピーされてしまうのではないのでしょうか? 実は、コピー元は計算式が入っていて、その結果だけをコピーするため、「値のコピー」を行っています。 私も、あまりよくわかっていないので、間違っているかもしれませんが。 とにかく、お答えいただいたことには感謝しています。

関連するQ&A

  • マクロについて教えてください

    マクロの超初心者です。 数式を入力しているのではなく、配付物をエクセルで作成しているのですが、同じもの(氏名や項目は違いますが)を100枚ほど作成しているのでマクロを・・・と思ったのですがやり方が全く分かりません。 sheet1からsheet2に下記のようにデータを写したいのですが、やり方を教えてください。 ●氏名が入力されています sheet1(A9) → sheet2(C2) sheet1(E9) → sheet2(C5) sheet1(I9) → sheet2(C8) ●項目1 sheet1(A8) → sheet2(E3) sheet1(E8) → sheet2(E6) sheet1(I8) → sheet2(E9) ●項目2 sheet1(A18~D18の結合セル) → sheet2(E2) sheet1(E18~H18の結合セル) → sheet2(E5) sheet1(I18~L18の結合セル) → sheet2(E8) と反映させたいのですが、250行あるのですが、 簡単にマクロで出来ないでしょうか?? ちなみに↓コレが上記の内容で作ってみたものです。 わかりずらい質問でスイマセン。 Range("A9").Select Selection.Copy Sheets("sheet2").Select Range("C2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E9").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("C5").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I9").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("C8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("A8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E3").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E6").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E9").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("A18:D18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E18:H18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E5").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I18:L18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • こんなマクロなんですが。

    下記のマクロでエクセルの表からデータ(文字列)を取得するようにしたいとおもっています。 Range("B23").Select Selection.Copy Range("F23").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("B24").Select Selection.Copy Range("F24").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("B25").Select Application.CutCopyMode = False Sheets("September 03").Copy Before:=Sheets(2)          ←ここ Selection.Copy Sheets("September 03 (2)").Select                   ←ここ Sheets("September 03 (2)").Name = "September 10"       ←ここ Range("B33").Select Application.CutCopyMode = False ActiveWindow.SmallScroll Down:=-15 Range("F12:L18").SelectEnd Sub と、まだ続くんですが、とりあえずここまでで。 番地のデータを取り込むようにしたいんですが、うまくいきません。 ←ここ っていうのがまさにそれです。

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • マクロ教えてください(繰り返しの方法)

    マクロ、VBAは超初心者です。 Sheets("optimizer").Select Range("C7").Select Selection.Copy Range("E6").Select ActiveSheet.Paste SolverOk SetCell:="$F$34", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$28:$O$28" SolverSolve Userfinish:=True Range("F28:Q28").Select Selection.Copy Sheets("table").Select Range("D7").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("optimizer").Select Range("C8").Select Selection.Copy Range("E6").Select ActiveSheet.Paste SolverOk SetCell:="$F$34", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$28:$O$28" SolverSolve Userfinish:=True Range("F28:Q28").Select Selection.Copy Sheets("table").Select Range("D8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False 上のように同じことを何回も繰り返すのですが、2行目の Range("C8").SelectがC9, C10, C11・・・・、また下から3行目の Range("D8").SelectがD9, D10, D11・・・と貼り付けていくところだけを変えていきたいのです。 今は長いプロシージャを書いているのですが、簡単でする方法があればご教授ください。 宜しくお願いいたします。

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • excel2000のVBAでループ内でループさせる方法

    excel2000でVBAを組んでいるのですが下記のような構文でループさせている中でループをさせたいのですがエラーメッセージ "Nextに対するForがありません"と出てしまいます。構文を以下に示しますので間違っている点をご指摘いただけたらと思います。 Dim h As Integer Dim I As Integer For h = 1 To 2 If h = 1 Then F_Name = "回送依頼(通常と翌月).xls" ElseIf h = 2 Then F_Name = "回送依頼(当日).xls" End If Windows(F_Name).Activate ActiveSheet.Unprotect For I = 1 To 2 'ループ内ループ If I = 1 Then S_Name = "通常" ElseIf I = 2 Then S_Name = "通常2" End If Sheets(S_Name).Activate Range("c7:i16").Select Selection.Copy Windows("請求書.xls").Activate Sheets("3").Select Selection.PasteSpecial Paste:=xlValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Windows(F_Name).Activate ActiveSheet.Unprotect Sheets(S_Name).Activate Range("b7:b16").Select Selection.Copy Windows("請求書.xls").Activate Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False '値貼付 Next I ActiveWorkbook.Save ActiveWorkbook.Close Next h

  • 色々なものを見ながら作っている初心者です。

    色々なものを見ながら作っている初心者です。 よろしくお願いします。 VBAでのエラー対処について 下記のマクロを実行すると、実行時 「Selection.Resize(, Selection.Columns.Count - 2).Select」のところで セルがブランクだった時にエラーが出てします。 対処の方法を教えていただけませんでしょうか? よろしくお願いします。 Sheets("sheetB1").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("D12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB1").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("E12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("B1").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetB2").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("J12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB2").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("K12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("steetB2").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=Fals

専門家に質問してみよう